@mathripper/ideal-cli 1.0.0
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/README.md +263 -0
- package/dist/index.d.ts +186 -0
- package/dist/index.js +6887 -0
- package/dist/index.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../node_modules/tsup/assets/esm_shims.js","../src/utils/file-system.ts","../node_modules/kind-of/index.js","../node_modules/is-extendable/index.js","../node_modules/extend-shallow/index.js","../node_modules/section-matter/index.js","../node_modules/js-yaml/lib/js-yaml/common.js","../node_modules/js-yaml/lib/js-yaml/exception.js","../node_modules/js-yaml/lib/js-yaml/mark.js","../node_modules/js-yaml/lib/js-yaml/type.js","../node_modules/js-yaml/lib/js-yaml/schema.js","../node_modules/js-yaml/lib/js-yaml/type/str.js","../node_modules/js-yaml/lib/js-yaml/type/seq.js","../node_modules/js-yaml/lib/js-yaml/type/map.js","../node_modules/js-yaml/lib/js-yaml/schema/failsafe.js","../node_modules/js-yaml/lib/js-yaml/type/null.js","../node_modules/js-yaml/lib/js-yaml/type/bool.js","../node_modules/js-yaml/lib/js-yaml/type/int.js","../node_modules/js-yaml/lib/js-yaml/type/float.js","../node_modules/js-yaml/lib/js-yaml/schema/json.js","../node_modules/js-yaml/lib/js-yaml/schema/core.js","../node_modules/js-yaml/lib/js-yaml/type/timestamp.js","../node_modules/js-yaml/lib/js-yaml/type/merge.js","../node_modules/js-yaml/lib/js-yaml/type/binary.js","../node_modules/js-yaml/lib/js-yaml/type/omap.js","../node_modules/js-yaml/lib/js-yaml/type/pairs.js","../node_modules/js-yaml/lib/js-yaml/type/set.js","../node_modules/js-yaml/lib/js-yaml/schema/default_safe.js","../node_modules/js-yaml/lib/js-yaml/type/js/undefined.js","../node_modules/js-yaml/lib/js-yaml/type/js/regexp.js","../node_modules/js-yaml/lib/js-yaml/type/js/function.js","../node_modules/js-yaml/lib/js-yaml/schema/default_full.js","../node_modules/js-yaml/lib/js-yaml/loader.js","../node_modules/js-yaml/lib/js-yaml/dumper.js","../node_modules/js-yaml/lib/js-yaml.js","../node_modules/js-yaml/index.js","../node_modules/gray-matter/lib/engines.js","../node_modules/strip-bom-string/index.js","../node_modules/gray-matter/lib/utils.js","../node_modules/gray-matter/lib/defaults.js","../node_modules/gray-matter/lib/engine.js","../node_modules/gray-matter/lib/stringify.js","../node_modules/gray-matter/lib/excerpt.js","../node_modules/gray-matter/lib/to-file.js","../node_modules/gray-matter/lib/parse.js","../node_modules/gray-matter/index.js","../src/index.ts","../src/commands/index.ts","../src/constants/messages.ts","../src/commands/doctor.ts","../src/services/validator.ts","../src/utils/detector.ts","../src/utils/logger.ts","../node_modules/chalk/source/index.js","../node_modules/chalk/source/vendor/ansi-styles/index.js","../node_modules/chalk/source/vendor/supports-color/index.js","../node_modules/chalk/source/utilities.js","../src/commands/config.ts","../src/services/config-manager.ts","../src/commands/update.ts","../src/services/template-manager.ts","../src/clients/github-client.ts","../src/utils/http.ts","../src/constants/defaults.ts","../src/services/diff-manager.ts","../src/types/index.ts","../src/types/config.ts","../src/types/template.ts","../src/types/doctor.ts","../src/types/metadata.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","/**\n * 文件系统工具\n *\n * 提供跨平台的文件和目录操作功能\n */\n\nimport fs from 'fs-extra';\nimport path from 'path';\nimport crypto from 'crypto';\nimport Mustache from 'mustache';\n\n/**\n * 确保目录存在,如果不存在则创建\n * @param dirPath 目录路径\n */\nexport async function ensureDir(dirPath: string): Promise<void> {\n await fs.ensureDir(dirPath);\n}\n\n/**\n * 检查目录是否为空\n * @param dirPath 目录路径\n * @returns 如果目录为空返回 true,否则返回 false\n */\nexport async function isEmpty(dirPath: string): Promise<boolean> {\n try {\n const files = await fs.readdir(dirPath);\n return files.length === 0;\n } catch (error) {\n // 如果目录不存在,视为空\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n return true;\n }\n throw error;\n }\n}\n\n/**\n * 复制目录\n * @param src 源目录路径\n * @param dest 目标目录路径\n * @param options 复制选项\n */\nexport interface CopyDirOptions {\n /** 覆盖已存在的文件 */\n overwrite?: boolean;\n /** 过滤函数,返回 true 则复制 */\n filter?: (src: string) => boolean;\n}\n\nexport async function copyDir(\n src: string,\n dest: string,\n options: CopyDirOptions = {}\n): Promise<void> {\n const { overwrite = true, filter } = options;\n await fs.copy(src, dest, {\n overwrite,\n filter: filter ? (srcPath: string) => filter(srcPath) : undefined,\n });\n}\n\n/**\n * 读取文件内容\n * @param filePath 文件路径\n * @param encoding 文件编码,默认 utf-8\n * @returns 文件内容字符串\n */\nexport async function readFile(\n filePath: string,\n encoding: BufferEncoding = 'utf-8'\n): Promise<string> {\n return await fs.readFile(filePath, encoding);\n}\n\n/**\n * 写入文件\n * @param filePath 文件路径\n * @param content 文件内容\n * @param options 写入选项\n */\nexport interface WriteFileOptions {\n /** 文件编码,默认 utf-8 */\n encoding?: BufferEncoding;\n /** 模式 */\n mode?: number | string;\n /** 标志 */\n flag?: string;\n}\n\nexport async function writeFile(\n filePath: string,\n content: string,\n options: WriteFileOptions = {}\n): Promise<void> {\n const { encoding = 'utf-8', mode, flag } = options;\n await fs.writeFile(filePath, content, { encoding, mode, flag });\n}\n\n/**\n * 检查文件是否存在\n * @param filePath 文件路径\n * @returns 如果文件存在返回 true,否则返回 false\n */\nexport async function fileExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * 检查路径是否存在(文件或目录)\n * @param targetPath 目标路径\n * @returns 如果路径存在返回 true,否则返回 false\n */\nexport async function pathExists(targetPath: string): Promise<boolean> {\n return await fs.pathExists(targetPath);\n}\n\n/**\n * 获取文件统计信息\n * @param filePath 文件路径\n * @returns 文件统计信息\n */\nexport async function getStats(filePath: string): Promise<fs.Stats> {\n return await fs.stat(filePath);\n}\n\n/**\n * 读取目录内容\n * @param dirPath 目录路径\n * @returns 目录中的文件和子目录列表\n */\nexport async function readDir(dirPath: string): Promise<string[]> {\n return await fs.readdir(dirPath);\n}\n\n/**\n * 删除文件或目录\n * @param targetPath 目标路径\n */\nexport async function remove(targetPath: string): Promise<void> {\n await fs.remove(targetPath);\n}\n\n/**\n * 创建文件的目录结构\n * @param filePath 文件路径\n */\nexport async function ensureFileDir(filePath: string): Promise<void> {\n await fs.ensureDir(path.dirname(filePath));\n}\n\n/**\n * 计算内容的 MD5 哈希值\n * @param content 要计算哈希的内容\n * @returns MD5 哈希值(小写十六进制字符串)\n */\nexport function calculateHash(content: string): string {\n return crypto.createHash('md5').update(content).digest('hex');\n}\n\n/**\n * 计算文件的 MD5 哈希值\n * @param filePath 文件路径\n * @returns MD5 哈希值(小写十六进制字符串)\n */\nexport async function calculateFileHash(filePath: string): Promise<string> {\n const content = await readFile(filePath);\n return calculateHash(content);\n}\n\n/**\n * 模板变量替换(使用 Mustache)\n * @param template 模板字符串\n * @param variables 变量对象\n * @returns 替换后的字符串\n */\nexport function renderTemplate(\n template: string,\n variables: Record<string, unknown>\n): string {\n return Mustache.render(template, variables);\n}\n\n/**\n * 读取模板文件并替换变量\n * @param templatePath 模板文件路径\n * @param variables 变量对象\n * @returns 替换后的字符串\n */\nexport async function renderTemplateFile(\n templatePath: string,\n variables: Record<string, unknown>\n): Promise<string> {\n const template = await readFile(templatePath);\n return renderTemplate(template, variables);\n}\n\n/**\n * 获取项目根目录\n * 从当前工作目录向上查找包含 .ideal 目录的目录\n * @param startPath 起始路径,默认为当前工作目录\n * @returns 项目根目录路径,如果未找到则返回 null\n */\nexport async function getProjectRoot(\n startPath: string = process.cwd()\n): Promise<string | null> {\n let currentPath = path.resolve(startPath);\n\n while (currentPath !== path.dirname(currentPath)) {\n const idealPath = path.join(currentPath, '.ideal');\n if (await pathExists(idealPath)) {\n return currentPath;\n }\n currentPath = path.dirname(currentPath);\n }\n\n // 检查根目录\n const rootIdealPath = path.join(currentPath, '.ideal');\n if (await pathExists(rootIdealPath)) {\n return currentPath;\n }\n\n return null;\n}\n\n/**\n * 获取跨平台规范化路径\n * @param targetPath 目标路径\n * @returns 规范化后的路径\n */\nexport function normalizePath(targetPath: string): string {\n return path.normalize(targetPath);\n}\n\n/**\n * 连接路径片段\n * @param ...pathSegments 路径片段\n * @returns 连接后的路径\n */\nexport function joinPaths(...pathSegments: string[]): string {\n return path.join(...pathSegments);\n}\n\n/**\n * 获取路径的目录名\n * @param targetPath 目标路径\n * @returns 目录名\n */\nexport function getDirName(targetPath: string): string {\n return path.dirname(targetPath);\n}\n\n/**\n * 获取路径的文件名\n * @param targetPath 目标路径\n * @returns 文件名\n */\nexport function getBaseName(targetPath: string): string {\n return path.basename(targetPath);\n}\n\n/**\n * 获取文件扩展名\n * @param targetPath 目标路径\n * @returns 扩展名(包含点号)\n */\nexport function getExtName(targetPath: string): string {\n return path.extname(targetPath);\n}\n\n/**\n * 将路径转换为绝对路径\n * @param targetPath 目标路径\n * @returns 绝对路径\n */\nexport function toAbsolutePath(targetPath: string): string {\n return path.resolve(targetPath);\n}\n\n/**\n * 获取相对路径\n * @param from 起始路径\n * @param to 目标路径\n * @returns 相对路径\n */\nexport function getRelativePath(from: string, to: string): string {\n return path.relative(from, to);\n}\n\n/**\n * 递归遍历目录,返回所有文件路径\n * @param dirPath 目录路径\n * @param options 遍历选项\n * @returns 文件路径数组\n */\nexport interface WalkDirOptions {\n /** 是否包含目录路径 */\n includeDirs?: boolean;\n /** 过滤函数 */\n filter?: (filePath: string, stats: fs.Stats) => boolean | Promise<boolean>;\n}\n\nexport async function walkDir(\n dirPath: string,\n options: WalkDirOptions = {}\n): Promise<string[]> {\n const { includeDirs = false, filter } = options;\n const results: string[] = [];\n\n async function walk(currentPath: string): Promise<void> {\n const entries = await fs.readdir(currentPath, { withFileTypes: true });\n\n for (const entry of entries) {\n const entryPath = path.join(currentPath, entry.name);\n\n if (entry.isDirectory()) {\n if (includeDirs) {\n const stats = await fs.stat(entryPath);\n if (!filter || (await filter(entryPath, stats))) {\n results.push(entryPath);\n }\n }\n await walk(entryPath);\n } else if (entry.isFile()) {\n const stats = await fs.stat(entryPath);\n if (!filter || (await filter(entryPath, stats))) {\n results.push(entryPath);\n }\n }\n }\n }\n\n await walk(dirPath);\n return results;\n}\n","var toString = Object.prototype.toString;\n\nmodule.exports = function kindOf(val) {\n if (val === void 0) return 'undefined';\n if (val === null) return 'null';\n\n var type = typeof val;\n if (type === 'boolean') return 'boolean';\n if (type === 'string') return 'string';\n if (type === 'number') return 'number';\n if (type === 'symbol') return 'symbol';\n if (type === 'function') {\n return isGeneratorFn(val) ? 'generatorfunction' : 'function';\n }\n\n if (isArray(val)) return 'array';\n if (isBuffer(val)) return 'buffer';\n if (isArguments(val)) return 'arguments';\n if (isDate(val)) return 'date';\n if (isError(val)) return 'error';\n if (isRegexp(val)) return 'regexp';\n\n switch (ctorName(val)) {\n case 'Symbol': return 'symbol';\n case 'Promise': return 'promise';\n\n // Set, Map, WeakSet, WeakMap\n case 'WeakMap': return 'weakmap';\n case 'WeakSet': return 'weakset';\n case 'Map': return 'map';\n case 'Set': return 'set';\n\n // 8-bit typed arrays\n case 'Int8Array': return 'int8array';\n case 'Uint8Array': return 'uint8array';\n case 'Uint8ClampedArray': return 'uint8clampedarray';\n\n // 16-bit typed arrays\n case 'Int16Array': return 'int16array';\n case 'Uint16Array': return 'uint16array';\n\n // 32-bit typed arrays\n case 'Int32Array': return 'int32array';\n case 'Uint32Array': return 'uint32array';\n case 'Float32Array': return 'float32array';\n case 'Float64Array': return 'float64array';\n }\n\n if (isGeneratorObj(val)) {\n return 'generator';\n }\n\n // Non-plain objects\n type = toString.call(val);\n switch (type) {\n case '[object Object]': return 'object';\n // iterators\n case '[object Map Iterator]': return 'mapiterator';\n case '[object Set Iterator]': return 'setiterator';\n case '[object String Iterator]': return 'stringiterator';\n case '[object Array Iterator]': return 'arrayiterator';\n }\n\n // other\n return type.slice(8, -1).toLowerCase().replace(/\\s/g, '');\n};\n\nfunction ctorName(val) {\n return typeof val.constructor === 'function' ? val.constructor.name : null;\n}\n\nfunction isArray(val) {\n if (Array.isArray) return Array.isArray(val);\n return val instanceof Array;\n}\n\nfunction isError(val) {\n return val instanceof Error || (typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number');\n}\n\nfunction isDate(val) {\n if (val instanceof Date) return true;\n return typeof val.toDateString === 'function'\n && typeof val.getDate === 'function'\n && typeof val.setDate === 'function';\n}\n\nfunction isRegexp(val) {\n if (val instanceof RegExp) return true;\n return typeof val.flags === 'string'\n && typeof val.ignoreCase === 'boolean'\n && typeof val.multiline === 'boolean'\n && typeof val.global === 'boolean';\n}\n\nfunction isGeneratorFn(name, val) {\n return ctorName(name) === 'GeneratorFunction';\n}\n\nfunction isGeneratorObj(val) {\n return typeof val.throw === 'function'\n && typeof val.return === 'function'\n && typeof val.next === 'function';\n}\n\nfunction isArguments(val) {\n try {\n if (typeof val.length === 'number' && typeof val.callee === 'function') {\n return true;\n }\n } catch (err) {\n if (err.message.indexOf('callee') !== -1) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * If you need to support Safari 5-7 (8-10 yr-old browser),\n * take a look at https://github.com/feross/is-buffer\n */\n\nfunction isBuffer(val) {\n if (val.constructor && typeof val.constructor.isBuffer === 'function') {\n return val.constructor.isBuffer(val);\n }\n return false;\n}\n","/*!\n * is-extendable <https://github.com/jonschlinkert/is-extendable>\n *\n * Copyright (c) 2015, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function isExtendable(val) {\n return typeof val !== 'undefined' && val !== null\n && (typeof val === 'object' || typeof val === 'function');\n};\n","'use strict';\n\nvar isObject = require('is-extendable');\n\nmodule.exports = function extend(o/*, objects*/) {\n if (!isObject(o)) { o = {}; }\n\n var len = arguments.length;\n for (var i = 1; i < len; i++) {\n var obj = arguments[i];\n\n if (isObject(obj)) {\n assign(o, obj);\n }\n }\n return o;\n};\n\nfunction assign(a, b) {\n for (var key in b) {\n if (hasOwn(b, key)) {\n a[key] = b[key];\n }\n }\n}\n\n/**\n * Returns true if the given `key` is an own property of `obj`.\n */\n\nfunction hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n","'use strict';\n\nvar typeOf = require('kind-of');\nvar extend = require('extend-shallow');\n\n/**\n * Parse sections in `input` with the given `options`.\n *\n * ```js\n * var sections = require('{%= name %}');\n * var result = sections(input, options);\n * // { content: 'Content before sections', sections: [] }\n * ```\n * @param {String|Buffer|Object} `input` If input is an object, it's `content` property must be a string or buffer.\n * @param {Object} options\n * @return {Object} Returns an object with a `content` string and an array of `sections` objects.\n * @api public\n */\n\nmodule.exports = function(input, options) {\n if (typeof options === 'function') {\n options = { parse: options };\n }\n\n var file = toObject(input);\n var defaults = {section_delimiter: '---', parse: identity};\n var opts = extend({}, defaults, options);\n var delim = opts.section_delimiter;\n var lines = file.content.split(/\\r?\\n/);\n var sections = null;\n var section = createSection();\n var content = [];\n var stack = [];\n\n function initSections(val) {\n file.content = val;\n sections = [];\n content = [];\n }\n\n function closeSection(val) {\n if (stack.length) {\n section.key = getKey(stack[0], delim);\n section.content = val;\n opts.parse(section, sections);\n sections.push(section);\n section = createSection();\n content = [];\n stack = [];\n }\n }\n\n for (var i = 0; i < lines.length; i++) {\n var line = lines[i];\n var len = stack.length;\n var ln = line.trim();\n\n if (isDelimiter(ln, delim)) {\n if (ln.length === 3 && i !== 0) {\n if (len === 0 || len === 2) {\n content.push(line);\n continue;\n }\n stack.push(ln);\n section.data = content.join('\\n');\n content = [];\n continue;\n }\n\n if (sections === null) {\n initSections(content.join('\\n'));\n }\n\n if (len === 2) {\n closeSection(content.join('\\n'));\n }\n\n stack.push(ln);\n continue;\n }\n\n content.push(line);\n }\n\n if (sections === null) {\n initSections(content.join('\\n'));\n } else {\n closeSection(content.join('\\n'));\n }\n\n file.sections = sections;\n return file;\n};\n\nfunction isDelimiter(line, delim) {\n if (line.slice(0, delim.length) !== delim) {\n return false;\n }\n if (line.charAt(delim.length + 1) === delim.slice(-1)) {\n return false;\n }\n return true;\n}\n\nfunction toObject(input) {\n if (typeOf(input) !== 'object') {\n input = { content: input };\n }\n\n if (typeof input.content !== 'string' && !isBuffer(input.content)) {\n throw new TypeError('expected a buffer or string');\n }\n\n input.content = input.content.toString();\n input.sections = [];\n return input;\n}\n\nfunction getKey(val, delim) {\n return val ? val.slice(delim.length).trim() : '';\n}\n\nfunction createSection() {\n return { key: '', data: '', content: '' };\n}\n\nfunction identity(val) {\n return val;\n}\n\nfunction isBuffer(val) {\n if (val && val.constructor && typeof val.constructor.isBuffer === 'function') {\n return val.constructor.isBuffer(val);\n }\n return false;\n}\n","'use strict';\n\n\nfunction isNothing(subject) {\n return (typeof subject === 'undefined') || (subject === null);\n}\n\n\nfunction isObject(subject) {\n return (typeof subject === 'object') && (subject !== null);\n}\n\n\nfunction toArray(sequence) {\n if (Array.isArray(sequence)) return sequence;\n else if (isNothing(sequence)) return [];\n\n return [ sequence ];\n}\n\n\nfunction extend(target, source) {\n var index, length, key, sourceKeys;\n\n if (source) {\n sourceKeys = Object.keys(source);\n\n for (index = 0, length = sourceKeys.length; index < length; index += 1) {\n key = sourceKeys[index];\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\n\nfunction repeat(string, count) {\n var result = '', cycle;\n\n for (cycle = 0; cycle < count; cycle += 1) {\n result += string;\n }\n\n return result;\n}\n\n\nfunction isNegativeZero(number) {\n return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number);\n}\n\n\nmodule.exports.isNothing = isNothing;\nmodule.exports.isObject = isObject;\nmodule.exports.toArray = toArray;\nmodule.exports.repeat = repeat;\nmodule.exports.isNegativeZero = isNegativeZero;\nmodule.exports.extend = extend;\n","// YAML error class. http://stackoverflow.com/questions/8458984\n//\n'use strict';\n\nfunction YAMLException(reason, mark) {\n // Super constructor\n Error.call(this);\n\n this.name = 'YAMLException';\n this.reason = reason;\n this.mark = mark;\n this.message = (this.reason || '(unknown reason)') + (this.mark ? ' ' + this.mark.toString() : '');\n\n // Include stack trace in error object\n if (Error.captureStackTrace) {\n // Chrome and NodeJS\n Error.captureStackTrace(this, this.constructor);\n } else {\n // FF, IE 10+ and Safari 6+. Fallback for others\n this.stack = (new Error()).stack || '';\n }\n}\n\n\n// Inherit from Error\nYAMLException.prototype = Object.create(Error.prototype);\nYAMLException.prototype.constructor = YAMLException;\n\n\nYAMLException.prototype.toString = function toString(compact) {\n var result = this.name + ': ';\n\n result += this.reason || '(unknown reason)';\n\n if (!compact && this.mark) {\n result += ' ' + this.mark.toString();\n }\n\n return result;\n};\n\n\nmodule.exports = YAMLException;\n","'use strict';\n\n\nvar common = require('./common');\n\n\nfunction Mark(name, buffer, position, line, column) {\n this.name = name;\n this.buffer = buffer;\n this.position = position;\n this.line = line;\n this.column = column;\n}\n\n\nMark.prototype.getSnippet = function getSnippet(indent, maxLength) {\n var head, start, tail, end, snippet;\n\n if (!this.buffer) return null;\n\n indent = indent || 4;\n maxLength = maxLength || 75;\n\n head = '';\n start = this.position;\n\n while (start > 0 && '\\x00\\r\\n\\x85\\u2028\\u2029'.indexOf(this.buffer.charAt(start - 1)) === -1) {\n start -= 1;\n if (this.position - start > (maxLength / 2 - 1)) {\n head = ' ... ';\n start += 5;\n break;\n }\n }\n\n tail = '';\n end = this.position;\n\n while (end < this.buffer.length && '\\x00\\r\\n\\x85\\u2028\\u2029'.indexOf(this.buffer.charAt(end)) === -1) {\n end += 1;\n if (end - this.position > (maxLength / 2 - 1)) {\n tail = ' ... ';\n end -= 5;\n break;\n }\n }\n\n snippet = this.buffer.slice(start, end);\n\n return common.repeat(' ', indent) + head + snippet + tail + '\\n' +\n common.repeat(' ', indent + this.position - start + head.length) + '^';\n};\n\n\nMark.prototype.toString = function toString(compact) {\n var snippet, where = '';\n\n if (this.name) {\n where += 'in \"' + this.name + '\" ';\n }\n\n where += 'at line ' + (this.line + 1) + ', column ' + (this.column + 1);\n\n if (!compact) {\n snippet = this.getSnippet();\n\n if (snippet) {\n where += ':\\n' + snippet;\n }\n }\n\n return where;\n};\n\n\nmodule.exports = Mark;\n","'use strict';\n\nvar YAMLException = require('./exception');\n\nvar TYPE_CONSTRUCTOR_OPTIONS = [\n 'kind',\n 'resolve',\n 'construct',\n 'instanceOf',\n 'predicate',\n 'represent',\n 'defaultStyle',\n 'styleAliases'\n];\n\nvar YAML_NODE_KINDS = [\n 'scalar',\n 'sequence',\n 'mapping'\n];\n\nfunction compileStyleAliases(map) {\n var result = {};\n\n if (map !== null) {\n Object.keys(map).forEach(function (style) {\n map[style].forEach(function (alias) {\n result[String(alias)] = style;\n });\n });\n }\n\n return result;\n}\n\nfunction Type(tag, options) {\n options = options || {};\n\n Object.keys(options).forEach(function (name) {\n if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {\n throw new YAMLException('Unknown option \"' + name + '\" is met in definition of \"' + tag + '\" YAML type.');\n }\n });\n\n // TODO: Add tag format check.\n this.tag = tag;\n this.kind = options['kind'] || null;\n this.resolve = options['resolve'] || function () { return true; };\n this.construct = options['construct'] || function (data) { return data; };\n this.instanceOf = options['instanceOf'] || null;\n this.predicate = options['predicate'] || null;\n this.represent = options['represent'] || null;\n this.defaultStyle = options['defaultStyle'] || null;\n this.styleAliases = compileStyleAliases(options['styleAliases'] || null);\n\n if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {\n throw new YAMLException('Unknown kind \"' + this.kind + '\" is specified for \"' + tag + '\" YAML type.');\n }\n}\n\nmodule.exports = Type;\n","'use strict';\n\n/*eslint-disable max-len*/\n\nvar common = require('./common');\nvar YAMLException = require('./exception');\nvar Type = require('./type');\n\n\nfunction compileList(schema, name, result) {\n var exclude = [];\n\n schema.include.forEach(function (includedSchema) {\n result = compileList(includedSchema, name, result);\n });\n\n schema[name].forEach(function (currentType) {\n result.forEach(function (previousType, previousIndex) {\n if (previousType.tag === currentType.tag && previousType.kind === currentType.kind) {\n exclude.push(previousIndex);\n }\n });\n\n result.push(currentType);\n });\n\n return result.filter(function (type, index) {\n return exclude.indexOf(index) === -1;\n });\n}\n\n\nfunction compileMap(/* lists... */) {\n var result = {\n scalar: {},\n sequence: {},\n mapping: {},\n fallback: {}\n }, index, length;\n\n function collectType(type) {\n result[type.kind][type.tag] = result['fallback'][type.tag] = type;\n }\n\n for (index = 0, length = arguments.length; index < length; index += 1) {\n arguments[index].forEach(collectType);\n }\n return result;\n}\n\n\nfunction Schema(definition) {\n this.include = definition.include || [];\n this.implicit = definition.implicit || [];\n this.explicit = definition.explicit || [];\n\n this.implicit.forEach(function (type) {\n if (type.loadKind && type.loadKind !== 'scalar') {\n throw new YAMLException('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.');\n }\n });\n\n this.compiledImplicit = compileList(this, 'implicit', []);\n this.compiledExplicit = compileList(this, 'explicit', []);\n this.compiledTypeMap = compileMap(this.compiledImplicit, this.compiledExplicit);\n}\n\n\nSchema.DEFAULT = null;\n\n\nSchema.create = function createSchema() {\n var schemas, types;\n\n switch (arguments.length) {\n case 1:\n schemas = Schema.DEFAULT;\n types = arguments[0];\n break;\n\n case 2:\n schemas = arguments[0];\n types = arguments[1];\n break;\n\n default:\n throw new YAMLException('Wrong number of arguments for Schema.create function');\n }\n\n schemas = common.toArray(schemas);\n types = common.toArray(types);\n\n if (!schemas.every(function (schema) { return schema instanceof Schema; })) {\n throw new YAMLException('Specified list of super schemas (or a single Schema object) contains a non-Schema object.');\n }\n\n if (!types.every(function (type) { return type instanceof Type; })) {\n throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.');\n }\n\n return new Schema({\n include: schemas,\n explicit: types\n });\n};\n\n\nmodule.exports = Schema;\n","'use strict';\n\nvar Type = require('../type');\n\nmodule.exports = new Type('tag:yaml.org,2002:str', {\n kind: 'scalar',\n construct: function (data) { return data !== null ? data : ''; }\n});\n","'use strict';\n\nvar Type = require('../type');\n\nmodule.exports = new Type('tag:yaml.org,2002:seq', {\n kind: 'sequence',\n construct: function (data) { return data !== null ? data : []; }\n});\n","'use strict';\n\nvar Type = require('../type');\n\nmodule.exports = new Type('tag:yaml.org,2002:map', {\n kind: 'mapping',\n construct: function (data) { return data !== null ? data : {}; }\n});\n","// Standard YAML's Failsafe schema.\n// http://www.yaml.org/spec/1.2/spec.html#id2802346\n\n\n'use strict';\n\n\nvar Schema = require('../schema');\n\n\nmodule.exports = new Schema({\n explicit: [\n require('../type/str'),\n require('../type/seq'),\n require('../type/map')\n ]\n});\n","'use strict';\n\nvar Type = require('../type');\n\nfunction resolveYamlNull(data) {\n if (data === null) return true;\n\n var max = data.length;\n\n return (max === 1 && data === '~') ||\n (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL'));\n}\n\nfunction constructYamlNull() {\n return null;\n}\n\nfunction isNull(object) {\n return object === null;\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:null', {\n kind: 'scalar',\n resolve: resolveYamlNull,\n construct: constructYamlNull,\n predicate: isNull,\n represent: {\n canonical: function () { return '~'; },\n lowercase: function () { return 'null'; },\n uppercase: function () { return 'NULL'; },\n camelcase: function () { return 'Null'; }\n },\n defaultStyle: 'lowercase'\n});\n","'use strict';\n\nvar Type = require('../type');\n\nfunction resolveYamlBoolean(data) {\n if (data === null) return false;\n\n var max = data.length;\n\n return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) ||\n (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE'));\n}\n\nfunction constructYamlBoolean(data) {\n return data === 'true' ||\n data === 'True' ||\n data === 'TRUE';\n}\n\nfunction isBoolean(object) {\n return Object.prototype.toString.call(object) === '[object Boolean]';\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:bool', {\n kind: 'scalar',\n resolve: resolveYamlBoolean,\n construct: constructYamlBoolean,\n predicate: isBoolean,\n represent: {\n lowercase: function (object) { return object ? 'true' : 'false'; },\n uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; },\n camelcase: function (object) { return object ? 'True' : 'False'; }\n },\n defaultStyle: 'lowercase'\n});\n","'use strict';\n\nvar common = require('../common');\nvar Type = require('../type');\n\nfunction isHexCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) ||\n ((0x41/* A */ <= c) && (c <= 0x46/* F */)) ||\n ((0x61/* a */ <= c) && (c <= 0x66/* f */));\n}\n\nfunction isOctCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */));\n}\n\nfunction isDecCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */));\n}\n\nfunction resolveYamlInteger(data) {\n if (data === null) return false;\n\n var max = data.length,\n index = 0,\n hasDigits = false,\n ch;\n\n if (!max) return false;\n\n ch = data[index];\n\n // sign\n if (ch === '-' || ch === '+') {\n ch = data[++index];\n }\n\n if (ch === '0') {\n // 0\n if (index + 1 === max) return true;\n ch = data[++index];\n\n // base 2, base 8, base 16\n\n if (ch === 'b') {\n // base 2\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (ch !== '0' && ch !== '1') return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n\n\n if (ch === 'x') {\n // base 16\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isHexCode(data.charCodeAt(index))) return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n\n // base 8\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isOctCode(data.charCodeAt(index))) return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n\n // base 10 (except 0) or base 60\n\n // value should not start with `_`;\n if (ch === '_') return false;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (ch === ':') break;\n if (!isDecCode(data.charCodeAt(index))) {\n return false;\n }\n hasDigits = true;\n }\n\n // Should have digits and should not end with `_`\n if (!hasDigits || ch === '_') return false;\n\n // if !base60 - done;\n if (ch !== ':') return true;\n\n // base60 almost not used, no needs to optimize\n return /^(:[0-5]?[0-9])+$/.test(data.slice(index));\n}\n\nfunction constructYamlInteger(data) {\n var value = data, sign = 1, ch, base, digits = [];\n\n if (value.indexOf('_') !== -1) {\n value = value.replace(/_/g, '');\n }\n\n ch = value[0];\n\n if (ch === '-' || ch === '+') {\n if (ch === '-') sign = -1;\n value = value.slice(1);\n ch = value[0];\n }\n\n if (value === '0') return 0;\n\n if (ch === '0') {\n if (value[1] === 'b') return sign * parseInt(value.slice(2), 2);\n if (value[1] === 'x') return sign * parseInt(value, 16);\n return sign * parseInt(value, 8);\n }\n\n if (value.indexOf(':') !== -1) {\n value.split(':').forEach(function (v) {\n digits.unshift(parseInt(v, 10));\n });\n\n value = 0;\n base = 1;\n\n digits.forEach(function (d) {\n value += (d * base);\n base *= 60;\n });\n\n return sign * value;\n\n }\n\n return sign * parseInt(value, 10);\n}\n\nfunction isInteger(object) {\n return (Object.prototype.toString.call(object)) === '[object Number]' &&\n (object % 1 === 0 && !common.isNegativeZero(object));\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:int', {\n kind: 'scalar',\n resolve: resolveYamlInteger,\n construct: constructYamlInteger,\n predicate: isInteger,\n represent: {\n binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); },\n octal: function (obj) { return obj >= 0 ? '0' + obj.toString(8) : '-0' + obj.toString(8).slice(1); },\n decimal: function (obj) { return obj.toString(10); },\n /* eslint-disable max-len */\n hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1); }\n },\n defaultStyle: 'decimal',\n styleAliases: {\n binary: [ 2, 'bin' ],\n octal: [ 8, 'oct' ],\n decimal: [ 10, 'dec' ],\n hexadecimal: [ 16, 'hex' ]\n }\n});\n","'use strict';\n\nvar common = require('../common');\nvar Type = require('../type');\n\nvar YAML_FLOAT_PATTERN = new RegExp(\n // 2.5e4, 2.5 and integers\n '^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' +\n // .2e4, .2\n // special case, seems not from spec\n '|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' +\n // 20:59\n '|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*' +\n // .inf\n '|[-+]?\\\\.(?:inf|Inf|INF)' +\n // .nan\n '|\\\\.(?:nan|NaN|NAN))$');\n\nfunction resolveYamlFloat(data) {\n if (data === null) return false;\n\n if (!YAML_FLOAT_PATTERN.test(data) ||\n // Quick hack to not allow integers end with `_`\n // Probably should update regexp & check speed\n data[data.length - 1] === '_') {\n return false;\n }\n\n return true;\n}\n\nfunction constructYamlFloat(data) {\n var value, sign, base, digits;\n\n value = data.replace(/_/g, '').toLowerCase();\n sign = value[0] === '-' ? -1 : 1;\n digits = [];\n\n if ('+-'.indexOf(value[0]) >= 0) {\n value = value.slice(1);\n }\n\n if (value === '.inf') {\n return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;\n\n } else if (value === '.nan') {\n return NaN;\n\n } else if (value.indexOf(':') >= 0) {\n value.split(':').forEach(function (v) {\n digits.unshift(parseFloat(v, 10));\n });\n\n value = 0.0;\n base = 1;\n\n digits.forEach(function (d) {\n value += d * base;\n base *= 60;\n });\n\n return sign * value;\n\n }\n return sign * parseFloat(value, 10);\n}\n\n\nvar SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;\n\nfunction representYamlFloat(object, style) {\n var res;\n\n if (isNaN(object)) {\n switch (style) {\n case 'lowercase': return '.nan';\n case 'uppercase': return '.NAN';\n case 'camelcase': return '.NaN';\n }\n } else if (Number.POSITIVE_INFINITY === object) {\n switch (style) {\n case 'lowercase': return '.inf';\n case 'uppercase': return '.INF';\n case 'camelcase': return '.Inf';\n }\n } else if (Number.NEGATIVE_INFINITY === object) {\n switch (style) {\n case 'lowercase': return '-.inf';\n case 'uppercase': return '-.INF';\n case 'camelcase': return '-.Inf';\n }\n } else if (common.isNegativeZero(object)) {\n return '-0.0';\n }\n\n res = object.toString(10);\n\n // JS stringifier can build scientific format without dots: 5e-100,\n // while YAML requres dot: 5.e-100. Fix it with simple hack\n\n return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res;\n}\n\nfunction isFloat(object) {\n return (Object.prototype.toString.call(object) === '[object Number]') &&\n (object % 1 !== 0 || common.isNegativeZero(object));\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:float', {\n kind: 'scalar',\n resolve: resolveYamlFloat,\n construct: constructYamlFloat,\n predicate: isFloat,\n represent: representYamlFloat,\n defaultStyle: 'lowercase'\n});\n","// Standard YAML's JSON schema.\n// http://www.yaml.org/spec/1.2/spec.html#id2803231\n//\n// NOTE: JS-YAML does not support schema-specific tag resolution restrictions.\n// So, this schema is not such strict as defined in the YAML specification.\n// It allows numbers in binary notaion, use `Null` and `NULL` as `null`, etc.\n\n\n'use strict';\n\n\nvar Schema = require('../schema');\n\n\nmodule.exports = new Schema({\n include: [\n require('./failsafe')\n ],\n implicit: [\n require('../type/null'),\n require('../type/bool'),\n require('../type/int'),\n require('../type/float')\n ]\n});\n","// Standard YAML's Core schema.\n// http://www.yaml.org/spec/1.2/spec.html#id2804923\n//\n// NOTE: JS-YAML does not support schema-specific tag resolution restrictions.\n// So, Core schema has no distinctions from JSON schema is JS-YAML.\n\n\n'use strict';\n\n\nvar Schema = require('../schema');\n\n\nmodule.exports = new Schema({\n include: [\n require('./json')\n ]\n});\n","'use strict';\n\nvar Type = require('../type');\n\nvar YAML_DATE_REGEXP = new RegExp(\n '^([0-9][0-9][0-9][0-9])' + // [1] year\n '-([0-9][0-9])' + // [2] month\n '-([0-9][0-9])$'); // [3] day\n\nvar YAML_TIMESTAMP_REGEXP = new RegExp(\n '^([0-9][0-9][0-9][0-9])' + // [1] year\n '-([0-9][0-9]?)' + // [2] month\n '-([0-9][0-9]?)' + // [3] day\n '(?:[Tt]|[ \\\\t]+)' + // ...\n '([0-9][0-9]?)' + // [4] hour\n ':([0-9][0-9])' + // [5] minute\n ':([0-9][0-9])' + // [6] second\n '(?:\\\\.([0-9]*))?' + // [7] fraction\n '(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour\n '(?::([0-9][0-9]))?))?$'); // [11] tz_minute\n\nfunction resolveYamlTimestamp(data) {\n if (data === null) return false;\n if (YAML_DATE_REGEXP.exec(data) !== null) return true;\n if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true;\n return false;\n}\n\nfunction constructYamlTimestamp(data) {\n var match, year, month, day, hour, minute, second, fraction = 0,\n delta = null, tz_hour, tz_minute, date;\n\n match = YAML_DATE_REGEXP.exec(data);\n if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data);\n\n if (match === null) throw new Error('Date resolve error');\n\n // match: [1] year [2] month [3] day\n\n year = +(match[1]);\n month = +(match[2]) - 1; // JS month starts with 0\n day = +(match[3]);\n\n if (!match[4]) { // no hour\n return new Date(Date.UTC(year, month, day));\n }\n\n // match: [4] hour [5] minute [6] second [7] fraction\n\n hour = +(match[4]);\n minute = +(match[5]);\n second = +(match[6]);\n\n if (match[7]) {\n fraction = match[7].slice(0, 3);\n while (fraction.length < 3) { // milli-seconds\n fraction += '0';\n }\n fraction = +fraction;\n }\n\n // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute\n\n if (match[9]) {\n tz_hour = +(match[10]);\n tz_minute = +(match[11] || 0);\n delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds\n if (match[9] === '-') delta = -delta;\n }\n\n date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));\n\n if (delta) date.setTime(date.getTime() - delta);\n\n return date;\n}\n\nfunction representYamlTimestamp(object /*, style*/) {\n return object.toISOString();\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:timestamp', {\n kind: 'scalar',\n resolve: resolveYamlTimestamp,\n construct: constructYamlTimestamp,\n instanceOf: Date,\n represent: representYamlTimestamp\n});\n","'use strict';\n\nvar Type = require('../type');\n\nfunction resolveYamlMerge(data) {\n return data === '<<' || data === null;\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:merge', {\n kind: 'scalar',\n resolve: resolveYamlMerge\n});\n","'use strict';\n\n/*eslint-disable no-bitwise*/\n\nvar NodeBuffer;\n\ntry {\n // A trick for browserified version, to not include `Buffer` shim\n var _require = require;\n NodeBuffer = _require('buffer').Buffer;\n} catch (__) {}\n\nvar Type = require('../type');\n\n\n// [ 64, 65, 66 ] -> [ padding, CR, LF ]\nvar BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\n\\r';\n\n\nfunction resolveYamlBinary(data) {\n if (data === null) return false;\n\n var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP;\n\n // Convert one by one.\n for (idx = 0; idx < max; idx++) {\n code = map.indexOf(data.charAt(idx));\n\n // Skip CR/LF\n if (code > 64) continue;\n\n // Fail on illegal characters\n if (code < 0) return false;\n\n bitlen += 6;\n }\n\n // If there are any bits left, source was corrupted\n return (bitlen % 8) === 0;\n}\n\nfunction constructYamlBinary(data) {\n var idx, tailbits,\n input = data.replace(/[\\r\\n=]/g, ''), // remove CR/LF & padding to simplify scan\n max = input.length,\n map = BASE64_MAP,\n bits = 0,\n result = [];\n\n // Collect by 6*4 bits (3 bytes)\n\n for (idx = 0; idx < max; idx++) {\n if ((idx % 4 === 0) && idx) {\n result.push((bits >> 16) & 0xFF);\n result.push((bits >> 8) & 0xFF);\n result.push(bits & 0xFF);\n }\n\n bits = (bits << 6) | map.indexOf(input.charAt(idx));\n }\n\n // Dump tail\n\n tailbits = (max % 4) * 6;\n\n if (tailbits === 0) {\n result.push((bits >> 16) & 0xFF);\n result.push((bits >> 8) & 0xFF);\n result.push(bits & 0xFF);\n } else if (tailbits === 18) {\n result.push((bits >> 10) & 0xFF);\n result.push((bits >> 2) & 0xFF);\n } else if (tailbits === 12) {\n result.push((bits >> 4) & 0xFF);\n }\n\n // Wrap into Buffer for NodeJS and leave Array for browser\n if (NodeBuffer) {\n // Support node 6.+ Buffer API when available\n return NodeBuffer.from ? NodeBuffer.from(result) : new NodeBuffer(result);\n }\n\n return result;\n}\n\nfunction representYamlBinary(object /*, style*/) {\n var result = '', bits = 0, idx, tail,\n max = object.length,\n map = BASE64_MAP;\n\n // Convert every three bytes to 4 ASCII characters.\n\n for (idx = 0; idx < max; idx++) {\n if ((idx % 3 === 0) && idx) {\n result += map[(bits >> 18) & 0x3F];\n result += map[(bits >> 12) & 0x3F];\n result += map[(bits >> 6) & 0x3F];\n result += map[bits & 0x3F];\n }\n\n bits = (bits << 8) + object[idx];\n }\n\n // Dump tail\n\n tail = max % 3;\n\n if (tail === 0) {\n result += map[(bits >> 18) & 0x3F];\n result += map[(bits >> 12) & 0x3F];\n result += map[(bits >> 6) & 0x3F];\n result += map[bits & 0x3F];\n } else if (tail === 2) {\n result += map[(bits >> 10) & 0x3F];\n result += map[(bits >> 4) & 0x3F];\n result += map[(bits << 2) & 0x3F];\n result += map[64];\n } else if (tail === 1) {\n result += map[(bits >> 2) & 0x3F];\n result += map[(bits << 4) & 0x3F];\n result += map[64];\n result += map[64];\n }\n\n return result;\n}\n\nfunction isBinary(object) {\n return NodeBuffer && NodeBuffer.isBuffer(object);\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:binary', {\n kind: 'scalar',\n resolve: resolveYamlBinary,\n construct: constructYamlBinary,\n predicate: isBinary,\n represent: representYamlBinary\n});\n","'use strict';\n\nvar Type = require('../type');\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\nvar _toString = Object.prototype.toString;\n\nfunction resolveYamlOmap(data) {\n if (data === null) return true;\n\n var objectKeys = [], index, length, pair, pairKey, pairHasKey,\n object = data;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n pairHasKey = false;\n\n if (_toString.call(pair) !== '[object Object]') return false;\n\n for (pairKey in pair) {\n if (_hasOwnProperty.call(pair, pairKey)) {\n if (!pairHasKey) pairHasKey = true;\n else return false;\n }\n }\n\n if (!pairHasKey) return false;\n\n if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey);\n else return false;\n }\n\n return true;\n}\n\nfunction constructYamlOmap(data) {\n return data !== null ? data : [];\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:omap', {\n kind: 'sequence',\n resolve: resolveYamlOmap,\n construct: constructYamlOmap\n});\n","'use strict';\n\nvar Type = require('../type');\n\nvar _toString = Object.prototype.toString;\n\nfunction resolveYamlPairs(data) {\n if (data === null) return true;\n\n var index, length, pair, keys, result,\n object = data;\n\n result = new Array(object.length);\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n\n if (_toString.call(pair) !== '[object Object]') return false;\n\n keys = Object.keys(pair);\n\n if (keys.length !== 1) return false;\n\n result[index] = [ keys[0], pair[keys[0]] ];\n }\n\n return true;\n}\n\nfunction constructYamlPairs(data) {\n if (data === null) return [];\n\n var index, length, pair, keys, result,\n object = data;\n\n result = new Array(object.length);\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n\n keys = Object.keys(pair);\n\n result[index] = [ keys[0], pair[keys[0]] ];\n }\n\n return result;\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:pairs', {\n kind: 'sequence',\n resolve: resolveYamlPairs,\n construct: constructYamlPairs\n});\n","'use strict';\n\nvar Type = require('../type');\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction resolveYamlSet(data) {\n if (data === null) return true;\n\n var key, object = data;\n\n for (key in object) {\n if (_hasOwnProperty.call(object, key)) {\n if (object[key] !== null) return false;\n }\n }\n\n return true;\n}\n\nfunction constructYamlSet(data) {\n return data !== null ? data : {};\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:set', {\n kind: 'mapping',\n resolve: resolveYamlSet,\n construct: constructYamlSet\n});\n","// JS-YAML's default schema for `safeLoad` function.\n// It is not described in the YAML specification.\n//\n// This schema is based on standard YAML's Core schema and includes most of\n// extra types described at YAML tag repository. (http://yaml.org/type/)\n\n\n'use strict';\n\n\nvar Schema = require('../schema');\n\n\nmodule.exports = new Schema({\n include: [\n require('./core')\n ],\n implicit: [\n require('../type/timestamp'),\n require('../type/merge')\n ],\n explicit: [\n require('../type/binary'),\n require('../type/omap'),\n require('../type/pairs'),\n require('../type/set')\n ]\n});\n","'use strict';\n\nvar Type = require('../../type');\n\nfunction resolveJavascriptUndefined() {\n return true;\n}\n\nfunction constructJavascriptUndefined() {\n /*eslint-disable no-undefined*/\n return undefined;\n}\n\nfunction representJavascriptUndefined() {\n return '';\n}\n\nfunction isUndefined(object) {\n return typeof object === 'undefined';\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:js/undefined', {\n kind: 'scalar',\n resolve: resolveJavascriptUndefined,\n construct: constructJavascriptUndefined,\n predicate: isUndefined,\n represent: representJavascriptUndefined\n});\n","'use strict';\n\nvar Type = require('../../type');\n\nfunction resolveJavascriptRegExp(data) {\n if (data === null) return false;\n if (data.length === 0) return false;\n\n var regexp = data,\n tail = /\\/([gim]*)$/.exec(data),\n modifiers = '';\n\n // if regexp starts with '/' it can have modifiers and must be properly closed\n // `/foo/gim` - modifiers tail can be maximum 3 chars\n if (regexp[0] === '/') {\n if (tail) modifiers = tail[1];\n\n if (modifiers.length > 3) return false;\n // if expression starts with /, is should be properly terminated\n if (regexp[regexp.length - modifiers.length - 1] !== '/') return false;\n }\n\n return true;\n}\n\nfunction constructJavascriptRegExp(data) {\n var regexp = data,\n tail = /\\/([gim]*)$/.exec(data),\n modifiers = '';\n\n // `/foo/gim` - tail can be maximum 4 chars\n if (regexp[0] === '/') {\n if (tail) modifiers = tail[1];\n regexp = regexp.slice(1, regexp.length - modifiers.length - 1);\n }\n\n return new RegExp(regexp, modifiers);\n}\n\nfunction representJavascriptRegExp(object /*, style*/) {\n var result = '/' + object.source + '/';\n\n if (object.global) result += 'g';\n if (object.multiline) result += 'm';\n if (object.ignoreCase) result += 'i';\n\n return result;\n}\n\nfunction isRegExp(object) {\n return Object.prototype.toString.call(object) === '[object RegExp]';\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:js/regexp', {\n kind: 'scalar',\n resolve: resolveJavascriptRegExp,\n construct: constructJavascriptRegExp,\n predicate: isRegExp,\n represent: representJavascriptRegExp\n});\n","'use strict';\n\nvar esprima;\n\n// Browserified version does not have esprima\n//\n// 1. For node.js just require module as deps\n// 2. For browser try to require mudule via external AMD system.\n// If not found - try to fallback to window.esprima. If not\n// found too - then fail to parse.\n//\ntry {\n // workaround to exclude package from browserify list.\n var _require = require;\n esprima = _require('esprima');\n} catch (_) {\n /* eslint-disable no-redeclare */\n /* global window */\n if (typeof window !== 'undefined') esprima = window.esprima;\n}\n\nvar Type = require('../../type');\n\nfunction resolveJavascriptFunction(data) {\n if (data === null) return false;\n\n try {\n var source = '(' + data + ')',\n ast = esprima.parse(source, { range: true });\n\n if (ast.type !== 'Program' ||\n ast.body.length !== 1 ||\n ast.body[0].type !== 'ExpressionStatement' ||\n (ast.body[0].expression.type !== 'ArrowFunctionExpression' &&\n ast.body[0].expression.type !== 'FunctionExpression')) {\n return false;\n }\n\n return true;\n } catch (err) {\n return false;\n }\n}\n\nfunction constructJavascriptFunction(data) {\n /*jslint evil:true*/\n\n var source = '(' + data + ')',\n ast = esprima.parse(source, { range: true }),\n params = [],\n body;\n\n if (ast.type !== 'Program' ||\n ast.body.length !== 1 ||\n ast.body[0].type !== 'ExpressionStatement' ||\n (ast.body[0].expression.type !== 'ArrowFunctionExpression' &&\n ast.body[0].expression.type !== 'FunctionExpression')) {\n throw new Error('Failed to resolve function');\n }\n\n ast.body[0].expression.params.forEach(function (param) {\n params.push(param.name);\n });\n\n body = ast.body[0].expression.body.range;\n\n // Esprima's ranges include the first '{' and the last '}' characters on\n // function expressions. So cut them out.\n if (ast.body[0].expression.body.type === 'BlockStatement') {\n /*eslint-disable no-new-func*/\n return new Function(params, source.slice(body[0] + 1, body[1] - 1));\n }\n // ES6 arrow functions can omit the BlockStatement. In that case, just return\n // the body.\n /*eslint-disable no-new-func*/\n return new Function(params, 'return ' + source.slice(body[0], body[1]));\n}\n\nfunction representJavascriptFunction(object /*, style*/) {\n return object.toString();\n}\n\nfunction isFunction(object) {\n return Object.prototype.toString.call(object) === '[object Function]';\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:js/function', {\n kind: 'scalar',\n resolve: resolveJavascriptFunction,\n construct: constructJavascriptFunction,\n predicate: isFunction,\n represent: representJavascriptFunction\n});\n","// JS-YAML's default schema for `load` function.\n// It is not described in the YAML specification.\n//\n// This schema is based on JS-YAML's default safe schema and includes\n// JavaScript-specific types: !!js/undefined, !!js/regexp and !!js/function.\n//\n// Also this schema is used as default base schema at `Schema.create` function.\n\n\n'use strict';\n\n\nvar Schema = require('../schema');\n\n\nmodule.exports = Schema.DEFAULT = new Schema({\n include: [\n require('./default_safe')\n ],\n explicit: [\n require('../type/js/undefined'),\n require('../type/js/regexp'),\n require('../type/js/function')\n ]\n});\n","'use strict';\n\n/*eslint-disable max-len,no-use-before-define*/\n\nvar common = require('./common');\nvar YAMLException = require('./exception');\nvar Mark = require('./mark');\nvar DEFAULT_SAFE_SCHEMA = require('./schema/default_safe');\nvar DEFAULT_FULL_SCHEMA = require('./schema/default_full');\n\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\n\nvar CONTEXT_FLOW_IN = 1;\nvar CONTEXT_FLOW_OUT = 2;\nvar CONTEXT_BLOCK_IN = 3;\nvar CONTEXT_BLOCK_OUT = 4;\n\n\nvar CHOMPING_CLIP = 1;\nvar CHOMPING_STRIP = 2;\nvar CHOMPING_KEEP = 3;\n\n\nvar PATTERN_NON_PRINTABLE = /[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\nvar PATTERN_NON_ASCII_LINE_BREAKS = /[\\x85\\u2028\\u2029]/;\nvar PATTERN_FLOW_INDICATORS = /[,\\[\\]\\{\\}]/;\nvar PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\\-]+!)$/i;\nvar PATTERN_TAG_URI = /^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;\n\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\n\nfunction is_EOL(c) {\n return (c === 0x0A/* LF */) || (c === 0x0D/* CR */);\n}\n\nfunction is_WHITE_SPACE(c) {\n return (c === 0x09/* Tab */) || (c === 0x20/* Space */);\n}\n\nfunction is_WS_OR_EOL(c) {\n return (c === 0x09/* Tab */) ||\n (c === 0x20/* Space */) ||\n (c === 0x0A/* LF */) ||\n (c === 0x0D/* CR */);\n}\n\nfunction is_FLOW_INDICATOR(c) {\n return c === 0x2C/* , */ ||\n c === 0x5B/* [ */ ||\n c === 0x5D/* ] */ ||\n c === 0x7B/* { */ ||\n c === 0x7D/* } */;\n}\n\nfunction fromHexCode(c) {\n var lc;\n\n if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {\n return c - 0x30;\n }\n\n /*eslint-disable no-bitwise*/\n lc = c | 0x20;\n\n if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) {\n return lc - 0x61 + 10;\n }\n\n return -1;\n}\n\nfunction escapedHexLen(c) {\n if (c === 0x78/* x */) { return 2; }\n if (c === 0x75/* u */) { return 4; }\n if (c === 0x55/* U */) { return 8; }\n return 0;\n}\n\nfunction fromDecimalCode(c) {\n if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {\n return c - 0x30;\n }\n\n return -1;\n}\n\nfunction simpleEscapeSequence(c) {\n /* eslint-disable indent */\n return (c === 0x30/* 0 */) ? '\\x00' :\n (c === 0x61/* a */) ? '\\x07' :\n (c === 0x62/* b */) ? '\\x08' :\n (c === 0x74/* t */) ? '\\x09' :\n (c === 0x09/* Tab */) ? '\\x09' :\n (c === 0x6E/* n */) ? '\\x0A' :\n (c === 0x76/* v */) ? '\\x0B' :\n (c === 0x66/* f */) ? '\\x0C' :\n (c === 0x72/* r */) ? '\\x0D' :\n (c === 0x65/* e */) ? '\\x1B' :\n (c === 0x20/* Space */) ? ' ' :\n (c === 0x22/* \" */) ? '\\x22' :\n (c === 0x2F/* / */) ? '/' :\n (c === 0x5C/* \\ */) ? '\\x5C' :\n (c === 0x4E/* N */) ? '\\x85' :\n (c === 0x5F/* _ */) ? '\\xA0' :\n (c === 0x4C/* L */) ? '\\u2028' :\n (c === 0x50/* P */) ? '\\u2029' : '';\n}\n\nfunction charFromCodepoint(c) {\n if (c <= 0xFFFF) {\n return String.fromCharCode(c);\n }\n // Encode UTF-16 surrogate pair\n // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF\n return String.fromCharCode(\n ((c - 0x010000) >> 10) + 0xD800,\n ((c - 0x010000) & 0x03FF) + 0xDC00\n );\n}\n\n// set a property of a literal object, while protecting against prototype pollution,\n// see https://github.com/nodeca/js-yaml/issues/164 for more details\nfunction setProperty(object, key, value) {\n // used for this specific key only because Object.defineProperty is slow\n if (key === '__proto__') {\n Object.defineProperty(object, key, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: value\n });\n } else {\n object[key] = value;\n }\n}\n\nvar simpleEscapeCheck = new Array(256); // integer, for fast access\nvar simpleEscapeMap = new Array(256);\nfor (var i = 0; i < 256; i++) {\n simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0;\n simpleEscapeMap[i] = simpleEscapeSequence(i);\n}\n\n\nfunction State(input, options) {\n this.input = input;\n\n this.filename = options['filename'] || null;\n this.schema = options['schema'] || DEFAULT_FULL_SCHEMA;\n this.onWarning = options['onWarning'] || null;\n this.legacy = options['legacy'] || false;\n this.json = options['json'] || false;\n this.listener = options['listener'] || null;\n\n this.implicitTypes = this.schema.compiledImplicit;\n this.typeMap = this.schema.compiledTypeMap;\n\n this.length = input.length;\n this.position = 0;\n this.line = 0;\n this.lineStart = 0;\n this.lineIndent = 0;\n\n this.documents = [];\n\n /*\n this.version;\n this.checkLineBreaks;\n this.tagMap;\n this.anchorMap;\n this.tag;\n this.anchor;\n this.kind;\n this.result;*/\n\n}\n\n\nfunction generateError(state, message) {\n return new YAMLException(\n message,\n new Mark(state.filename, state.input, state.position, state.line, (state.position - state.lineStart)));\n}\n\nfunction throwError(state, message) {\n throw generateError(state, message);\n}\n\nfunction throwWarning(state, message) {\n if (state.onWarning) {\n state.onWarning.call(null, generateError(state, message));\n }\n}\n\n\nvar directiveHandlers = {\n\n YAML: function handleYamlDirective(state, name, args) {\n\n var match, major, minor;\n\n if (state.version !== null) {\n throwError(state, 'duplication of %YAML directive');\n }\n\n if (args.length !== 1) {\n throwError(state, 'YAML directive accepts exactly one argument');\n }\n\n match = /^([0-9]+)\\.([0-9]+)$/.exec(args[0]);\n\n if (match === null) {\n throwError(state, 'ill-formed argument of the YAML directive');\n }\n\n major = parseInt(match[1], 10);\n minor = parseInt(match[2], 10);\n\n if (major !== 1) {\n throwError(state, 'unacceptable YAML version of the document');\n }\n\n state.version = args[0];\n state.checkLineBreaks = (minor < 2);\n\n if (minor !== 1 && minor !== 2) {\n throwWarning(state, 'unsupported YAML version of the document');\n }\n },\n\n TAG: function handleTagDirective(state, name, args) {\n\n var handle, prefix;\n\n if (args.length !== 2) {\n throwError(state, 'TAG directive accepts exactly two arguments');\n }\n\n handle = args[0];\n prefix = args[1];\n\n if (!PATTERN_TAG_HANDLE.test(handle)) {\n throwError(state, 'ill-formed tag handle (first argument) of the TAG directive');\n }\n\n if (_hasOwnProperty.call(state.tagMap, handle)) {\n throwError(state, 'there is a previously declared suffix for \"' + handle + '\" tag handle');\n }\n\n if (!PATTERN_TAG_URI.test(prefix)) {\n throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive');\n }\n\n state.tagMap[handle] = prefix;\n }\n};\n\n\nfunction captureSegment(state, start, end, checkJson) {\n var _position, _length, _character, _result;\n\n if (start < end) {\n _result = state.input.slice(start, end);\n\n if (checkJson) {\n for (_position = 0, _length = _result.length; _position < _length; _position += 1) {\n _character = _result.charCodeAt(_position);\n if (!(_character === 0x09 ||\n (0x20 <= _character && _character <= 0x10FFFF))) {\n throwError(state, 'expected valid JSON character');\n }\n }\n } else if (PATTERN_NON_PRINTABLE.test(_result)) {\n throwError(state, 'the stream contains non-printable characters');\n }\n\n state.result += _result;\n }\n}\n\nfunction mergeMappings(state, destination, source, overridableKeys) {\n var sourceKeys, key, index, quantity;\n\n if (!common.isObject(source)) {\n throwError(state, 'cannot merge mappings; the provided source object is unacceptable');\n }\n\n sourceKeys = Object.keys(source);\n\n for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {\n key = sourceKeys[index];\n\n if (!_hasOwnProperty.call(destination, key)) {\n setProperty(destination, key, source[key]);\n overridableKeys[key] = true;\n }\n }\n}\n\nfunction storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startPos) {\n var index, quantity;\n\n // The output is a plain object here, so keys can only be strings.\n // We need to convert keyNode to a string, but doing so can hang the process\n // (deeply nested arrays that explode exponentially using aliases).\n if (Array.isArray(keyNode)) {\n keyNode = Array.prototype.slice.call(keyNode);\n\n for (index = 0, quantity = keyNode.length; index < quantity; index += 1) {\n if (Array.isArray(keyNode[index])) {\n throwError(state, 'nested arrays are not supported inside keys');\n }\n\n if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') {\n keyNode[index] = '[object Object]';\n }\n }\n }\n\n // Avoid code execution in load() via toString property\n // (still use its own toString for arrays, timestamps,\n // and whatever user schema extensions happen to have @@toStringTag)\n if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') {\n keyNode = '[object Object]';\n }\n\n\n keyNode = String(keyNode);\n\n if (_result === null) {\n _result = {};\n }\n\n if (keyTag === 'tag:yaml.org,2002:merge') {\n if (Array.isArray(valueNode)) {\n for (index = 0, quantity = valueNode.length; index < quantity; index += 1) {\n mergeMappings(state, _result, valueNode[index], overridableKeys);\n }\n } else {\n mergeMappings(state, _result, valueNode, overridableKeys);\n }\n } else {\n if (!state.json &&\n !_hasOwnProperty.call(overridableKeys, keyNode) &&\n _hasOwnProperty.call(_result, keyNode)) {\n state.line = startLine || state.line;\n state.position = startPos || state.position;\n throwError(state, 'duplicated mapping key');\n }\n setProperty(_result, keyNode, valueNode);\n delete overridableKeys[keyNode];\n }\n\n return _result;\n}\n\nfunction readLineBreak(state) {\n var ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x0A/* LF */) {\n state.position++;\n } else if (ch === 0x0D/* CR */) {\n state.position++;\n if (state.input.charCodeAt(state.position) === 0x0A/* LF */) {\n state.position++;\n }\n } else {\n throwError(state, 'a line break is expected');\n }\n\n state.line += 1;\n state.lineStart = state.position;\n}\n\nfunction skipSeparationSpace(state, allowComments, checkIndent) {\n var lineBreaks = 0,\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (allowComments && ch === 0x23/* # */) {\n do {\n ch = state.input.charCodeAt(++state.position);\n } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0);\n }\n\n if (is_EOL(ch)) {\n readLineBreak(state);\n\n ch = state.input.charCodeAt(state.position);\n lineBreaks++;\n state.lineIndent = 0;\n\n while (ch === 0x20/* Space */) {\n state.lineIndent++;\n ch = state.input.charCodeAt(++state.position);\n }\n } else {\n break;\n }\n }\n\n if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) {\n throwWarning(state, 'deficient indentation');\n }\n\n return lineBreaks;\n}\n\nfunction testDocumentSeparator(state) {\n var _position = state.position,\n ch;\n\n ch = state.input.charCodeAt(_position);\n\n // Condition state.position === state.lineStart is tested\n // in parent on each call, for efficiency. No needs to test here again.\n if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) &&\n ch === state.input.charCodeAt(_position + 1) &&\n ch === state.input.charCodeAt(_position + 2)) {\n\n _position += 3;\n\n ch = state.input.charCodeAt(_position);\n\n if (ch === 0 || is_WS_OR_EOL(ch)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction writeFoldedLines(state, count) {\n if (count === 1) {\n state.result += ' ';\n } else if (count > 1) {\n state.result += common.repeat('\\n', count - 1);\n }\n}\n\n\nfunction readPlainScalar(state, nodeIndent, withinFlowCollection) {\n var preceding,\n following,\n captureStart,\n captureEnd,\n hasPendingContent,\n _line,\n _lineStart,\n _lineIndent,\n _kind = state.kind,\n _result = state.result,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (is_WS_OR_EOL(ch) ||\n is_FLOW_INDICATOR(ch) ||\n ch === 0x23/* # */ ||\n ch === 0x26/* & */ ||\n ch === 0x2A/* * */ ||\n ch === 0x21/* ! */ ||\n ch === 0x7C/* | */ ||\n ch === 0x3E/* > */ ||\n ch === 0x27/* ' */ ||\n ch === 0x22/* \" */ ||\n ch === 0x25/* % */ ||\n ch === 0x40/* @ */ ||\n ch === 0x60/* ` */) {\n return false;\n }\n\n if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following) ||\n withinFlowCollection && is_FLOW_INDICATOR(following)) {\n return false;\n }\n }\n\n state.kind = 'scalar';\n state.result = '';\n captureStart = captureEnd = state.position;\n hasPendingContent = false;\n\n while (ch !== 0) {\n if (ch === 0x3A/* : */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following) ||\n withinFlowCollection && is_FLOW_INDICATOR(following)) {\n break;\n }\n\n } else if (ch === 0x23/* # */) {\n preceding = state.input.charCodeAt(state.position - 1);\n\n if (is_WS_OR_EOL(preceding)) {\n break;\n }\n\n } else if ((state.position === state.lineStart && testDocumentSeparator(state)) ||\n withinFlowCollection && is_FLOW_INDICATOR(ch)) {\n break;\n\n } else if (is_EOL(ch)) {\n _line = state.line;\n _lineStart = state.lineStart;\n _lineIndent = state.lineIndent;\n skipSeparationSpace(state, false, -1);\n\n if (state.lineIndent >= nodeIndent) {\n hasPendingContent = true;\n ch = state.input.charCodeAt(state.position);\n continue;\n } else {\n state.position = captureEnd;\n state.line = _line;\n state.lineStart = _lineStart;\n state.lineIndent = _lineIndent;\n break;\n }\n }\n\n if (hasPendingContent) {\n captureSegment(state, captureStart, captureEnd, false);\n writeFoldedLines(state, state.line - _line);\n captureStart = captureEnd = state.position;\n hasPendingContent = false;\n }\n\n if (!is_WHITE_SPACE(ch)) {\n captureEnd = state.position + 1;\n }\n\n ch = state.input.charCodeAt(++state.position);\n }\n\n captureSegment(state, captureStart, captureEnd, false);\n\n if (state.result) {\n return true;\n }\n\n state.kind = _kind;\n state.result = _result;\n return false;\n}\n\nfunction readSingleQuotedScalar(state, nodeIndent) {\n var ch,\n captureStart, captureEnd;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x27/* ' */) {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n state.position++;\n captureStart = captureEnd = state.position;\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n if (ch === 0x27/* ' */) {\n captureSegment(state, captureStart, state.position, true);\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x27/* ' */) {\n captureStart = state.position;\n state.position++;\n captureEnd = state.position;\n } else {\n return true;\n }\n\n } else if (is_EOL(ch)) {\n captureSegment(state, captureStart, captureEnd, true);\n writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n captureStart = captureEnd = state.position;\n\n } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n throwError(state, 'unexpected end of the document within a single quoted scalar');\n\n } else {\n state.position++;\n captureEnd = state.position;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a single quoted scalar');\n}\n\nfunction readDoubleQuotedScalar(state, nodeIndent) {\n var captureStart,\n captureEnd,\n hexLength,\n hexResult,\n tmp,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x22/* \" */) {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n state.position++;\n captureStart = captureEnd = state.position;\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n if (ch === 0x22/* \" */) {\n captureSegment(state, captureStart, state.position, true);\n state.position++;\n return true;\n\n } else if (ch === 0x5C/* \\ */) {\n captureSegment(state, captureStart, state.position, true);\n ch = state.input.charCodeAt(++state.position);\n\n if (is_EOL(ch)) {\n skipSeparationSpace(state, false, nodeIndent);\n\n // TODO: rework to inline fn with no type cast?\n } else if (ch < 256 && simpleEscapeCheck[ch]) {\n state.result += simpleEscapeMap[ch];\n state.position++;\n\n } else if ((tmp = escapedHexLen(ch)) > 0) {\n hexLength = tmp;\n hexResult = 0;\n\n for (; hexLength > 0; hexLength--) {\n ch = state.input.charCodeAt(++state.position);\n\n if ((tmp = fromHexCode(ch)) >= 0) {\n hexResult = (hexResult << 4) + tmp;\n\n } else {\n throwError(state, 'expected hexadecimal character');\n }\n }\n\n state.result += charFromCodepoint(hexResult);\n\n state.position++;\n\n } else {\n throwError(state, 'unknown escape sequence');\n }\n\n captureStart = captureEnd = state.position;\n\n } else if (is_EOL(ch)) {\n captureSegment(state, captureStart, captureEnd, true);\n writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n captureStart = captureEnd = state.position;\n\n } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n throwError(state, 'unexpected end of the document within a double quoted scalar');\n\n } else {\n state.position++;\n captureEnd = state.position;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a double quoted scalar');\n}\n\nfunction readFlowCollection(state, nodeIndent) {\n var readNext = true,\n _line,\n _tag = state.tag,\n _result,\n _anchor = state.anchor,\n following,\n terminator,\n isPair,\n isExplicitPair,\n isMapping,\n overridableKeys = {},\n keyNode,\n keyTag,\n valueNode,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x5B/* [ */) {\n terminator = 0x5D;/* ] */\n isMapping = false;\n _result = [];\n } else if (ch === 0x7B/* { */) {\n terminator = 0x7D;/* } */\n isMapping = true;\n _result = {};\n } else {\n return false;\n }\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(++state.position);\n\n while (ch !== 0) {\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === terminator) {\n state.position++;\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = isMapping ? 'mapping' : 'sequence';\n state.result = _result;\n return true;\n } else if (!readNext) {\n throwError(state, 'missed comma between flow collection entries');\n }\n\n keyTag = keyNode = valueNode = null;\n isPair = isExplicitPair = false;\n\n if (ch === 0x3F/* ? */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following)) {\n isPair = isExplicitPair = true;\n state.position++;\n skipSeparationSpace(state, true, nodeIndent);\n }\n }\n\n _line = state.line;\n composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n keyTag = state.tag;\n keyNode = state.result;\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) {\n isPair = true;\n ch = state.input.charCodeAt(++state.position);\n skipSeparationSpace(state, true, nodeIndent);\n composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n valueNode = state.result;\n }\n\n if (isMapping) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode);\n } else if (isPair) {\n _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode));\n } else {\n _result.push(keyNode);\n }\n\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x2C/* , */) {\n readNext = true;\n ch = state.input.charCodeAt(++state.position);\n } else {\n readNext = false;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a flow collection');\n}\n\nfunction readBlockScalar(state, nodeIndent) {\n var captureStart,\n folding,\n chomping = CHOMPING_CLIP,\n didReadContent = false,\n detectedIndent = false,\n textIndent = nodeIndent,\n emptyLines = 0,\n atMoreIndented = false,\n tmp,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x7C/* | */) {\n folding = false;\n } else if (ch === 0x3E/* > */) {\n folding = true;\n } else {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n\n while (ch !== 0) {\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x2B/* + */ || ch === 0x2D/* - */) {\n if (CHOMPING_CLIP === chomping) {\n chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP;\n } else {\n throwError(state, 'repeat of a chomping mode identifier');\n }\n\n } else if ((tmp = fromDecimalCode(ch)) >= 0) {\n if (tmp === 0) {\n throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one');\n } else if (!detectedIndent) {\n textIndent = nodeIndent + tmp - 1;\n detectedIndent = true;\n } else {\n throwError(state, 'repeat of an indentation width identifier');\n }\n\n } else {\n break;\n }\n }\n\n if (is_WHITE_SPACE(ch)) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (is_WHITE_SPACE(ch));\n\n if (ch === 0x23/* # */) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (!is_EOL(ch) && (ch !== 0));\n }\n }\n\n while (ch !== 0) {\n readLineBreak(state);\n state.lineIndent = 0;\n\n ch = state.input.charCodeAt(state.position);\n\n while ((!detectedIndent || state.lineIndent < textIndent) &&\n (ch === 0x20/* Space */)) {\n state.lineIndent++;\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (!detectedIndent && state.lineIndent > textIndent) {\n textIndent = state.lineIndent;\n }\n\n if (is_EOL(ch)) {\n emptyLines++;\n continue;\n }\n\n // End of the scalar.\n if (state.lineIndent < textIndent) {\n\n // Perform the chomping.\n if (chomping === CHOMPING_KEEP) {\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n } else if (chomping === CHOMPING_CLIP) {\n if (didReadContent) { // i.e. only if the scalar is not empty.\n state.result += '\\n';\n }\n }\n\n // Break this `while` cycle and go to the funciton's epilogue.\n break;\n }\n\n // Folded style: use fancy rules to handle line breaks.\n if (folding) {\n\n // Lines starting with white space characters (more-indented lines) are not folded.\n if (is_WHITE_SPACE(ch)) {\n atMoreIndented = true;\n // except for the first content line (cf. Example 8.1)\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n\n // End of more-indented block.\n } else if (atMoreIndented) {\n atMoreIndented = false;\n state.result += common.repeat('\\n', emptyLines + 1);\n\n // Just one line break - perceive as the same line.\n } else if (emptyLines === 0) {\n if (didReadContent) { // i.e. only if we have already read some scalar content.\n state.result += ' ';\n }\n\n // Several line breaks - perceive as different lines.\n } else {\n state.result += common.repeat('\\n', emptyLines);\n }\n\n // Literal style: just add exact number of line breaks between content lines.\n } else {\n // Keep all line breaks except the header line break.\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n }\n\n didReadContent = true;\n detectedIndent = true;\n emptyLines = 0;\n captureStart = state.position;\n\n while (!is_EOL(ch) && (ch !== 0)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n captureSegment(state, captureStart, state.position, false);\n }\n\n return true;\n}\n\nfunction readBlockSequence(state, nodeIndent) {\n var _line,\n _tag = state.tag,\n _anchor = state.anchor,\n _result = [],\n following,\n detected = false,\n ch;\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n\n if (ch !== 0x2D/* - */) {\n break;\n }\n\n following = state.input.charCodeAt(state.position + 1);\n\n if (!is_WS_OR_EOL(following)) {\n break;\n }\n\n detected = true;\n state.position++;\n\n if (skipSeparationSpace(state, true, -1)) {\n if (state.lineIndent <= nodeIndent) {\n _result.push(null);\n ch = state.input.charCodeAt(state.position);\n continue;\n }\n }\n\n _line = state.line;\n composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true);\n _result.push(state.result);\n skipSeparationSpace(state, true, -1);\n\n ch = state.input.charCodeAt(state.position);\n\n if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) {\n throwError(state, 'bad indentation of a sequence entry');\n } else if (state.lineIndent < nodeIndent) {\n break;\n }\n }\n\n if (detected) {\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = 'sequence';\n state.result = _result;\n return true;\n }\n return false;\n}\n\nfunction readBlockMapping(state, nodeIndent, flowIndent) {\n var following,\n allowCompact,\n _line,\n _pos,\n _tag = state.tag,\n _anchor = state.anchor,\n _result = {},\n overridableKeys = {},\n keyTag = null,\n keyNode = null,\n valueNode = null,\n atExplicitKey = false,\n detected = false,\n ch;\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n following = state.input.charCodeAt(state.position + 1);\n _line = state.line; // Save the current line.\n _pos = state.position;\n\n //\n // Explicit notation case. There are two separate blocks:\n // first for the key (denoted by \"?\") and second for the value (denoted by \":\")\n //\n if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) {\n\n if (ch === 0x3F/* ? */) {\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null);\n keyTag = keyNode = valueNode = null;\n }\n\n detected = true;\n atExplicitKey = true;\n allowCompact = true;\n\n } else if (atExplicitKey) {\n // i.e. 0x3A/* : */ === character after the explicit key.\n atExplicitKey = false;\n allowCompact = true;\n\n } else {\n throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line');\n }\n\n state.position += 1;\n ch = following;\n\n //\n // Implicit notation case. Flow-style node as the key first, then \":\", and the value.\n //\n } else if (composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) {\n\n if (state.line === _line) {\n ch = state.input.charCodeAt(state.position);\n\n while (is_WHITE_SPACE(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (ch === 0x3A/* : */) {\n ch = state.input.charCodeAt(++state.position);\n\n if (!is_WS_OR_EOL(ch)) {\n throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping');\n }\n\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null);\n keyTag = keyNode = valueNode = null;\n }\n\n detected = true;\n atExplicitKey = false;\n allowCompact = false;\n keyTag = state.tag;\n keyNode = state.result;\n\n } else if (detected) {\n throwError(state, 'can not read an implicit mapping pair; a colon is missed');\n\n } else {\n state.tag = _tag;\n state.anchor = _anchor;\n return true; // Keep the result of `composeNode`.\n }\n\n } else if (detected) {\n throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key');\n\n } else {\n state.tag = _tag;\n state.anchor = _anchor;\n return true; // Keep the result of `composeNode`.\n }\n\n } else {\n break; // Reading is done. Go to the epilogue.\n }\n\n //\n // Common reading code for both explicit and implicit notations.\n //\n if (state.line === _line || state.lineIndent > nodeIndent) {\n if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {\n if (atExplicitKey) {\n keyNode = state.result;\n } else {\n valueNode = state.result;\n }\n }\n\n if (!atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _pos);\n keyTag = keyNode = valueNode = null;\n }\n\n skipSeparationSpace(state, true, -1);\n ch = state.input.charCodeAt(state.position);\n }\n\n if (state.lineIndent > nodeIndent && (ch !== 0)) {\n throwError(state, 'bad indentation of a mapping entry');\n } else if (state.lineIndent < nodeIndent) {\n break;\n }\n }\n\n //\n // Epilogue.\n //\n\n // Special case: last mapping's node contains only the key in explicit notation.\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null);\n }\n\n // Expose the resulting mapping.\n if (detected) {\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = 'mapping';\n state.result = _result;\n }\n\n return detected;\n}\n\nfunction readTagProperty(state) {\n var _position,\n isVerbatim = false,\n isNamed = false,\n tagHandle,\n tagName,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x21/* ! */) return false;\n\n if (state.tag !== null) {\n throwError(state, 'duplication of a tag property');\n }\n\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x3C/* < */) {\n isVerbatim = true;\n ch = state.input.charCodeAt(++state.position);\n\n } else if (ch === 0x21/* ! */) {\n isNamed = true;\n tagHandle = '!!';\n ch = state.input.charCodeAt(++state.position);\n\n } else {\n tagHandle = '!';\n }\n\n _position = state.position;\n\n if (isVerbatim) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (ch !== 0 && ch !== 0x3E/* > */);\n\n if (state.position < state.length) {\n tagName = state.input.slice(_position, state.position);\n ch = state.input.charCodeAt(++state.position);\n } else {\n throwError(state, 'unexpected end of the stream within a verbatim tag');\n }\n } else {\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n\n if (ch === 0x21/* ! */) {\n if (!isNamed) {\n tagHandle = state.input.slice(_position - 1, state.position + 1);\n\n if (!PATTERN_TAG_HANDLE.test(tagHandle)) {\n throwError(state, 'named tag handle cannot contain such characters');\n }\n\n isNamed = true;\n _position = state.position + 1;\n } else {\n throwError(state, 'tag suffix cannot contain exclamation marks');\n }\n }\n\n ch = state.input.charCodeAt(++state.position);\n }\n\n tagName = state.input.slice(_position, state.position);\n\n if (PATTERN_FLOW_INDICATORS.test(tagName)) {\n throwError(state, 'tag suffix cannot contain flow indicator characters');\n }\n }\n\n if (tagName && !PATTERN_TAG_URI.test(tagName)) {\n throwError(state, 'tag name cannot contain such characters: ' + tagName);\n }\n\n if (isVerbatim) {\n state.tag = tagName;\n\n } else if (_hasOwnProperty.call(state.tagMap, tagHandle)) {\n state.tag = state.tagMap[tagHandle] + tagName;\n\n } else if (tagHandle === '!') {\n state.tag = '!' + tagName;\n\n } else if (tagHandle === '!!') {\n state.tag = 'tag:yaml.org,2002:' + tagName;\n\n } else {\n throwError(state, 'undeclared tag handle \"' + tagHandle + '\"');\n }\n\n return true;\n}\n\nfunction readAnchorProperty(state) {\n var _position,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x26/* & */) return false;\n\n if (state.anchor !== null) {\n throwError(state, 'duplication of an anchor property');\n }\n\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (state.position === _position) {\n throwError(state, 'name of an anchor node must contain at least one character');\n }\n\n state.anchor = state.input.slice(_position, state.position);\n return true;\n}\n\nfunction readAlias(state) {\n var _position, alias,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x2A/* * */) return false;\n\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (state.position === _position) {\n throwError(state, 'name of an alias node must contain at least one character');\n }\n\n alias = state.input.slice(_position, state.position);\n\n if (!_hasOwnProperty.call(state.anchorMap, alias)) {\n throwError(state, 'unidentified alias \"' + alias + '\"');\n }\n\n state.result = state.anchorMap[alias];\n skipSeparationSpace(state, true, -1);\n return true;\n}\n\nfunction composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) {\n var allowBlockStyles,\n allowBlockScalars,\n allowBlockCollections,\n indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this<parent\n atNewLine = false,\n hasContent = false,\n typeIndex,\n typeQuantity,\n type,\n flowIndent,\n blockIndent;\n\n if (state.listener !== null) {\n state.listener('open', state);\n }\n\n state.tag = null;\n state.anchor = null;\n state.kind = null;\n state.result = null;\n\n allowBlockStyles = allowBlockScalars = allowBlockCollections =\n CONTEXT_BLOCK_OUT === nodeContext ||\n CONTEXT_BLOCK_IN === nodeContext;\n\n if (allowToSeek) {\n if (skipSeparationSpace(state, true, -1)) {\n atNewLine = true;\n\n if (state.lineIndent > parentIndent) {\n indentStatus = 1;\n } else if (state.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n }\n }\n\n if (indentStatus === 1) {\n while (readTagProperty(state) || readAnchorProperty(state)) {\n if (skipSeparationSpace(state, true, -1)) {\n atNewLine = true;\n allowBlockCollections = allowBlockStyles;\n\n if (state.lineIndent > parentIndent) {\n indentStatus = 1;\n } else if (state.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n } else {\n allowBlockCollections = false;\n }\n }\n }\n\n if (allowBlockCollections) {\n allowBlockCollections = atNewLine || allowCompact;\n }\n\n if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {\n if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) {\n flowIndent = parentIndent;\n } else {\n flowIndent = parentIndent + 1;\n }\n\n blockIndent = state.position - state.lineStart;\n\n if (indentStatus === 1) {\n if (allowBlockCollections &&\n (readBlockSequence(state, blockIndent) ||\n readBlockMapping(state, blockIndent, flowIndent)) ||\n readFlowCollection(state, flowIndent)) {\n hasContent = true;\n } else {\n if ((allowBlockScalars && readBlockScalar(state, flowIndent)) ||\n readSingleQuotedScalar(state, flowIndent) ||\n readDoubleQuotedScalar(state, flowIndent)) {\n hasContent = true;\n\n } else if (readAlias(state)) {\n hasContent = true;\n\n if (state.tag !== null || state.anchor !== null) {\n throwError(state, 'alias node should not have any properties');\n }\n\n } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {\n hasContent = true;\n\n if (state.tag === null) {\n state.tag = '?';\n }\n }\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n }\n } else if (indentStatus === 0) {\n // Special case: block sequences are allowed to have same indentation level as the parent.\n // http://www.yaml.org/spec/1.2/spec.html#id2799784\n hasContent = allowBlockCollections && readBlockSequence(state, blockIndent);\n }\n }\n\n if (state.tag !== null && state.tag !== '!') {\n if (state.tag === '?') {\n // Implicit resolving is not allowed for non-scalar types, and '?'\n // non-specific tag is only automatically assigned to plain scalars.\n //\n // We only need to check kind conformity in case user explicitly assigns '?'\n // tag, for example like this: \"!<?> [0]\"\n //\n if (state.result !== null && state.kind !== 'scalar') {\n throwError(state, 'unacceptable node kind for !<?> tag; it should be \"scalar\", not \"' + state.kind + '\"');\n }\n\n for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) {\n type = state.implicitTypes[typeIndex];\n\n if (type.resolve(state.result)) { // `state.result` updated in resolver if matched\n state.result = type.construct(state.result);\n state.tag = type.tag;\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n break;\n }\n }\n } else if (_hasOwnProperty.call(state.typeMap[state.kind || 'fallback'], state.tag)) {\n type = state.typeMap[state.kind || 'fallback'][state.tag];\n\n if (state.result !== null && type.kind !== state.kind) {\n throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be \"' + type.kind + '\", not \"' + state.kind + '\"');\n }\n\n if (!type.resolve(state.result)) { // `state.result` updated in resolver if matched\n throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag');\n } else {\n state.result = type.construct(state.result);\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n }\n } else {\n throwError(state, 'unknown tag !<' + state.tag + '>');\n }\n }\n\n if (state.listener !== null) {\n state.listener('close', state);\n }\n return state.tag !== null || state.anchor !== null || hasContent;\n}\n\nfunction readDocument(state) {\n var documentStart = state.position,\n _position,\n directiveName,\n directiveArgs,\n hasDirectives = false,\n ch;\n\n state.version = null;\n state.checkLineBreaks = state.legacy;\n state.tagMap = {};\n state.anchorMap = {};\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n skipSeparationSpace(state, true, -1);\n\n ch = state.input.charCodeAt(state.position);\n\n if (state.lineIndent > 0 || ch !== 0x25/* % */) {\n break;\n }\n\n hasDirectives = true;\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n directiveName = state.input.slice(_position, state.position);\n directiveArgs = [];\n\n if (directiveName.length < 1) {\n throwError(state, 'directive name must not be less than one character in length');\n }\n\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (ch === 0x23/* # */) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (ch !== 0 && !is_EOL(ch));\n break;\n }\n\n if (is_EOL(ch)) break;\n\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n directiveArgs.push(state.input.slice(_position, state.position));\n }\n\n if (ch !== 0) readLineBreak(state);\n\n if (_hasOwnProperty.call(directiveHandlers, directiveName)) {\n directiveHandlers[directiveName](state, directiveName, directiveArgs);\n } else {\n throwWarning(state, 'unknown document directive \"' + directiveName + '\"');\n }\n }\n\n skipSeparationSpace(state, true, -1);\n\n if (state.lineIndent === 0 &&\n state.input.charCodeAt(state.position) === 0x2D/* - */ &&\n state.input.charCodeAt(state.position + 1) === 0x2D/* - */ &&\n state.input.charCodeAt(state.position + 2) === 0x2D/* - */) {\n state.position += 3;\n skipSeparationSpace(state, true, -1);\n\n } else if (hasDirectives) {\n throwError(state, 'directives end mark is expected');\n }\n\n composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);\n skipSeparationSpace(state, true, -1);\n\n if (state.checkLineBreaks &&\n PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) {\n throwWarning(state, 'non-ASCII line breaks are interpreted as content');\n }\n\n state.documents.push(state.result);\n\n if (state.position === state.lineStart && testDocumentSeparator(state)) {\n\n if (state.input.charCodeAt(state.position) === 0x2E/* . */) {\n state.position += 3;\n skipSeparationSpace(state, true, -1);\n }\n return;\n }\n\n if (state.position < (state.length - 1)) {\n throwError(state, 'end of the stream or a document separator is expected');\n } else {\n return;\n }\n}\n\n\nfunction loadDocuments(input, options) {\n input = String(input);\n options = options || {};\n\n if (input.length !== 0) {\n\n // Add tailing `\\n` if not exists\n if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ &&\n input.charCodeAt(input.length - 1) !== 0x0D/* CR */) {\n input += '\\n';\n }\n\n // Strip BOM\n if (input.charCodeAt(0) === 0xFEFF) {\n input = input.slice(1);\n }\n }\n\n var state = new State(input, options);\n\n var nullpos = input.indexOf('\\0');\n\n if (nullpos !== -1) {\n state.position = nullpos;\n throwError(state, 'null byte is not allowed in input');\n }\n\n // Use 0 as string terminator. That significantly simplifies bounds check.\n state.input += '\\0';\n\n while (state.input.charCodeAt(state.position) === 0x20/* Space */) {\n state.lineIndent += 1;\n state.position += 1;\n }\n\n while (state.position < (state.length - 1)) {\n readDocument(state);\n }\n\n return state.documents;\n}\n\n\nfunction loadAll(input, iterator, options) {\n if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') {\n options = iterator;\n iterator = null;\n }\n\n var documents = loadDocuments(input, options);\n\n if (typeof iterator !== 'function') {\n return documents;\n }\n\n for (var index = 0, length = documents.length; index < length; index += 1) {\n iterator(documents[index]);\n }\n}\n\n\nfunction load(input, options) {\n var documents = loadDocuments(input, options);\n\n if (documents.length === 0) {\n /*eslint-disable no-undefined*/\n return undefined;\n } else if (documents.length === 1) {\n return documents[0];\n }\n throw new YAMLException('expected a single document in the stream, but found more');\n}\n\n\nfunction safeLoadAll(input, iterator, options) {\n if (typeof iterator === 'object' && iterator !== null && typeof options === 'undefined') {\n options = iterator;\n iterator = null;\n }\n\n return loadAll(input, iterator, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options));\n}\n\n\nfunction safeLoad(input, options) {\n return load(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options));\n}\n\n\nmodule.exports.loadAll = loadAll;\nmodule.exports.load = load;\nmodule.exports.safeLoadAll = safeLoadAll;\nmodule.exports.safeLoad = safeLoad;\n","'use strict';\n\n/*eslint-disable no-use-before-define*/\n\nvar common = require('./common');\nvar YAMLException = require('./exception');\nvar DEFAULT_FULL_SCHEMA = require('./schema/default_full');\nvar DEFAULT_SAFE_SCHEMA = require('./schema/default_safe');\n\nvar _toString = Object.prototype.toString;\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar CHAR_TAB = 0x09; /* Tab */\nvar CHAR_LINE_FEED = 0x0A; /* LF */\nvar CHAR_CARRIAGE_RETURN = 0x0D; /* CR */\nvar CHAR_SPACE = 0x20; /* Space */\nvar CHAR_EXCLAMATION = 0x21; /* ! */\nvar CHAR_DOUBLE_QUOTE = 0x22; /* \" */\nvar CHAR_SHARP = 0x23; /* # */\nvar CHAR_PERCENT = 0x25; /* % */\nvar CHAR_AMPERSAND = 0x26; /* & */\nvar CHAR_SINGLE_QUOTE = 0x27; /* ' */\nvar CHAR_ASTERISK = 0x2A; /* * */\nvar CHAR_COMMA = 0x2C; /* , */\nvar CHAR_MINUS = 0x2D; /* - */\nvar CHAR_COLON = 0x3A; /* : */\nvar CHAR_EQUALS = 0x3D; /* = */\nvar CHAR_GREATER_THAN = 0x3E; /* > */\nvar CHAR_QUESTION = 0x3F; /* ? */\nvar CHAR_COMMERCIAL_AT = 0x40; /* @ */\nvar CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */\nvar CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */\nvar CHAR_GRAVE_ACCENT = 0x60; /* ` */\nvar CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */\nvar CHAR_VERTICAL_LINE = 0x7C; /* | */\nvar CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */\n\nvar ESCAPE_SEQUENCES = {};\n\nESCAPE_SEQUENCES[0x00] = '\\\\0';\nESCAPE_SEQUENCES[0x07] = '\\\\a';\nESCAPE_SEQUENCES[0x08] = '\\\\b';\nESCAPE_SEQUENCES[0x09] = '\\\\t';\nESCAPE_SEQUENCES[0x0A] = '\\\\n';\nESCAPE_SEQUENCES[0x0B] = '\\\\v';\nESCAPE_SEQUENCES[0x0C] = '\\\\f';\nESCAPE_SEQUENCES[0x0D] = '\\\\r';\nESCAPE_SEQUENCES[0x1B] = '\\\\e';\nESCAPE_SEQUENCES[0x22] = '\\\\\"';\nESCAPE_SEQUENCES[0x5C] = '\\\\\\\\';\nESCAPE_SEQUENCES[0x85] = '\\\\N';\nESCAPE_SEQUENCES[0xA0] = '\\\\_';\nESCAPE_SEQUENCES[0x2028] = '\\\\L';\nESCAPE_SEQUENCES[0x2029] = '\\\\P';\n\nvar DEPRECATED_BOOLEANS_SYNTAX = [\n 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON',\n 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF'\n];\n\nfunction compileStyleMap(schema, map) {\n var result, keys, index, length, tag, style, type;\n\n if (map === null) return {};\n\n result = {};\n keys = Object.keys(map);\n\n for (index = 0, length = keys.length; index < length; index += 1) {\n tag = keys[index];\n style = String(map[tag]);\n\n if (tag.slice(0, 2) === '!!') {\n tag = 'tag:yaml.org,2002:' + tag.slice(2);\n }\n type = schema.compiledTypeMap['fallback'][tag];\n\n if (type && _hasOwnProperty.call(type.styleAliases, style)) {\n style = type.styleAliases[style];\n }\n\n result[tag] = style;\n }\n\n return result;\n}\n\nfunction encodeHex(character) {\n var string, handle, length;\n\n string = character.toString(16).toUpperCase();\n\n if (character <= 0xFF) {\n handle = 'x';\n length = 2;\n } else if (character <= 0xFFFF) {\n handle = 'u';\n length = 4;\n } else if (character <= 0xFFFFFFFF) {\n handle = 'U';\n length = 8;\n } else {\n throw new YAMLException('code point within a string may not be greater than 0xFFFFFFFF');\n }\n\n return '\\\\' + handle + common.repeat('0', length - string.length) + string;\n}\n\nfunction State(options) {\n this.schema = options['schema'] || DEFAULT_FULL_SCHEMA;\n this.indent = Math.max(1, (options['indent'] || 2));\n this.noArrayIndent = options['noArrayIndent'] || false;\n this.skipInvalid = options['skipInvalid'] || false;\n this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']);\n this.styleMap = compileStyleMap(this.schema, options['styles'] || null);\n this.sortKeys = options['sortKeys'] || false;\n this.lineWidth = options['lineWidth'] || 80;\n this.noRefs = options['noRefs'] || false;\n this.noCompatMode = options['noCompatMode'] || false;\n this.condenseFlow = options['condenseFlow'] || false;\n\n this.implicitTypes = this.schema.compiledImplicit;\n this.explicitTypes = this.schema.compiledExplicit;\n\n this.tag = null;\n this.result = '';\n\n this.duplicates = [];\n this.usedDuplicates = null;\n}\n\n// Indents every line in a string. Empty lines (\\n only) are not indented.\nfunction indentString(string, spaces) {\n var ind = common.repeat(' ', spaces),\n position = 0,\n next = -1,\n result = '',\n line,\n length = string.length;\n\n while (position < length) {\n next = string.indexOf('\\n', position);\n if (next === -1) {\n line = string.slice(position);\n position = length;\n } else {\n line = string.slice(position, next + 1);\n position = next + 1;\n }\n\n if (line.length && line !== '\\n') result += ind;\n\n result += line;\n }\n\n return result;\n}\n\nfunction generateNextLine(state, level) {\n return '\\n' + common.repeat(' ', state.indent * level);\n}\n\nfunction testImplicitResolving(state, str) {\n var index, length, type;\n\n for (index = 0, length = state.implicitTypes.length; index < length; index += 1) {\n type = state.implicitTypes[index];\n\n if (type.resolve(str)) {\n return true;\n }\n }\n\n return false;\n}\n\n// [33] s-white ::= s-space | s-tab\nfunction isWhitespace(c) {\n return c === CHAR_SPACE || c === CHAR_TAB;\n}\n\n// Returns true if the character can be printed without escaping.\n// From YAML 1.2: \"any allowed characters known to be non-printable\n// should also be escaped. [However,] This isn’t mandatory\"\n// Derived from nb-char - \\t - #x85 - #xA0 - #x2028 - #x2029.\nfunction isPrintable(c) {\n return (0x00020 <= c && c <= 0x00007E)\n || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029)\n || ((0x0E000 <= c && c <= 0x00FFFD) && c !== 0xFEFF /* BOM */)\n || (0x10000 <= c && c <= 0x10FFFF);\n}\n\n// [34] ns-char ::= nb-char - s-white\n// [27] nb-char ::= c-printable - b-char - c-byte-order-mark\n// [26] b-char ::= b-line-feed | b-carriage-return\n// [24] b-line-feed ::= #xA /* LF */\n// [25] b-carriage-return ::= #xD /* CR */\n// [3] c-byte-order-mark ::= #xFEFF\nfunction isNsChar(c) {\n return isPrintable(c) && !isWhitespace(c)\n // byte-order-mark\n && c !== 0xFEFF\n // b-char\n && c !== CHAR_CARRIAGE_RETURN\n && c !== CHAR_LINE_FEED;\n}\n\n// Simplified test for values allowed after the first character in plain style.\nfunction isPlainSafe(c, prev) {\n // Uses a subset of nb-char - c-flow-indicator - \":\" - \"#\"\n // where nb-char ::= c-printable - b-char - c-byte-order-mark.\n return isPrintable(c) && c !== 0xFEFF\n // - c-flow-indicator\n && c !== CHAR_COMMA\n && c !== CHAR_LEFT_SQUARE_BRACKET\n && c !== CHAR_RIGHT_SQUARE_BRACKET\n && c !== CHAR_LEFT_CURLY_BRACKET\n && c !== CHAR_RIGHT_CURLY_BRACKET\n // - \":\" - \"#\"\n // /* An ns-char preceding */ \"#\"\n && c !== CHAR_COLON\n && ((c !== CHAR_SHARP) || (prev && isNsChar(prev)));\n}\n\n// Simplified test for values allowed as the first character in plain style.\nfunction isPlainSafeFirst(c) {\n // Uses a subset of ns-char - c-indicator\n // where ns-char = nb-char - s-white.\n return isPrintable(c) && c !== 0xFEFF\n && !isWhitespace(c) // - s-white\n // - (c-indicator ::=\n // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}”\n && c !== CHAR_MINUS\n && c !== CHAR_QUESTION\n && c !== CHAR_COLON\n && c !== CHAR_COMMA\n && c !== CHAR_LEFT_SQUARE_BRACKET\n && c !== CHAR_RIGHT_SQUARE_BRACKET\n && c !== CHAR_LEFT_CURLY_BRACKET\n && c !== CHAR_RIGHT_CURLY_BRACKET\n // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “\"”\n && c !== CHAR_SHARP\n && c !== CHAR_AMPERSAND\n && c !== CHAR_ASTERISK\n && c !== CHAR_EXCLAMATION\n && c !== CHAR_VERTICAL_LINE\n && c !== CHAR_EQUALS\n && c !== CHAR_GREATER_THAN\n && c !== CHAR_SINGLE_QUOTE\n && c !== CHAR_DOUBLE_QUOTE\n // | “%” | “@” | “`”)\n && c !== CHAR_PERCENT\n && c !== CHAR_COMMERCIAL_AT\n && c !== CHAR_GRAVE_ACCENT;\n}\n\n// Determines whether block indentation indicator is required.\nfunction needIndentIndicator(string) {\n var leadingSpaceRe = /^\\n* /;\n return leadingSpaceRe.test(string);\n}\n\nvar STYLE_PLAIN = 1,\n STYLE_SINGLE = 2,\n STYLE_LITERAL = 3,\n STYLE_FOLDED = 4,\n STYLE_DOUBLE = 5;\n\n// Determines which scalar styles are possible and returns the preferred style.\n// lineWidth = -1 => no limit.\n// Pre-conditions: str.length > 0.\n// Post-conditions:\n// STYLE_PLAIN or STYLE_SINGLE => no \\n are in the string.\n// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1).\n// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1).\nfunction chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType) {\n var i;\n var char, prev_char;\n var hasLineBreak = false;\n var hasFoldableLine = false; // only checked if shouldTrackWidth\n var shouldTrackWidth = lineWidth !== -1;\n var previousLineBreak = -1; // count the first line correctly\n var plain = isPlainSafeFirst(string.charCodeAt(0))\n && !isWhitespace(string.charCodeAt(string.length - 1));\n\n if (singleLineOnly) {\n // Case: no block styles.\n // Check for disallowed characters to rule out plain and single.\n for (i = 0; i < string.length; i++) {\n char = string.charCodeAt(i);\n if (!isPrintable(char)) {\n return STYLE_DOUBLE;\n }\n prev_char = i > 0 ? string.charCodeAt(i - 1) : null;\n plain = plain && isPlainSafe(char, prev_char);\n }\n } else {\n // Case: block styles permitted.\n for (i = 0; i < string.length; i++) {\n char = string.charCodeAt(i);\n if (char === CHAR_LINE_FEED) {\n hasLineBreak = true;\n // Check if any line can be folded.\n if (shouldTrackWidth) {\n hasFoldableLine = hasFoldableLine ||\n // Foldable line = too long, and not more-indented.\n (i - previousLineBreak - 1 > lineWidth &&\n string[previousLineBreak + 1] !== ' ');\n previousLineBreak = i;\n }\n } else if (!isPrintable(char)) {\n return STYLE_DOUBLE;\n }\n prev_char = i > 0 ? string.charCodeAt(i - 1) : null;\n plain = plain && isPlainSafe(char, prev_char);\n }\n // in case the end is missing a \\n\n hasFoldableLine = hasFoldableLine || (shouldTrackWidth &&\n (i - previousLineBreak - 1 > lineWidth &&\n string[previousLineBreak + 1] !== ' '));\n }\n // Although every style can represent \\n without escaping, prefer block styles\n // for multiline, since they're more readable and they don't add empty lines.\n // Also prefer folding a super-long line.\n if (!hasLineBreak && !hasFoldableLine) {\n // Strings interpretable as another type have to be quoted;\n // e.g. the string 'true' vs. the boolean true.\n return plain && !testAmbiguousType(string)\n ? STYLE_PLAIN : STYLE_SINGLE;\n }\n // Edge case: block indentation indicator can only have one digit.\n if (indentPerLevel > 9 && needIndentIndicator(string)) {\n return STYLE_DOUBLE;\n }\n // At this point we know block styles are valid.\n // Prefer literal style unless we want to fold.\n return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL;\n}\n\n// Note: line breaking/folding is implemented for only the folded style.\n// NB. We drop the last trailing newline (if any) of a returned block scalar\n// since the dumper adds its own newline. This always works:\n// • No ending newline => unaffected; already using strip \"-\" chomping.\n// • Ending newline => removed then restored.\n// Importantly, this keeps the \"+\" chomp indicator from gaining an extra line.\nfunction writeScalar(state, string, level, iskey) {\n state.dump = (function () {\n if (string.length === 0) {\n return \"''\";\n }\n if (!state.noCompatMode &&\n DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1) {\n return \"'\" + string + \"'\";\n }\n\n var indent = state.indent * Math.max(1, level); // no 0-indent scalars\n // As indentation gets deeper, let the width decrease monotonically\n // to the lower bound min(state.lineWidth, 40).\n // Note that this implies\n // state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound.\n // state.lineWidth > 40 + state.indent: width decreases until the lower bound.\n // This behaves better than a constant minimum width which disallows narrower options,\n // or an indent threshold which causes the width to suddenly increase.\n var lineWidth = state.lineWidth === -1\n ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent);\n\n // Without knowing if keys are implicit/explicit, assume implicit for safety.\n var singleLineOnly = iskey\n // No block styles in flow mode.\n || (state.flowLevel > -1 && level >= state.flowLevel);\n function testAmbiguity(string) {\n return testImplicitResolving(state, string);\n }\n\n switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, testAmbiguity)) {\n case STYLE_PLAIN:\n return string;\n case STYLE_SINGLE:\n return \"'\" + string.replace(/'/g, \"''\") + \"'\";\n case STYLE_LITERAL:\n return '|' + blockHeader(string, state.indent)\n + dropEndingNewline(indentString(string, indent));\n case STYLE_FOLDED:\n return '>' + blockHeader(string, state.indent)\n + dropEndingNewline(indentString(foldString(string, lineWidth), indent));\n case STYLE_DOUBLE:\n return '\"' + escapeString(string, lineWidth) + '\"';\n default:\n throw new YAMLException('impossible error: invalid scalar style');\n }\n }());\n}\n\n// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9.\nfunction blockHeader(string, indentPerLevel) {\n var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : '';\n\n // note the special case: the string '\\n' counts as a \"trailing\" empty line.\n var clip = string[string.length - 1] === '\\n';\n var keep = clip && (string[string.length - 2] === '\\n' || string === '\\n');\n var chomp = keep ? '+' : (clip ? '' : '-');\n\n return indentIndicator + chomp + '\\n';\n}\n\n// (See the note for writeScalar.)\nfunction dropEndingNewline(string) {\n return string[string.length - 1] === '\\n' ? string.slice(0, -1) : string;\n}\n\n// Note: a long line without a suitable break point will exceed the width limit.\n// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0.\nfunction foldString(string, width) {\n // In folded style, $k$ consecutive newlines output as $k+1$ newlines—\n // unless they're before or after a more-indented line, or at the very\n // beginning or end, in which case $k$ maps to $k$.\n // Therefore, parse each chunk as newline(s) followed by a content line.\n var lineRe = /(\\n+)([^\\n]*)/g;\n\n // first line (possibly an empty line)\n var result = (function () {\n var nextLF = string.indexOf('\\n');\n nextLF = nextLF !== -1 ? nextLF : string.length;\n lineRe.lastIndex = nextLF;\n return foldLine(string.slice(0, nextLF), width);\n }());\n // If we haven't reached the first content line yet, don't add an extra \\n.\n var prevMoreIndented = string[0] === '\\n' || string[0] === ' ';\n var moreIndented;\n\n // rest of the lines\n var match;\n while ((match = lineRe.exec(string))) {\n var prefix = match[1], line = match[2];\n moreIndented = (line[0] === ' ');\n result += prefix\n + (!prevMoreIndented && !moreIndented && line !== ''\n ? '\\n' : '')\n + foldLine(line, width);\n prevMoreIndented = moreIndented;\n }\n\n return result;\n}\n\n// Greedy line breaking.\n// Picks the longest line under the limit each time,\n// otherwise settles for the shortest line over the limit.\n// NB. More-indented lines *cannot* be folded, as that would add an extra \\n.\nfunction foldLine(line, width) {\n if (line === '' || line[0] === ' ') return line;\n\n // Since a more-indented line adds a \\n, breaks can't be followed by a space.\n var breakRe = / [^ ]/g; // note: the match index will always be <= length-2.\n var match;\n // start is an inclusive index. end, curr, and next are exclusive.\n var start = 0, end, curr = 0, next = 0;\n var result = '';\n\n // Invariants: 0 <= start <= length-1.\n // 0 <= curr <= next <= max(0, length-2). curr - start <= width.\n // Inside the loop:\n // A match implies length >= 2, so curr and next are <= length-2.\n while ((match = breakRe.exec(line))) {\n next = match.index;\n // maintain invariant: curr - start <= width\n if (next - start > width) {\n end = (curr > start) ? curr : next; // derive end <= length-2\n result += '\\n' + line.slice(start, end);\n // skip the space that was output as \\n\n start = end + 1; // derive start <= length-1\n }\n curr = next;\n }\n\n // By the invariants, start <= length-1, so there is something left over.\n // It is either the whole string or a part starting from non-whitespace.\n result += '\\n';\n // Insert a break if the remainder is too long and there is a break available.\n if (line.length - start > width && curr > start) {\n result += line.slice(start, curr) + '\\n' + line.slice(curr + 1);\n } else {\n result += line.slice(start);\n }\n\n return result.slice(1); // drop extra \\n joiner\n}\n\n// Escapes a double-quoted string.\nfunction escapeString(string) {\n var result = '';\n var char, nextChar;\n var escapeSeq;\n\n for (var i = 0; i < string.length; i++) {\n char = string.charCodeAt(i);\n // Check for surrogate pairs (reference Unicode 3.0 section \"3.7 Surrogates\").\n if (char >= 0xD800 && char <= 0xDBFF/* high surrogate */) {\n nextChar = string.charCodeAt(i + 1);\n if (nextChar >= 0xDC00 && nextChar <= 0xDFFF/* low surrogate */) {\n // Combine the surrogate pair and store it escaped.\n result += encodeHex((char - 0xD800) * 0x400 + nextChar - 0xDC00 + 0x10000);\n // Advance index one extra since we already used that char here.\n i++; continue;\n }\n }\n escapeSeq = ESCAPE_SEQUENCES[char];\n result += !escapeSeq && isPrintable(char)\n ? string[i]\n : escapeSeq || encodeHex(char);\n }\n\n return result;\n}\n\nfunction writeFlowSequence(state, level, object) {\n var _result = '',\n _tag = state.tag,\n index,\n length;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n // Write only valid elements.\n if (writeNode(state, level, object[index], false, false)) {\n if (index !== 0) _result += ',' + (!state.condenseFlow ? ' ' : '');\n _result += state.dump;\n }\n }\n\n state.tag = _tag;\n state.dump = '[' + _result + ']';\n}\n\nfunction writeBlockSequence(state, level, object, compact) {\n var _result = '',\n _tag = state.tag,\n index,\n length;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n // Write only valid elements.\n if (writeNode(state, level + 1, object[index], true, true)) {\n if (!compact || index !== 0) {\n _result += generateNextLine(state, level);\n }\n\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n _result += '-';\n } else {\n _result += '- ';\n }\n\n _result += state.dump;\n }\n }\n\n state.tag = _tag;\n state.dump = _result || '[]'; // Empty sequence if no valid values.\n}\n\nfunction writeFlowMapping(state, level, object) {\n var _result = '',\n _tag = state.tag,\n objectKeyList = Object.keys(object),\n index,\n length,\n objectKey,\n objectValue,\n pairBuffer;\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n\n pairBuffer = '';\n if (index !== 0) pairBuffer += ', ';\n\n if (state.condenseFlow) pairBuffer += '\"';\n\n objectKey = objectKeyList[index];\n objectValue = object[objectKey];\n\n if (!writeNode(state, level, objectKey, false, false)) {\n continue; // Skip this pair because of invalid key;\n }\n\n if (state.dump.length > 1024) pairBuffer += '? ';\n\n pairBuffer += state.dump + (state.condenseFlow ? '\"' : '') + ':' + (state.condenseFlow ? '' : ' ');\n\n if (!writeNode(state, level, objectValue, false, false)) {\n continue; // Skip this pair because of invalid value.\n }\n\n pairBuffer += state.dump;\n\n // Both key and value are valid.\n _result += pairBuffer;\n }\n\n state.tag = _tag;\n state.dump = '{' + _result + '}';\n}\n\nfunction writeBlockMapping(state, level, object, compact) {\n var _result = '',\n _tag = state.tag,\n objectKeyList = Object.keys(object),\n index,\n length,\n objectKey,\n objectValue,\n explicitPair,\n pairBuffer;\n\n // Allow sorting keys so that the output file is deterministic\n if (state.sortKeys === true) {\n // Default sorting\n objectKeyList.sort();\n } else if (typeof state.sortKeys === 'function') {\n // Custom sort function\n objectKeyList.sort(state.sortKeys);\n } else if (state.sortKeys) {\n // Something is wrong\n throw new YAMLException('sortKeys must be a boolean or a function');\n }\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n pairBuffer = '';\n\n if (!compact || index !== 0) {\n pairBuffer += generateNextLine(state, level);\n }\n\n objectKey = objectKeyList[index];\n objectValue = object[objectKey];\n\n if (!writeNode(state, level + 1, objectKey, true, true, true)) {\n continue; // Skip this pair because of invalid key.\n }\n\n explicitPair = (state.tag !== null && state.tag !== '?') ||\n (state.dump && state.dump.length > 1024);\n\n if (explicitPair) {\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n pairBuffer += '?';\n } else {\n pairBuffer += '? ';\n }\n }\n\n pairBuffer += state.dump;\n\n if (explicitPair) {\n pairBuffer += generateNextLine(state, level);\n }\n\n if (!writeNode(state, level + 1, objectValue, true, explicitPair)) {\n continue; // Skip this pair because of invalid value.\n }\n\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n pairBuffer += ':';\n } else {\n pairBuffer += ': ';\n }\n\n pairBuffer += state.dump;\n\n // Both key and value are valid.\n _result += pairBuffer;\n }\n\n state.tag = _tag;\n state.dump = _result || '{}'; // Empty mapping if no valid pairs.\n}\n\nfunction detectType(state, object, explicit) {\n var _result, typeList, index, length, type, style;\n\n typeList = explicit ? state.explicitTypes : state.implicitTypes;\n\n for (index = 0, length = typeList.length; index < length; index += 1) {\n type = typeList[index];\n\n if ((type.instanceOf || type.predicate) &&\n (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) &&\n (!type.predicate || type.predicate(object))) {\n\n state.tag = explicit ? type.tag : '?';\n\n if (type.represent) {\n style = state.styleMap[type.tag] || type.defaultStyle;\n\n if (_toString.call(type.represent) === '[object Function]') {\n _result = type.represent(object, style);\n } else if (_hasOwnProperty.call(type.represent, style)) {\n _result = type.represent[style](object, style);\n } else {\n throw new YAMLException('!<' + type.tag + '> tag resolver accepts not \"' + style + '\" style');\n }\n\n state.dump = _result;\n }\n\n return true;\n }\n }\n\n return false;\n}\n\n// Serializes `object` and writes it to global `result`.\n// Returns true on success, or false on invalid object.\n//\nfunction writeNode(state, level, object, block, compact, iskey) {\n state.tag = null;\n state.dump = object;\n\n if (!detectType(state, object, false)) {\n detectType(state, object, true);\n }\n\n var type = _toString.call(state.dump);\n\n if (block) {\n block = (state.flowLevel < 0 || state.flowLevel > level);\n }\n\n var objectOrArray = type === '[object Object]' || type === '[object Array]',\n duplicateIndex,\n duplicate;\n\n if (objectOrArray) {\n duplicateIndex = state.duplicates.indexOf(object);\n duplicate = duplicateIndex !== -1;\n }\n\n if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) {\n compact = false;\n }\n\n if (duplicate && state.usedDuplicates[duplicateIndex]) {\n state.dump = '*ref_' + duplicateIndex;\n } else {\n if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) {\n state.usedDuplicates[duplicateIndex] = true;\n }\n if (type === '[object Object]') {\n if (block && (Object.keys(state.dump).length !== 0)) {\n writeBlockMapping(state, level, state.dump, compact);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + state.dump;\n }\n } else {\n writeFlowMapping(state, level, state.dump);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;\n }\n }\n } else if (type === '[object Array]') {\n var arrayLevel = (state.noArrayIndent && (level > 0)) ? level - 1 : level;\n if (block && (state.dump.length !== 0)) {\n writeBlockSequence(state, arrayLevel, state.dump, compact);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + state.dump;\n }\n } else {\n writeFlowSequence(state, arrayLevel, state.dump);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;\n }\n }\n } else if (type === '[object String]') {\n if (state.tag !== '?') {\n writeScalar(state, state.dump, level, iskey);\n }\n } else {\n if (state.skipInvalid) return false;\n throw new YAMLException('unacceptable kind of an object to dump ' + type);\n }\n\n if (state.tag !== null && state.tag !== '?') {\n state.dump = '!<' + state.tag + '> ' + state.dump;\n }\n }\n\n return true;\n}\n\nfunction getDuplicateReferences(object, state) {\n var objects = [],\n duplicatesIndexes = [],\n index,\n length;\n\n inspectNode(object, objects, duplicatesIndexes);\n\n for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) {\n state.duplicates.push(objects[duplicatesIndexes[index]]);\n }\n state.usedDuplicates = new Array(length);\n}\n\nfunction inspectNode(object, objects, duplicatesIndexes) {\n var objectKeyList,\n index,\n length;\n\n if (object !== null && typeof object === 'object') {\n index = objects.indexOf(object);\n if (index !== -1) {\n if (duplicatesIndexes.indexOf(index) === -1) {\n duplicatesIndexes.push(index);\n }\n } else {\n objects.push(object);\n\n if (Array.isArray(object)) {\n for (index = 0, length = object.length; index < length; index += 1) {\n inspectNode(object[index], objects, duplicatesIndexes);\n }\n } else {\n objectKeyList = Object.keys(object);\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes);\n }\n }\n }\n }\n}\n\nfunction dump(input, options) {\n options = options || {};\n\n var state = new State(options);\n\n if (!state.noRefs) getDuplicateReferences(input, state);\n\n if (writeNode(state, 0, input, true, true)) return state.dump + '\\n';\n\n return '';\n}\n\nfunction safeDump(input, options) {\n return dump(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options));\n}\n\nmodule.exports.dump = dump;\nmodule.exports.safeDump = safeDump;\n","'use strict';\n\n\nvar loader = require('./js-yaml/loader');\nvar dumper = require('./js-yaml/dumper');\n\n\nfunction deprecated(name) {\n return function () {\n throw new Error('Function ' + name + ' is deprecated and cannot be used.');\n };\n}\n\n\nmodule.exports.Type = require('./js-yaml/type');\nmodule.exports.Schema = require('./js-yaml/schema');\nmodule.exports.FAILSAFE_SCHEMA = require('./js-yaml/schema/failsafe');\nmodule.exports.JSON_SCHEMA = require('./js-yaml/schema/json');\nmodule.exports.CORE_SCHEMA = require('./js-yaml/schema/core');\nmodule.exports.DEFAULT_SAFE_SCHEMA = require('./js-yaml/schema/default_safe');\nmodule.exports.DEFAULT_FULL_SCHEMA = require('./js-yaml/schema/default_full');\nmodule.exports.load = loader.load;\nmodule.exports.loadAll = loader.loadAll;\nmodule.exports.safeLoad = loader.safeLoad;\nmodule.exports.safeLoadAll = loader.safeLoadAll;\nmodule.exports.dump = dumper.dump;\nmodule.exports.safeDump = dumper.safeDump;\nmodule.exports.YAMLException = require('./js-yaml/exception');\n\n// Deprecated schema names from JS-YAML 2.0.x\nmodule.exports.MINIMAL_SCHEMA = require('./js-yaml/schema/failsafe');\nmodule.exports.SAFE_SCHEMA = require('./js-yaml/schema/default_safe');\nmodule.exports.DEFAULT_SCHEMA = require('./js-yaml/schema/default_full');\n\n// Deprecated functions from JS-YAML 1.x.x\nmodule.exports.scan = deprecated('scan');\nmodule.exports.parse = deprecated('parse');\nmodule.exports.compose = deprecated('compose');\nmodule.exports.addConstructor = deprecated('addConstructor');\n","'use strict';\n\n\nvar yaml = require('./lib/js-yaml.js');\n\n\nmodule.exports = yaml;\n","'use strict';\n\nconst yaml = require('js-yaml');\n\n/**\n * Default engines\n */\n\nconst engines = exports = module.exports;\n\n/**\n * YAML\n */\n\nengines.yaml = {\n parse: yaml.safeLoad.bind(yaml),\n stringify: yaml.safeDump.bind(yaml)\n};\n\n/**\n * JSON\n */\n\nengines.json = {\n parse: JSON.parse.bind(JSON),\n stringify: function(obj, options) {\n const opts = Object.assign({replacer: null, space: 2}, options);\n return JSON.stringify(obj, opts.replacer, opts.space);\n }\n};\n\n/**\n * JavaScript\n */\n\nengines.javascript = {\n parse: function parse(str, options, wrap) {\n /* eslint no-eval: 0 */\n try {\n if (wrap !== false) {\n str = '(function() {\\nreturn ' + str.trim() + ';\\n}());';\n }\n return eval(str) || {};\n } catch (err) {\n if (wrap !== false && /(unexpected|identifier)/i.test(err.message)) {\n return parse(str, options, false);\n }\n throw new SyntaxError(err);\n }\n },\n stringify: function() {\n throw new Error('stringifying JavaScript is not supported');\n }\n};\n","/*!\n * strip-bom-string <https://github.com/jonschlinkert/strip-bom-string>\n *\n * Copyright (c) 2015, 2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function(str) {\n if (typeof str === 'string' && str.charAt(0) === '\\ufeff') {\n return str.slice(1);\n }\n return str;\n};\n","'use strict';\n\nconst stripBom = require('strip-bom-string');\nconst typeOf = require('kind-of');\n\nexports.define = function(obj, key, val) {\n Reflect.defineProperty(obj, key, {\n enumerable: false,\n configurable: true,\n writable: true,\n value: val\n });\n};\n\n/**\n * Returns true if `val` is a buffer\n */\n\nexports.isBuffer = function(val) {\n return typeOf(val) === 'buffer';\n};\n\n/**\n * Returns true if `val` is an object\n */\n\nexports.isObject = function(val) {\n return typeOf(val) === 'object';\n};\n\n/**\n * Cast `input` to a buffer\n */\n\nexports.toBuffer = function(input) {\n return typeof input === 'string' ? Buffer.from(input) : input;\n};\n\n/**\n * Cast `val` to a string.\n */\n\nexports.toString = function(input) {\n if (exports.isBuffer(input)) return stripBom(String(input));\n if (typeof input !== 'string') {\n throw new TypeError('expected input to be a string or buffer');\n }\n return stripBom(input);\n};\n\n/**\n * Cast `val` to an array.\n */\n\nexports.arrayify = function(val) {\n return val ? (Array.isArray(val) ? val : [val]) : [];\n};\n\n/**\n * Returns true if `str` starts with `substr`.\n */\n\nexports.startsWith = function(str, substr, len) {\n if (typeof len !== 'number') len = substr.length;\n return str.slice(0, len) === substr;\n};\n","'use strict';\n\nconst engines = require('./engines');\nconst utils = require('./utils');\n\nmodule.exports = function(options) {\n const opts = Object.assign({}, options);\n\n // ensure that delimiters are an array\n opts.delimiters = utils.arrayify(opts.delims || opts.delimiters || '---');\n if (opts.delimiters.length === 1) {\n opts.delimiters.push(opts.delimiters[0]);\n }\n\n opts.language = (opts.language || opts.lang || 'yaml').toLowerCase();\n opts.engines = Object.assign({}, engines, opts.parsers, opts.engines);\n return opts;\n};\n","'use strict';\n\nmodule.exports = function(name, options) {\n let engine = options.engines[name] || options.engines[aliase(name)];\n if (typeof engine === 'undefined') {\n throw new Error('gray-matter engine \"' + name + '\" is not registered');\n }\n if (typeof engine === 'function') {\n engine = { parse: engine };\n }\n return engine;\n};\n\nfunction aliase(name) {\n switch (name.toLowerCase()) {\n case 'js':\n case 'javascript':\n return 'javascript';\n case 'coffee':\n case 'coffeescript':\n case 'cson':\n return 'coffee';\n case 'yaml':\n case 'yml':\n return 'yaml';\n default: {\n return name;\n }\n }\n}\n","'use strict';\n\nconst typeOf = require('kind-of');\nconst getEngine = require('./engine');\nconst defaults = require('./defaults');\n\nmodule.exports = function(file, data, options) {\n if (data == null && options == null) {\n switch (typeOf(file)) {\n case 'object':\n data = file.data;\n options = {};\n break;\n case 'string':\n return file;\n default: {\n throw new TypeError('expected file to be a string or object');\n }\n }\n }\n\n const str = file.content;\n const opts = defaults(options);\n if (data == null) {\n if (!opts.data) return file;\n data = opts.data;\n }\n\n const language = file.language || opts.language;\n const engine = getEngine(language, opts);\n if (typeof engine.stringify !== 'function') {\n throw new TypeError('expected \"' + language + '.stringify\" to be a function');\n }\n\n data = Object.assign({}, file.data, data);\n const open = opts.delimiters[0];\n const close = opts.delimiters[1];\n const matter = engine.stringify(data, options).trim();\n let buf = '';\n\n if (matter !== '{}') {\n buf = newline(open) + newline(matter) + newline(close);\n }\n\n if (typeof file.excerpt === 'string' && file.excerpt !== '') {\n if (str.indexOf(file.excerpt.trim()) === -1) {\n buf += newline(file.excerpt) + newline(close);\n }\n }\n\n return buf + newline(str);\n};\n\nfunction newline(str) {\n return str.slice(-1) !== '\\n' ? str + '\\n' : str;\n}\n","'use strict';\n\nconst defaults = require('./defaults');\n\nmodule.exports = function(file, options) {\n const opts = defaults(options);\n\n if (file.data == null) {\n file.data = {};\n }\n\n if (typeof opts.excerpt === 'function') {\n return opts.excerpt(file, opts);\n }\n\n const sep = file.data.excerpt_separator || opts.excerpt_separator;\n if (sep == null && (opts.excerpt === false || opts.excerpt == null)) {\n return file;\n }\n\n const delimiter = typeof opts.excerpt === 'string'\n ? opts.excerpt\n : (sep || opts.delimiters[0]);\n\n // if enabled, get the excerpt defined after front-matter\n const idx = file.content.indexOf(delimiter);\n if (idx !== -1) {\n file.excerpt = file.content.slice(0, idx);\n }\n\n return file;\n};\n","'use strict';\n\nconst typeOf = require('kind-of');\nconst stringify = require('./stringify');\nconst utils = require('./utils');\n\n/**\n * Normalize the given value to ensure an object is returned\n * with the expected properties.\n */\n\nmodule.exports = function(file) {\n if (typeOf(file) !== 'object') {\n file = { content: file };\n }\n\n if (typeOf(file.data) !== 'object') {\n file.data = {};\n }\n\n // if file was passed as an object, ensure that\n // \"file.content\" is set\n if (file.contents && file.content == null) {\n file.content = file.contents;\n }\n\n // set non-enumerable properties on the file object\n utils.define(file, 'orig', utils.toBuffer(file.content));\n utils.define(file, 'language', file.language || '');\n utils.define(file, 'matter', file.matter || '');\n utils.define(file, 'stringify', function(data, options) {\n if (options && options.language) {\n file.language = options.language;\n }\n return stringify(file, data, options);\n });\n\n // strip BOM and ensure that \"file.content\" is a string\n file.content = utils.toString(file.content);\n file.isEmpty = false;\n file.excerpt = '';\n return file;\n};\n","'use strict';\n\nconst getEngine = require('./engine');\nconst defaults = require('./defaults');\n\nmodule.exports = function(language, str, options) {\n const opts = defaults(options);\n const engine = getEngine(language, opts);\n if (typeof engine.parse !== 'function') {\n throw new TypeError('expected \"' + language + '.parse\" to be a function');\n }\n return engine.parse(str, opts);\n};\n","'use strict';\n\nconst fs = require('fs');\nconst sections = require('section-matter');\nconst defaults = require('./lib/defaults');\nconst stringify = require('./lib/stringify');\nconst excerpt = require('./lib/excerpt');\nconst engines = require('./lib/engines');\nconst toFile = require('./lib/to-file');\nconst parse = require('./lib/parse');\nconst utils = require('./lib/utils');\n\n/**\n * Takes a string or object with `content` property, extracts\n * and parses front-matter from the string, then returns an object\n * with `data`, `content` and other [useful properties](#returned-object).\n *\n * ```js\n * const matter = require('gray-matter');\n * console.log(matter('---\\ntitle: Home\\n---\\nOther stuff'));\n * //=> { data: { title: 'Home'}, content: 'Other stuff' }\n * ```\n * @param {Object|String} `input` String, or object with `content` string\n * @param {Object} `options`\n * @return {Object}\n * @api public\n */\n\nfunction matter(input, options) {\n if (input === '') {\n return { data: {}, content: input, excerpt: '', orig: input };\n }\n\n let file = toFile(input);\n const cached = matter.cache[file.content];\n\n if (!options) {\n if (cached) {\n file = Object.assign({}, cached);\n file.orig = cached.orig;\n return file;\n }\n\n // only cache if there are no options passed. if we cache when options\n // are passed, we would need to also cache options values, which would\n // negate any performance benefits of caching\n matter.cache[file.content] = file;\n }\n\n return parseMatter(file, options);\n}\n\n/**\n * Parse front matter\n */\n\nfunction parseMatter(file, options) {\n const opts = defaults(options);\n const open = opts.delimiters[0];\n const close = '\\n' + opts.delimiters[1];\n let str = file.content;\n\n if (opts.language) {\n file.language = opts.language;\n }\n\n // get the length of the opening delimiter\n const openLen = open.length;\n if (!utils.startsWith(str, open, openLen)) {\n excerpt(file, opts);\n return file;\n }\n\n // if the next character after the opening delimiter is\n // a character from the delimiter, then it's not a front-\n // matter delimiter\n if (str.charAt(openLen) === open.slice(-1)) {\n return file;\n }\n\n // strip the opening delimiter\n str = str.slice(openLen);\n const len = str.length;\n\n // use the language defined after first delimiter, if it exists\n const language = matter.language(str, opts);\n if (language.name) {\n file.language = language.name;\n str = str.slice(language.raw.length);\n }\n\n // get the index of the closing delimiter\n let closeIndex = str.indexOf(close);\n if (closeIndex === -1) {\n closeIndex = len;\n }\n\n // get the raw front-matter block\n file.matter = str.slice(0, closeIndex);\n\n const block = file.matter.replace(/^\\s*#[^\\n]+/gm, '').trim();\n if (block === '') {\n file.isEmpty = true;\n file.empty = file.content;\n file.data = {};\n } else {\n\n // create file.data by parsing the raw file.matter block\n file.data = parse(file.language, file.matter, opts);\n }\n\n // update file.content\n if (closeIndex === len) {\n file.content = '';\n } else {\n file.content = str.slice(closeIndex + close.length);\n if (file.content[0] === '\\r') {\n file.content = file.content.slice(1);\n }\n if (file.content[0] === '\\n') {\n file.content = file.content.slice(1);\n }\n }\n\n excerpt(file, opts);\n\n if (opts.sections === true || typeof opts.section === 'function') {\n sections(file, opts.section);\n }\n return file;\n}\n\n/**\n * Expose engines\n */\n\nmatter.engines = engines;\n\n/**\n * Stringify an object to YAML or the specified language, and\n * append it to the given string. By default, only YAML and JSON\n * can be stringified. See the [engines](#engines) section to learn\n * how to stringify other languages.\n *\n * ```js\n * console.log(matter.stringify('foo bar baz', {title: 'Home'}));\n * // results in:\n * // ---\n * // title: Home\n * // ---\n * // foo bar baz\n * ```\n * @param {String|Object} `file` The content string to append to stringified front-matter, or a file object with `file.content` string.\n * @param {Object} `data` Front matter to stringify.\n * @param {Object} `options` [Options](#options) to pass to gray-matter and [js-yaml].\n * @return {String} Returns a string created by wrapping stringified yaml with delimiters, and appending that to the given string.\n * @api public\n */\n\nmatter.stringify = function(file, data, options) {\n if (typeof file === 'string') file = matter(file, options);\n return stringify(file, data, options);\n};\n\n/**\n * Synchronously read a file from the file system and parse\n * front matter. Returns the same object as the [main function](#matter).\n *\n * ```js\n * const file = matter.read('./content/blog-post.md');\n * ```\n * @param {String} `filepath` file path of the file to read.\n * @param {Object} `options` [Options](#options) to pass to gray-matter.\n * @return {Object} Returns [an object](#returned-object) with `data` and `content`\n * @api public\n */\n\nmatter.read = function(filepath, options) {\n const str = fs.readFileSync(filepath, 'utf8');\n const file = matter(str, options);\n file.path = filepath;\n return file;\n};\n\n/**\n * Returns true if the given `string` has front matter.\n * @param {String} `string`\n * @param {Object} `options`\n * @return {Boolean} True if front matter exists.\n * @api public\n */\n\nmatter.test = function(str, options) {\n return utils.startsWith(str, defaults(options).delimiters[0]);\n};\n\n/**\n * Detect the language to use, if one is defined after the\n * first front-matter delimiter.\n * @param {String} `string`\n * @param {Object} `options`\n * @return {Object} Object with `raw` (actual language string), and `name`, the language with whitespace trimmed\n */\n\nmatter.language = function(str, options) {\n const opts = defaults(options);\n const open = opts.delimiters[0];\n\n if (matter.test(str)) {\n str = str.slice(open.length);\n }\n\n const language = str.slice(0, str.search(/\\r?\\n/));\n return {\n raw: language,\n name: language ? language.trim() : ''\n };\n};\n\n/**\n * Expose `matter`\n */\n\nmatter.cache = {};\nmatter.clearCache = function() {\n matter.cache = {};\n};\nmodule.exports = matter;\n","/**\n * ideal-cli - Ideal Lab 开发工作流初始化工具\n *\n * @packageDocumentation\n */\n\nimport { Command } from 'commander';\nimport { registerCommands } from './commands/index.js';\n\n// 从 package.json 读取版本号\nconst VERSION = '1.0.0';\n\n/**\n * 自定义帮助信息\n */\nfunction customizeHelp(program: Command): void {\n // 添加使用示例到帮助信息末尾\n program.addHelpText('after', `\n\nExamples:\n $ ideal init 交互式初始化工作流\n $ ideal config list 查看当前配置\n $ ideal doctor 检查配置完整性\n`);\n}\n\n/**\n * 创建并配置 CLI 程序\n */\nfunction createProgram(): Command {\n const program = new Command();\n\n // 基本配置\n program\n .name('ideal')\n .description('ideal-cli - Ideal Lab 开发工作流初始化工具')\n .version(VERSION, '-v, --version', '输出版本号')\n .helpOption('-h, --help', '显示帮助信息');\n\n // 注册所有命令\n registerCommands(program);\n\n // 自定义帮助信息\n customizeHelp(program);\n\n return program;\n}\n\n/**\n * CLI 主入口\n */\nasync function main(): Promise<void> {\n const program = createProgram();\n\n // 解析命令行参数\n await program.parseAsync(process.argv);\n}\n\n// 导出类型(供外部使用)\nexport * from './types/index.js';\n\n// 启动 CLI\nmain().catch((error) => {\n console.error('Error:', error.message);\n process.exit(1);\n});\n","/**\n * 命令注册模块\n *\n * 统一注册所有 CLI 命令\n */\n\nimport { Command } from 'commander';\nimport { HELP_INIT, HELP_DOCTOR } from '../constants/messages.js';\nimport { DoctorCommand } from './doctor.js';\nimport { createConfigCommand } from './config.js';\nimport { UpdateCommand } from './update.js';\n\n/**\n * 占位命令处理函数 - init\n *\n * TODO: 在后续 Story 中实现完整功能\n */\nasync function handleInit(): Promise<void> {\n console.log('init 命令尚未实现');\n process.exit(0);\n}\n\n/**\n * doctor 命令处理函数\n */\nasync function handleDoctor(options: { verbose?: boolean }): Promise<void> {\n const doctor = new DoctorCommand({\n verbose: options.verbose,\n });\n const exitCode = await doctor.execute();\n process.exit(exitCode);\n}\n\n/**\n * 注册所有命令到 Commander 程序\n *\n * @param program - Commander 程序实例\n */\nexport function registerCommands(program: Command): void {\n // init 命令 - 初始化项目工作流配置\n program\n .command('init')\n .description(HELP_INIT)\n .action(handleInit);\n\n // config 命令 - 查看或修改项目配置(带子命令)\n const configCommand = createConfigCommand();\n configCommand.register(program);\n\n // update 命令 - 更新工作流模板到最新版本\n const updateCommand = new UpdateCommand();\n updateCommand.register(program);\n\n // doctor 命令 - 检查工作流配置完整性和有效性\n program\n .command('doctor')\n .description(HELP_DOCTOR)\n .option('-v, --verbose', '显示详细输出')\n .action(handleDoctor);\n}\n","/**\n * 提示信息常量\n */\n\n// ============ 成功消息 ============\n\nexport const MSG_INIT_SUCCESS = '项目初始化完成!';\nexport const MSG_CONFIG_SAVED = '配置已保存';\nexport const MSG_UPDATE_SUCCESS = '更新完成!';\nexport const MSG_DOCTOR_PASS = '所有检查通过';\n\n// ============ 错误消息 ============\n\nexport const ERR_NETWORK_OFFLINE = '网络连接失败,请检查网络后重试';\nexport const ERR_GITHUB_ACCESS = '无法访问 GitHub 仓库,请检查网络或仓库地址';\nexport const ERR_DIR_EXISTS = '目录已存在,请使用 --force 强制覆盖';\nexport const ERR_CONFIG_NOT_FOUND = '配置文件不存在,请先运行 ideal init';\nexport const ERR_CONFIG_INVALID = '配置文件格式无效';\nexport const ERR_TEMPLATE_NOT_FOUND = '模板文件不存在';\nexport const ERR_PERMISSION_DENIED = '权限不足,请检查文件权限';\nexport const ERR_GIT_NOT_INSTALLED = 'Git 未安装,请先安装 Git';\n\n// ============ 警告消息 ============\n\nexport const WARN_VERSION_LOW = '版本过低,建议升级到最新版本';\nexport const WARN_PYTHON_LOW = 'Python 版本过低(当前 {current},建议 {required}+)';\nexport const WARN_NODE_LOW = 'Node.js 版本过低(当前 {current},建议 {required}+)';\nexport const WARN_FILE_MODIFIED = '文件已被修改,更新时可能被覆盖';\nexport const WARN_CONFLICT_DETECTED = '检测到冲突,请手动解决';\n\n// ============ 信息消息 ============\n\nexport const INFO_CREATING_DIR = '正在创建目录...';\nexport const INFO_DOWNLOADING = '正在下载模板...';\nexport const INFO_CHECKING = '正在检查...';\nexport const INFO_UPDATING = '正在更新...';\n\n// ============ 帮助消息 ============\n\nexport const HELP_INIT = '初始化项目工作流配置';\nexport const HELP_CONFIG = '查看或修改项目配置';\nexport const HELP_UPDATE = '更新工作流模板到最新版本';\nexport const HELP_DOCTOR = '检查工作流配置完整性和有效性';\n\n// ============ 交互提示 ============\n\nexport const PROMPT_PROJECT_NAME = '项目名称';\nexport const PROMPT_GIT_BRANCH = 'Git 主分支名称';\nexport const PROMPT_TECH_STACK = '技术栈类型';\nexport const PROMPT_SKIP = '输入 skip 跳过';\n\n// ============ 格式化消息 ============\n\n/**\n * 格式化版本警告消息\n */\nexport function formatVersionWarning(\n type: 'Python' | 'Node.js',\n current: string,\n required: string\n): string {\n return type === 'Python'\n ? WARN_PYTHON_LOW.replace('{current}', current).replace('{required}', required)\n : WARN_NODE_LOW.replace('{current}', current).replace('{required}', required);\n}\n","/**\n * Doctor 命令\n *\n * 检查工作流配置完整性和有效性\n */\n\nimport { ProjectValidator } from '../services/validator.js';\nimport { Logger } from '../utils/logger.js';\nimport { CheckResult, DoctorResult } from '../types/doctor.js';\n\n/**\n * Doctor 命令配置\n */\nexport interface DoctorCommandConfig {\n /** 是否启用 verbose 模式 */\n verbose?: boolean;\n /** 项目路径 */\n projectPath?: string;\n}\n\n/**\n * Doctor 命令类\n */\nexport class DoctorCommand {\n private validator: ProjectValidator;\n private logger: Logger;\n private verbose: boolean;\n private projectPath: string;\n\n constructor(config: DoctorCommandConfig = {}) {\n this.validator = new ProjectValidator();\n this.logger = Logger.getInstance();\n this.verbose = config.verbose ?? false;\n this.projectPath = config.projectPath ?? process.cwd();\n\n if (this.verbose) {\n this.logger.setVerbose(true);\n }\n }\n\n /**\n * 运行所有检查\n * @returns 诊断结果\n */\n async runChecks(): Promise<DoctorResult> {\n this.logger.debug(`运行诊断检查,项目路径: ${this.projectPath}`);\n return this.validator.runAllChecks(this.projectPath);\n }\n\n /**\n * 格式化单个检查结果\n * @param check 检查结果\n * @returns 格式化后的字符串\n */\n formatCheckResult(check: CheckResult): string {\n const symbol = this.getStatusSymbol(check.status);\n const name = check.name;\n const message = check.message;\n\n let result = `${symbol} ${name}: ${message}`;\n\n if (this.verbose && check.details) {\n result += `\\n ${check.details}`;\n }\n\n return result;\n }\n\n /**\n * 获取状态符号\n * @param status 检查状态\n * @returns 状态符号\n */\n private getStatusSymbol(status: 'pass' | 'warning' | 'error'): string {\n switch (status) {\n case 'pass':\n return '\\u2713'; // ✓\n case 'warning':\n return '\\u26a0'; // ⚠\n case 'error':\n return '\\u2717'; // ✗\n default:\n return '?';\n }\n }\n\n /**\n * 格式化并输出诊断结果\n * @param result 诊断结果\n */\n formatResults(result: DoctorResult): void {\n this.logger.title('ideal-cli 诊断检查');\n this.logger.newline();\n\n // 输出各项检查结果\n for (const check of result.checks) {\n this.outputCheckResult(check);\n }\n\n this.logger.newline();\n this.logger.divider();\n this.logger.newline();\n\n // 输出摘要\n this.outputSummary(result.summary);\n }\n\n /**\n * 输出单个检查结果\n * @param check 检查结果\n */\n private outputCheckResult(check: CheckResult): void {\n switch (check.status) {\n case 'pass':\n this.logger.success(`${check.name}: ${check.message}`);\n break;\n case 'warning':\n this.logger.warn(`${check.name}: ${check.message}`);\n break;\n case 'error':\n this.logger.error(`${check.name}: ${check.message}`);\n break;\n }\n\n if (this.verbose && check.details) {\n console.log(` ${check.details}`);\n }\n }\n\n /**\n * 输出摘要统计\n * @param summary 摘要统计\n */\n private outputSummary(summary: DoctorResult['summary']): void {\n const parts: string[] = [];\n\n if (summary.passed > 0) {\n parts.push(`${summary.passed} 项通过`);\n }\n if (summary.warnings > 0) {\n parts.push(`${summary.warnings} 项警告`);\n }\n if (summary.errors > 0) {\n parts.push(`${summary.errors} 项错误`);\n }\n\n const summaryText = `诊断结果: ${parts.join(', ')}`;\n\n if (summary.errors > 0) {\n this.logger.error(summaryText);\n } else if (summary.warnings > 0) {\n this.logger.warn(summaryText);\n } else {\n this.logger.success(summaryText);\n }\n }\n\n /**\n * 执行 doctor 命令\n * @returns 退出码 (0 表示成功,1 表示有错误)\n */\n async execute(): Promise<number> {\n try {\n const result = await this.runChecks();\n this.formatResults(result);\n\n // 如果有错误级别的问题,返回退出码 1\n if (result.summary.errors > 0) {\n return 1;\n }\n\n return 0;\n } catch (error) {\n this.logger.error(\n `诊断检查失败: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n return 1;\n }\n }\n}\n\n/**\n * 创建 Doctor 命令实例\n */\nexport function createDoctorCommand(config?: DoctorCommandConfig): DoctorCommand {\n return new DoctorCommand(config);\n}\n","/**\n * 项目验证服务\n *\n * 用于验证项目是否满足 ideal-cli 的使用条件\n */\n\nimport path from 'path';\nimport { execSync } from 'child_process';\nimport {\n pathExists,\n fileExists,\n readFile,\n isEmpty,\n} from '../utils/file-system.js';\nimport {\n detectProjectRoot,\n detectGitRepo,\n getGitBranch,\n detectIdealInitialized,\n} from '../utils/detector.js';\nimport {\n CheckResult,\n DoctorResult,\n} from '../types/doctor.js';\nimport { ProjectConfig } from '../types/config.js';\n\n/**\n * 验证器配置\n */\nexport interface ValidatorConfig {\n /** 是否启用 verbose 模式 */\n verbose?: boolean;\n /** 最低 Node.js 版本 */\n minNodeVersion?: string;\n /** 最低 Git 版本 */\n minGitVersion?: string;\n}\n\n/**\n * 版本比较结果\n */\ntype VersionComparison = 'greater' | 'equal' | 'less';\n\n/**\n * 项目验证器\n */\nexport class ProjectValidator {\n private minNodeVersion: string;\n private minGitVersion: string;\n\n constructor(config: ValidatorConfig = {}) {\n this.minNodeVersion = config.minNodeVersion ?? '18.0.0';\n this.minGitVersion = config.minGitVersion ?? '2.0.0';\n }\n\n /**\n * 比较语义化版本\n * @param v1 版本1\n * @param v2 版本2\n * @returns 比较结果\n */\n private compareVersions(v1: string, v2: string): VersionComparison {\n const parts1 = v1.split('.').map(Number);\n const parts2 = v2.split('.').map(Number);\n\n for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) {\n const p1 = parts1[i] || 0;\n const p2 = parts2[i] || 0;\n\n if (p1 > p2) return 'greater';\n if (p1 < p2) return 'less';\n }\n\n return 'equal';\n }\n\n /**\n * 获取 Node.js 版本\n * @returns Node.js 版本字符串\n */\n private getNodeVersion(): string {\n return process.versions.node;\n }\n\n /**\n * 获取 Git 版本\n * @returns Git 版本字符串,如果未安装则返回 null\n */\n private getGitVersion(): string | null {\n try {\n const output = execSync('git --version', {\n encoding: 'utf-8',\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n const match = output.match(/git version (\\d+\\.\\d+\\.\\d+)/);\n return match ? match[1] : null;\n } catch {\n return null;\n }\n }\n\n /**\n * 检查 Node.js 版本\n * @returns 检查结果\n */\n checkNodeVersion(): CheckResult {\n const currentVersion = this.getNodeVersion();\n const comparison = this.compareVersions(currentVersion, this.minNodeVersion);\n\n if (comparison === 'less') {\n return {\n name: 'Node.js 版本',\n status: 'error',\n message: `Node.js 版本过低: ${currentVersion},需要 ${this.minNodeVersion} 或更高版本`,\n details: `当前版本: ${currentVersion}\\n最低要求: ${this.minNodeVersion}`,\n };\n }\n\n return {\n name: 'Node.js 版本',\n status: 'pass',\n message: `Node.js 版本: ${currentVersion}`,\n };\n }\n\n /**\n * 检查 Git 是否安装\n * @returns 检查结果\n */\n checkGitInstalled(): CheckResult {\n const gitVersion = this.getGitVersion();\n\n if (!gitVersion) {\n return {\n name: 'Git 安装',\n status: 'error',\n message: 'Git 未安装或不在 PATH 中',\n details: '请安装 Git: https://git-scm.com/downloads',\n };\n }\n\n const comparison = this.compareVersions(gitVersion, this.minGitVersion);\n if (comparison === 'less') {\n return {\n name: 'Git 安装',\n status: 'warning',\n message: `Git 版本过低: ${gitVersion},建议升级到 ${this.minGitVersion} 或更高版本`,\n details: `当前版本: ${gitVersion}\\n建议版本: ${this.minGitVersion}`,\n };\n }\n\n return {\n name: 'Git 安装',\n status: 'pass',\n message: `Git 版本: ${gitVersion}`,\n };\n }\n\n /**\n * 检查项目目录是否有效\n * @param projectPath 项目路径\n * @returns 检查结果\n */\n async checkProjectDirectory(projectPath: string): Promise<CheckResult> {\n const projectRoot = await detectProjectRoot(projectPath);\n\n if (!projectRoot) {\n return {\n name: '项目目录',\n status: 'warning',\n message: '未检测到项目根目录',\n details: '请在项目目录中运行此命令,或使用 --path 指定项目路径',\n };\n }\n\n return {\n name: '项目目录',\n status: 'pass',\n message: `项目根目录: ${projectRoot}`,\n details: projectRoot,\n };\n }\n\n /**\n * 检查项目是否为 Git 仓库\n * @param projectRoot 项目根目录\n * @returns 检查结果\n */\n async checkGitRepository(projectRoot: string): Promise<CheckResult> {\n const isGitRepo = await detectGitRepo(projectRoot);\n\n if (!isGitRepo) {\n return {\n name: 'Git 仓库',\n status: 'warning',\n message: '当前目录不是 Git 仓库',\n details: '建议初始化 Git 仓库: git init',\n };\n }\n\n const branch = getGitBranch(projectRoot);\n return {\n name: 'Git 仓库',\n status: 'pass',\n message: `当前分支: ${branch || 'unknown'}`,\n details: `分支: ${branch || 'unknown'}`,\n };\n }\n\n /**\n * 检查项目是否为空\n * @param projectRoot 项目根目录\n * @returns 检查结果\n */\n async checkProjectEmpty(projectRoot: string): Promise<CheckResult> {\n const empty = await isEmpty(projectRoot);\n\n if (empty) {\n return {\n name: '项目状态',\n status: 'pass',\n message: '项目目录为空,可以初始化',\n };\n }\n\n return {\n name: '项目状态',\n status: 'warning',\n message: '项目目录不为空',\n details: '初始化将添加配置文件,不会覆盖现有文件',\n };\n }\n\n /**\n * 检查 ideal-cli 是否已初始化\n * @param projectRoot 项目根目录\n * @returns 检查结果\n */\n async checkIdealInitialized(projectRoot: string): Promise<CheckResult> {\n const isInitialized = await detectIdealInitialized(projectRoot);\n const idealDir = path.join(projectRoot, '.ideal');\n\n if (isInitialized) {\n return {\n name: 'ideal-cli 初始化',\n status: 'pass',\n message: 'ideal-cli 已初始化',\n details: `配置目录: ${idealDir}`,\n };\n }\n\n // 检查 .ideal 目录是否存在但配置不完整\n if (await pathExists(idealDir)) {\n return {\n name: 'ideal-cli 初始化',\n status: 'warning',\n message: 'ideal-cli 配置不完整',\n details: `.ideal 目录存在但缺少 config.json`,\n };\n }\n\n return {\n name: 'ideal-cli 初始化',\n status: 'error',\n message: 'ideal-cli 未初始化',\n details: '请运行 ideal init 命令初始化项目',\n };\n }\n\n /**\n * 检查配置文件是否有效\n * @param projectRoot 项目根目录\n * @returns 检查结果\n */\n async checkConfigValid(projectRoot: string): Promise<CheckResult> {\n const configPath = path.join(projectRoot, '.ideal', 'config.json');\n\n if (!(await fileExists(configPath))) {\n return {\n name: '配置文件',\n status: 'error',\n message: '配置文件不存在',\n details: `缺少文件: ${configPath}`,\n };\n }\n\n try {\n const content = await readFile(configPath);\n const config = JSON.parse(content) as ProjectConfig;\n\n // 验证必要字段\n const requiredFields: (keyof ProjectConfig)[] = [\n 'projectName',\n 'gitBranch',\n 'techStack',\n 'initializedAt',\n ];\n\n const missingFields = requiredFields.filter((field) => !config[field]);\n\n if (missingFields.length > 0) {\n return {\n name: '配置文件',\n status: 'warning',\n message: '配置文件缺少必要字段',\n details: `缺少字段: ${missingFields.join(', ')}`,\n };\n }\n\n return {\n name: '配置文件',\n status: 'pass',\n message: '配置文件有效',\n details: `项目名称: ${config.projectName}\\n技术栈: ${config.techStack}`,\n };\n } catch (error) {\n return {\n name: '配置文件',\n status: 'error',\n message: '配置文件格式错误',\n details: `解析错误: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n };\n }\n }\n\n /**\n * 检查 CLAUDE.md 文件是否存在\n * @param projectRoot 项目根目录\n * @returns 检查结果\n */\n async checkClaudeMd(projectRoot: string): Promise<CheckResult> {\n const claudeMdPath = path.join(projectRoot, 'CLAUDE.md');\n\n if (await fileExists(claudeMdPath)) {\n return {\n name: 'CLAUDE.md',\n status: 'pass',\n message: 'CLAUDE.md 文件存在',\n details: claudeMdPath,\n };\n }\n\n return {\n name: 'CLAUDE.md',\n status: 'warning',\n message: 'CLAUDE.md 文件不存在',\n details: '建议创建 CLAUDE.md 文件以配置 Claude Code',\n };\n }\n\n /**\n * 检查 .claude 目录结构\n * @param projectRoot 项目根目录\n * @returns 检查结果\n */\n async checkClaudeDirectory(projectRoot: string): Promise<CheckResult> {\n const claudeDir = path.join(projectRoot, '.claude');\n\n if (!(await pathExists(claudeDir))) {\n return {\n name: '.claude 目录',\n status: 'warning',\n message: '.claude 目录不存在',\n details: '目录不存在,将自动创建',\n };\n }\n\n // 检查必要的子目录\n const requiredDirs = ['agents', 'skills'];\n const missingDirs: string[] = [];\n\n for (const dir of requiredDirs) {\n if (!(await pathExists(path.join(claudeDir, dir)))) {\n missingDirs.push(dir);\n }\n }\n\n if (missingDirs.length > 0) {\n return {\n name: '.claude 目录',\n status: 'warning',\n message: '.claude 目录结构不完整',\n details: `缺少目录: ${missingDirs.join(', ')}`,\n };\n }\n\n return {\n name: '.claude 目录',\n status: 'pass',\n message: '.claude 目录结构完整',\n details: `包含: agents, skills`,\n };\n }\n\n /**\n * 运行所有检查(doctor 命令)\n * @param projectPath 项目路径\n * @returns 诊断结果\n */\n async runAllChecks(projectPath: string = process.cwd()): Promise<DoctorResult> {\n const checks: CheckResult[] = [];\n\n // 环境检查\n checks.push(this.checkNodeVersion());\n checks.push(this.checkGitInstalled());\n\n // 项目检查\n const dirCheck = await this.checkProjectDirectory(projectPath);\n checks.push(dirCheck);\n\n const projectRoot = await detectProjectRoot(projectPath) || projectPath;\n\n checks.push(await this.checkGitRepository(projectRoot));\n checks.push(await this.checkIdealInitialized(projectRoot));\n\n // 如果已初始化,检查配置\n const isInitialized = await detectIdealInitialized(projectRoot);\n if (isInitialized) {\n checks.push(await this.checkConfigValid(projectRoot));\n checks.push(await this.checkClaudeMd(projectRoot));\n checks.push(await this.checkClaudeDirectory(projectRoot));\n }\n\n // 计算统计\n const summary = {\n passed: checks.filter((c) => c.status === 'pass').length,\n warnings: checks.filter((c) => c.status === 'warning').length,\n errors: checks.filter((c) => c.status === 'error').length,\n };\n\n return { checks, summary };\n }\n\n /**\n * 验证项目是否可以初始化\n * @param projectPath 项目路径\n * @returns 验证结果\n */\n async validateForInit(projectPath: string = process.cwd()): Promise<{\n valid: boolean;\n errors: string[];\n warnings: string[];\n }> {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // 检查 Node.js 版本\n const nodeCheck = this.checkNodeVersion();\n if (nodeCheck.status === 'error') {\n errors.push(nodeCheck.message);\n }\n\n // 检查 Git\n const gitCheck = this.checkGitInstalled();\n if (gitCheck.status === 'error') {\n errors.push(gitCheck.message);\n } else if (gitCheck.status === 'warning') {\n warnings.push(gitCheck.message);\n }\n\n // 检查项目目录\n const projectRoot = await detectProjectRoot(projectPath) || projectPath;\n\n // 检查是否已初始化\n const isInitialized = await detectIdealInitialized(projectRoot);\n if (isInitialized) {\n errors.push('ideal-cli 已初始化,请使用 --force 强制重新初始化');\n }\n\n // 检查 Git 仓库\n const isGitRepo = await detectGitRepo(projectRoot);\n if (!isGitRepo) {\n warnings.push('当前目录不是 Git 仓库,建议先初始化 Git');\n }\n\n return {\n valid: errors.length === 0,\n errors,\n warnings,\n };\n }\n\n /**\n * 验证项目是否可以运行 ideal-cli 命令\n * @param projectPath 项目路径\n * @returns 验证结果\n */\n async validateForCommand(projectPath: string = process.cwd()): Promise<{\n valid: boolean;\n errors: string[];\n warnings: string[];\n }> {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // 运行所有检查\n const result = await this.runAllChecks(projectPath);\n\n // 收集错误和警告\n for (const check of result.checks) {\n if (check.status === 'error') {\n errors.push(check.message);\n } else if (check.status === 'warning') {\n warnings.push(check.message);\n }\n }\n\n // 关键检查:必须已初始化\n const projectRoot = await detectProjectRoot(projectPath) || projectPath;\n const isInitialized = await detectIdealInitialized(projectRoot);\n if (!isInitialized) {\n errors.push('ideal-cli 未初始化,请先运行 ideal init');\n }\n\n return {\n valid: errors.length === 0,\n errors,\n warnings,\n };\n }\n}\n\n/**\n * 默认验证器实例\n */\nexport const defaultValidator = new ProjectValidator();\n","/**\n * 项目检测工具\n *\n * 用于检测项目类型、技术栈、Git 状态等信息\n */\n\nimport path from 'path';\nimport { execSync } from 'child_process';\nimport {\n pathExists,\n fileExists,\n readFile,\n getProjectRoot,\n} from './file-system.js';\nimport { TechStack } from '../types/config.js';\nimport { logger } from './logger.js';\n\n/**\n * 检测到的项目信息\n */\nexport interface DetectedProjectInfo {\n /** 项目名称 */\n projectName: string;\n /** 技术栈 */\n techStack: TechStack;\n /** 是否为 Git 仓库 */\n isGitRepo: boolean;\n /** Git 分支名称 */\n gitBranch: string | null;\n /** Git 远程仓库 URL */\n gitRemoteUrl: string | null;\n /** 项目根目录 */\n projectRoot: string;\n /** 是否已初始化 ideal-cli */\n isIdealInitialized: boolean;\n /** 包管理器 */\n packageManager: 'npm' | 'yarn' | 'pnpm' | 'unknown';\n}\n\n/**\n * 技术栈检测规则\n */\ninterface TechStackRule {\n /** 技术栈名称 */\n name: TechStack;\n /** 需要存在的文件(任一匹配即可) */\n files?: string[];\n /** 需要存在的目录(任一匹配即可) */\n directories?: string[];\n /** package.json 依赖检查 */\n dependencies?: string[];\n}\n\n/**\n * 技术栈检测规则列表\n */\nconst TECH_STACK_RULES: TechStackRule[] = [\n {\n name: 'React',\n files: ['react.config.js', 'react.config.ts'],\n dependencies: ['react', 'react-dom'],\n },\n {\n name: 'Vue',\n files: ['vue.config.js', 'vue.config.ts', 'vite.config.js', 'vite.config.ts'],\n directories: ['src/views', 'src/components'],\n dependencies: ['vue'],\n },\n {\n name: 'Node.js',\n files: ['nest-cli.json', 'tsconfig.build.json'],\n directories: ['src/controllers', 'src/services', 'src/modules'],\n dependencies: ['express', 'nestjs', '@nestjs/core', 'koa', 'fastify'],\n },\n {\n name: 'Python',\n files: ['requirements.txt', 'setup.py', 'pyproject.toml', 'Pipfile'],\n directories: ['src', 'tests'],\n },\n];\n\n/**\n * 检测项目根目录\n * @param startPath 起始路径\n * @returns 项目根目录路径\n */\nexport async function detectProjectRoot(\n startPath: string = process.cwd()\n): Promise<string | null> {\n // 首先检查是否有 .ideal 目录\n const idealRoot = await getProjectRoot(startPath);\n if (idealRoot) {\n return idealRoot;\n }\n\n // 然后检查是否有 package.json(Node.js 项目)\n let currentPath = path.resolve(startPath);\n\n while (currentPath !== path.dirname(currentPath)) {\n const packageJsonPath = path.join(currentPath, 'package.json');\n if (await fileExists(packageJsonPath)) {\n return currentPath;\n }\n\n // 检查 Python 项目标记\n const requirementsPath = path.join(currentPath, 'requirements.txt');\n const pyprojectPath = path.join(currentPath, 'pyproject.toml');\n if (\n (await fileExists(requirementsPath)) ||\n (await fileExists(pyprojectPath))\n ) {\n return currentPath;\n }\n\n currentPath = path.dirname(currentPath);\n }\n\n return null;\n}\n\n/**\n * 检测技术栈\n * @param projectRoot 项目根目录\n * @returns 技术栈类型\n */\nexport async function detectTechStack(projectRoot: string): Promise<TechStack> {\n // 检查是否有 package.json\n const packageJsonPath = path.join(projectRoot, 'package.json');\n const hasPackageJson = await fileExists(packageJsonPath);\n\n if (hasPackageJson) {\n try {\n const packageJson = JSON.parse(await readFile(packageJsonPath));\n const allDeps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n // 按规则顺序检测\n for (const rule of TECH_STACK_RULES) {\n if (rule.name === 'Python') continue; // 跳过 Python,因为已有 package.json\n\n // 检查文件\n if (rule.files) {\n for (const file of rule.files) {\n if (await fileExists(path.join(projectRoot, file))) {\n return rule.name;\n }\n }\n }\n\n // 检查目录\n if (rule.directories) {\n for (const dir of rule.directories) {\n if (await pathExists(path.join(projectRoot, dir))) {\n return rule.name;\n }\n }\n }\n\n // 检查依赖\n if (rule.dependencies) {\n for (const dep of rule.dependencies) {\n if (allDeps[dep]) {\n return rule.name;\n }\n }\n }\n }\n\n // 如果有 package.json 但没有匹配到特定框架,默认为 Node.js\n return 'Node.js';\n } catch (error) {\n logger.debug(\n `Failed to parse package.json: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`\n );\n }\n }\n\n // 检查 Python 项目\n const requirementsPath = path.join(projectRoot, 'requirements.txt');\n const pyprojectPath = path.join(projectRoot, 'pyproject.toml');\n const setupPath = path.join(projectRoot, 'setup.py');\n const pipfilePath = path.join(projectRoot, 'Pipfile');\n\n if (\n (await fileExists(requirementsPath)) ||\n (await fileExists(pyprojectPath)) ||\n (await fileExists(setupPath)) ||\n (await fileExists(pipfilePath))\n ) {\n return 'Python';\n }\n\n return 'Other';\n}\n\n/**\n * 检测是否为 Git 仓库\n * @param projectRoot 项目根目录\n * @returns 如果是 Git 仓库返回 true\n */\nexport async function detectGitRepo(projectRoot: string): Promise<boolean> {\n const gitDir = path.join(projectRoot, '.git');\n return pathExists(gitDir);\n}\n\n/**\n * 获取 Git 分支名称\n * @param projectRoot 项目根目录\n * @returns 分支名称,如果不是 Git 仓库则返回 null\n */\nexport function getGitBranch(projectRoot: string): string | null {\n try {\n const branch = execSync('git rev-parse --abbrev-ref HEAD', {\n cwd: projectRoot,\n encoding: 'utf-8',\n stdio: ['pipe', 'pipe', 'pipe'],\n }).trim();\n return branch || null;\n } catch {\n return null;\n }\n}\n\n/**\n * 获取 Git 远程仓库 URL\n * @param projectRoot 项目根目录\n * @returns 远程仓库 URL,如果没有则返回 null\n */\nexport function getGitRemoteUrl(projectRoot: string): string | null {\n try {\n const url = execSync('git config --get remote.origin.url', {\n cwd: projectRoot,\n encoding: 'utf-8',\n stdio: ['pipe', 'pipe', 'pipe'],\n }).trim();\n return url || null;\n } catch {\n return null;\n }\n}\n\n/**\n * 从 Git URL 中提取项目名称\n * @param gitUrl Git URL\n * @returns 项目名称\n */\nexport function extractProjectNameFromGitUrl(gitUrl: string): string {\n // 处理 HTTPS 和 SSH 两种格式\n // https://github.com/owner/repo.git\n // git@github.com:owner/repo.git\n let projectName = gitUrl;\n\n // 移除 .git 后缀\n if (projectName.endsWith('.git')) {\n projectName = projectName.slice(0, -4);\n }\n\n // 提取最后一部分\n const parts = projectName.split('/');\n if (parts.length > 0) {\n projectName = parts[parts.length - 1];\n }\n\n // 处理 SSH 格式 (git@github.com:owner/repo)\n if (projectName.includes(':')) {\n const colonParts = projectName.split(':');\n projectName = colonParts[colonParts.length - 1];\n if (projectName.includes('/')) {\n projectName = projectName.split('/').pop() || projectName;\n }\n }\n\n return projectName;\n}\n\n/**\n * 检测包管理器\n * @param projectRoot 项目根目录\n * @returns 包管理器类型\n */\nexport async function detectPackageManager(\n projectRoot: string\n): Promise<'npm' | 'yarn' | 'pnpm' | 'unknown'> {\n // 检查锁文件\n if (await fileExists(path.join(projectRoot, 'pnpm-lock.yaml'))) {\n return 'pnpm';\n }\n if (await fileExists(path.join(projectRoot, 'yarn.lock'))) {\n return 'yarn';\n }\n if (await fileExists(path.join(projectRoot, 'package-lock.json'))) {\n return 'npm';\n }\n\n // 检查是否为 Node.js 项目但没有锁文件\n if (await fileExists(path.join(projectRoot, 'package.json'))) {\n return 'npm'; // 默认使用 npm\n }\n\n return 'unknown';\n}\n\n/**\n * 从 package.json 中获取项目名称\n * @param projectRoot 项目根目录\n * @returns 项目名称,如果没有则返回 null\n */\nexport async function getProjectNameFromPackageJson(\n projectRoot: string\n): Promise<string | null> {\n const packageJsonPath = path.join(projectRoot, 'package.json');\n if (!(await fileExists(packageJsonPath))) {\n return null;\n }\n\n try {\n const packageJson = JSON.parse(await readFile(packageJsonPath));\n return packageJson.name || null;\n } catch {\n return null;\n }\n}\n\n/**\n * 检测项目名称\n * @param projectRoot 项目根目录\n * @returns 项目名称\n */\nexport async function detectProjectName(projectRoot: string): Promise<string> {\n // 1. 从 package.json 获取\n const packageName = await getProjectNameFromPackageJson(projectRoot);\n if (packageName) {\n return packageName;\n }\n\n // 2. 从 Git URL 获取\n const gitUrl = getGitRemoteUrl(projectRoot);\n if (gitUrl) {\n return extractProjectNameFromGitUrl(gitUrl);\n }\n\n // 3. 使用目录名称\n return path.basename(projectRoot);\n}\n\n/**\n * 检测是否已初始化 ideal-cli\n * @param projectRoot 项目根目录\n * @returns 如果已初始化返回 true\n */\nexport async function detectIdealInitialized(\n projectRoot: string\n): Promise<boolean> {\n const idealDir = path.join(projectRoot, '.ideal');\n const configPath = path.join(idealDir, 'config.json');\n return fileExists(configPath);\n}\n\n/**\n * 完整检测项目信息\n * @param startPath 起始路径\n * @returns 检测到的项目信息\n */\nexport async function detectProjectInfo(\n startPath: string = process.cwd()\n): Promise<DetectedProjectInfo | null> {\n const projectRoot = await detectProjectRoot(startPath);\n if (!projectRoot) {\n return null;\n }\n\n const [techStack, isGitRepo, projectName, packageManager, isIdealInitialized] =\n await Promise.all([\n detectTechStack(projectRoot),\n detectGitRepo(projectRoot),\n detectProjectName(projectRoot),\n detectPackageManager(projectRoot),\n detectIdealInitialized(projectRoot),\n ]);\n\n const gitBranch = isGitRepo ? getGitBranch(projectRoot) : null;\n const gitRemoteUrl = isGitRepo ? getGitRemoteUrl(projectRoot) : null;\n\n return {\n projectName,\n techStack,\n isGitRepo,\n gitBranch,\n gitRemoteUrl,\n projectRoot,\n isIdealInitialized,\n packageManager,\n };\n}\n","/**\n * 日志工具\n *\n * 提供统一的日志输出接口,支持彩色输出和 verbose 模式\n */\n\nimport chalk from 'chalk';\n\n/**\n * 日志级别\n */\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'success';\n\n/**\n * Logger 配置\n */\nexport interface LoggerConfig {\n /** 是否启用 verbose 模式 */\n verbose: boolean;\n /** 是否禁用颜色 */\n noColor: boolean;\n}\n\n/**\n * 日志工具类\n */\nexport class Logger {\n private static instance: Logger;\n private verbose: boolean;\n private noColor: boolean;\n\n private constructor(config?: Partial<LoggerConfig>) {\n this.verbose = config?.verbose ?? false;\n this.noColor = config?.noColor ?? false;\n }\n\n /**\n * 获取 Logger 单例\n */\n static getInstance(config?: Partial<LoggerConfig>): Logger {\n if (!Logger.instance) {\n Logger.instance = new Logger(config);\n }\n return Logger.instance;\n }\n\n /**\n * 设置 verbose 模式\n */\n setVerbose(enabled: boolean): void {\n this.verbose = enabled;\n }\n\n /**\n * 设置是否禁用颜色\n */\n setNoColor(disabled: boolean): void {\n this.noColor = disabled;\n }\n\n /**\n * 输出调试信息(仅 verbose 模式)\n */\n debug(message: string, ...args: unknown[]): void {\n if (this.verbose) {\n const prefix = this.noColor ? '[DEBUG]' : chalk.gray('[DEBUG]');\n console.log(prefix, message, ...args);\n }\n }\n\n /**\n * 输出信息\n */\n info(message: string, ...args: unknown[]): void {\n const prefix = this.noColor ? 'ℹ' : chalk.blue('ℹ');\n console.log(prefix, message, ...args);\n }\n\n /**\n * 输出成功消息\n */\n success(message: string, ...args: unknown[]): void {\n const prefix = this.noColor ? '✓' : chalk.green('✓');\n console.log(prefix, message, ...args);\n }\n\n /**\n * 输出警告\n */\n warn(message: string, ...args: unknown[]): void {\n const prefix = this.noColor ? '⚠' : chalk.yellow('⚠');\n console.warn(prefix, message, ...args);\n }\n\n /**\n * 输出错误\n */\n error(message: string, ...args: unknown[]): void {\n const prefix = this.noColor ? '✗' : chalk.red('✗');\n console.error(prefix, message, ...args);\n }\n\n /**\n * 输出标题\n */\n title(message: string): void {\n if (this.noColor) {\n console.log(`\\n${message}\\n`);\n } else {\n console.log(`\\n${chalk.bold.cyan(message)}\\n`);\n }\n }\n\n /**\n * 输出分割线\n */\n divider(): void {\n console.log(this.noColor ? '─'.repeat(50) : chalk.gray('─'.repeat(50)));\n }\n\n /**\n * 输出空行\n */\n newline(): void {\n console.log();\n }\n\n /**\n * 清除当前行\n */\n clearLine(): void {\n process.stdout.clearLine(0);\n process.stdout.cursorTo(0);\n }\n}\n\n// 导出默认实例\nexport const logger = Logger.getInstance();\n","import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n","const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","import process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n}\n\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3,\n\t};\n}\n\nfunction _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10\n\t\t\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['GITHUB_ACTIONS', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-ghostty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'wezterm') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n","// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n","/**\n * Config 命令模块\n *\n * 提供配置查看和修改功能\n */\n\nimport path from 'path';\nimport { Command } from 'commander';\nimport { ConfigManager, CONFIG_DIR_NAME } from '../services/config-manager.js';\nimport { ProjectConfig } from '../types/config.js';\nimport { ERR_CONFIG_NOT_FOUND } from '../constants/messages.js';\nimport { pathExists } from '../utils/file-system.js';\n\n/**\n * 获取项目根目录(查找包含 .claude 目录的目录)\n * @param startPath 起始路径,默认为当前工作目录\n * @returns 项目根目录路径,如果未找到则返回 null\n */\nasync function getProjectRoot(startPath: string = process.cwd()): Promise<string | null> {\n let currentPath = path.resolve(startPath);\n\n while (currentPath !== path.dirname(currentPath)) {\n const claudePath = path.join(currentPath, CONFIG_DIR_NAME);\n if (await pathExists(claudePath)) {\n return currentPath;\n }\n currentPath = path.dirname(currentPath);\n }\n\n // 检查根目录\n const rootClaudePath = path.join(currentPath, CONFIG_DIR_NAME);\n if (await pathExists(rootClaudePath)) {\n return currentPath;\n }\n\n return null;\n}\n\n/**\n * 获取嵌套对象中的值\n * @param obj - 对象\n * @param keyPath - 键路径(如 'workflow.templateRepo')\n * @returns 值或 undefined\n */\nfunction getNestedValue(obj: Record<string, unknown>, keyPath: string): unknown {\n const keys = keyPath.split('.');\n let current: unknown = obj;\n\n for (const key of keys) {\n if (current === null || current === undefined || typeof current !== 'object') {\n return undefined;\n }\n current = (current as Record<string, unknown>)[key];\n }\n\n return current;\n}\n\n/**\n * 设置嵌套对象中的值\n * @param obj - 对象\n * @param keyPath - 键路径(如 'workflow.templateRepo')\n * @param value - 要设置的值\n */\nfunction setNestedValue(\n obj: Record<string, unknown>,\n keyPath: string,\n value: string\n): void {\n const keys = keyPath.split('.');\n let current: Record<string, unknown> = obj;\n\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i];\n if (!(key in current) || typeof current[key] !== 'object' || current[key] === null) {\n current[key] = {};\n }\n current = current[key] as Record<string, unknown>;\n }\n\n // 尝试解析值为 JSON(用于布尔值、数字等)\n let parsedValue: unknown = value;\n try {\n parsedValue = JSON.parse(value);\n } catch {\n // 保持为字符串\n }\n\n current[keys[keys.length - 1]] = parsedValue;\n}\n\n/**\n * 将配置对象展平为键值对数组\n * @param config - 配置对象\n * @param prefix - 键前缀\n * @returns 键值对数组\n */\nfunction flattenConfig(\n config: ProjectConfig,\n prefix = ''\n): Array<{ key: string; value: string }> {\n const result: Array<{ key: string; value: string }> = [];\n\n for (const [key, value] of Object.entries(config)) {\n const fullKey = prefix ? `${prefix}.${key}` : key;\n\n if (value !== null && typeof value === 'object' && !Array.isArray(value)) {\n // 递归处理嵌套对象\n result.push(...flattenConfig(value as ProjectConfig, fullKey));\n } else {\n result.push({\n key: fullKey,\n value: String(value),\n });\n }\n }\n\n return result;\n}\n\n/**\n * ConfigCommand 类\n *\n * 管理 config 命令及其子命令\n */\nexport class ConfigCommand {\n private configManager: ConfigManager;\n\n constructor() {\n this.configManager = new ConfigManager();\n }\n\n /**\n * 注册命令到 Commander 程序\n * @param program - Commander 程序实例\n */\n register(program: Command): void {\n const configCommand = program\n .command('config')\n .description('查看或修改项目配置');\n\n // list 子命令 - 显示所有配置\n configCommand\n .command('list')\n .description('显示所有配置项')\n .action(async () => {\n await this.handleList();\n });\n\n // get 子命令 - 获取指定配置\n configCommand\n .command('get <key>')\n .description('获取指定配置值')\n .action(async (key: string) => {\n await this.handleGet(key);\n });\n\n // set 子命令 - 设置配置值\n configCommand\n .command('set <key> <value>')\n .description('设置配置值')\n .action(async (key: string, value: string) => {\n await this.handleSet(key, value);\n });\n }\n\n /**\n * 处理 list 子命令\n */\n private async handleList(): Promise<void> {\n try {\n const projectRoot = await getProjectRoot();\n if (!projectRoot) {\n console.error(ERR_CONFIG_NOT_FOUND);\n process.exit(1);\n return;\n }\n const config = await this.configManager.read(projectRoot);\n const items = flattenConfig(config);\n\n // 输出表头\n console.log('');\n console.log('配置项'.padEnd(30) + '值');\n console.log('-'.repeat(50));\n\n // 输出配置项\n for (const item of items) {\n console.log(item.key.padEnd(30) + item.value);\n }\n\n console.log('');\n } catch (error) {\n if (error instanceof Error && error.message.includes('配置文件不存在')) {\n console.error(ERR_CONFIG_NOT_FOUND);\n process.exit(1);\n }\n throw error;\n }\n }\n\n /**\n * 处理 get 子命令\n * @param key - 配置键名(支持嵌套,如 workflow.templateRepo)\n */\n private async handleGet(key: string): Promise<void> {\n try {\n const projectRoot = await getProjectRoot();\n if (!projectRoot) {\n console.error(ERR_CONFIG_NOT_FOUND);\n process.exit(1);\n return;\n }\n const config = await this.configManager.read(projectRoot);\n const value = getNestedValue(config as unknown as Record<string, unknown>, key);\n\n if (value === undefined) {\n console.log(`配置项 \"${key}\" 不存在`);\n process.exit(1);\n }\n\n // 输出值(如果是对象,格式化输出)\n if (typeof value === 'object' && value !== null) {\n console.log(JSON.stringify(value, null, 2));\n } else {\n console.log(String(value));\n }\n } catch (error) {\n if (error instanceof Error && error.message.includes('配置文件不存在')) {\n console.error(ERR_CONFIG_NOT_FOUND);\n process.exit(1);\n }\n throw error;\n }\n }\n\n /**\n * 处理 set 子命令\n * @param key - 配置键名(支持嵌套,如 workflow.templateRepo)\n * @param value - 配置值\n */\n private async handleSet(key: string, value: string): Promise<void> {\n try {\n const projectRoot = await getProjectRoot();\n if (!projectRoot) {\n console.error(ERR_CONFIG_NOT_FOUND);\n process.exit(1);\n return;\n }\n const config = await this.configManager.read(projectRoot);\n\n // 转换为可变对象\n const configObj = config as unknown as Record<string, unknown>;\n setNestedValue(configObj, key, value);\n\n // 转换回 ProjectConfig 并保存\n const updatedConfig = configObj as unknown as ProjectConfig;\n await this.configManager.write(projectRoot, updatedConfig);\n\n console.log(`已更新: ${key} = ${value}`);\n } catch (error) {\n if (error instanceof Error && error.message.includes('配置文件不存在')) {\n console.error(ERR_CONFIG_NOT_FOUND);\n process.exit(1);\n }\n throw error;\n }\n }\n}\n\n/**\n * 创建并返回 ConfigCommand 实例\n */\nexport function createConfigCommand(): ConfigCommand {\n return new ConfigCommand();\n}\n","/**\n * 配置管理器\n *\n * 负责项目配置的读取、写入和校验\n */\n\nimport path from 'path';\nimport grayMatter from 'gray-matter';\nimport { ProjectConfig, TechStack } from '../types/config.js';\nimport {\n readFile,\n writeFile,\n fileExists,\n ensureDir,\n} from '../utils/file-system.js';\n\n/**\n * 配置文件名\n */\nexport const CONFIG_FILE_NAME = 'project-config.md';\n\n/**\n * 配置文件目录\n */\nexport const CONFIG_DIR_NAME = '.claude';\n\n/**\n * ConfigManager 配置选项\n */\nexport interface ConfigManagerOptions {\n /** 配置目录名,默认为 .claude */\n configDirName?: string;\n}\n\n/**\n * 配置校验结果\n */\nexport interface ValidationResult {\n /** 是否有效 */\n valid: boolean;\n /** 错误信息列表 */\n errors: string[];\n /** 警告信息列表 */\n warnings: string[];\n}\n\n/**\n * 配置管理器类\n *\n * 负责读取、写入和校验项目配置\n */\nexport class ConfigManager {\n private configDirName: string;\n\n constructor(options: ConfigManagerOptions = {}) {\n this.configDirName = options.configDirName || CONFIG_DIR_NAME;\n }\n\n /**\n * 获取配置文件路径\n * @param projectRoot 项目根目录\n * @returns 配置文件完整路径\n */\n getConfigPath(projectRoot: string): string {\n return path.join(projectRoot, this.configDirName, CONFIG_FILE_NAME);\n }\n\n /**\n * 获取配置目录路径\n * @param projectRoot 项目根目录\n * @returns 配置目录完整路径\n */\n getConfigDir(projectRoot: string): string {\n return path.join(projectRoot, this.configDirName);\n }\n\n /**\n * 检查配置文件是否存在\n * @param projectRoot 项目根目录\n * @returns 是否存在配置文件\n */\n async configExists(projectRoot: string): Promise<boolean> {\n const configPath = this.getConfigPath(projectRoot);\n return fileExists(configPath);\n }\n\n /**\n * 读取项目配置\n * @param projectRoot 项目根目录\n * @returns 项目配置对象\n * @throws 如果配置文件不存在或格式错误\n */\n async read(projectRoot: string): Promise<ProjectConfig> {\n const configPath = this.getConfigPath(projectRoot);\n\n if (!(await fileExists(configPath))) {\n throw new Error(`配置文件不存在: ${configPath}`);\n }\n\n const content = await readFile(configPath);\n\n try {\n const { data } = grayMatter(content);\n\n // 验证并转换配置\n const config = this.parseConfig(data);\n\n return config;\n } catch (error) {\n throw new Error(\n `配置文件解析失败: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n\n /**\n * 写入项目配置\n * @param projectRoot 项目根目录\n * @param config 项目配置对象\n */\n async write(projectRoot: string, config: ProjectConfig): Promise<void> {\n const configDir = this.getConfigDir(projectRoot);\n const configPath = this.getConfigPath(projectRoot);\n\n // 确保目录存在\n await ensureDir(configDir);\n\n // 生成配置内容\n const content = this.generateConfigContent(config);\n\n await writeFile(configPath, content);\n }\n\n /**\n * 校验配置\n * @param config 项目配置对象\n * @returns 校验结果\n */\n validate(config: unknown): ValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // 检查是否为对象\n if (!config || typeof config !== 'object') {\n return {\n valid: false,\n errors: ['配置必须是一个对象'],\n warnings: [],\n };\n }\n\n const cfg = config as Record<string, unknown>;\n\n // 必填字段检查\n const requiredFields: (keyof ProjectConfig)[] = [\n 'projectName',\n 'gitBranch',\n 'techStack',\n ];\n\n for (const field of requiredFields) {\n if (!cfg[field]) {\n errors.push(`缺少必填字段: ${field}`);\n }\n }\n\n // 校验 projectName\n if (cfg.projectName !== undefined && typeof cfg.projectName !== 'string') {\n errors.push('projectName 必须是字符串');\n }\n\n // 校验 gitBranch\n if (cfg.gitBranch !== undefined && typeof cfg.gitBranch !== 'string') {\n errors.push('gitBranch 必须是字符串');\n }\n\n // 校验 techStack\n const validTechStacks: TechStack[] = [\n 'React',\n 'Vue',\n 'Node.js',\n 'Python',\n 'Other',\n ];\n if (\n cfg.techStack !== undefined &&\n !validTechStacks.includes(cfg.techStack as TechStack)\n ) {\n errors.push(\n `techStack 必须是以下值之一: ${validTechStacks.join(', ')}`\n );\n }\n\n // 校验 workflow\n if (cfg.workflow !== undefined) {\n if (typeof cfg.workflow !== 'object') {\n errors.push('workflow 必须是一个对象');\n } else {\n const workflow = cfg.workflow as Record<string, unknown>;\n if (workflow.templateRepo !== undefined && typeof workflow.templateRepo !== 'string') {\n errors.push('workflow.templateRepo 必须是字符串');\n }\n if (workflow.templateBranch !== undefined && typeof workflow.templateBranch !== 'string') {\n errors.push('workflow.templateBranch 必须是字符串');\n }\n if (workflow.lastUpdated !== undefined && typeof workflow.lastUpdated !== 'string') {\n errors.push('workflow.lastUpdated 必须是字符串');\n }\n }\n } else {\n warnings.push('建议配置 workflow 字段');\n }\n\n // 校验 initializedAt\n if (\n cfg.initializedAt !== undefined &&\n typeof cfg.initializedAt !== 'string'\n ) {\n errors.push('initializedAt 必须是字符串');\n } else if (cfg.initializedAt === undefined) {\n warnings.push('建议配置 initializedAt 字段');\n }\n\n return {\n valid: errors.length === 0,\n errors,\n warnings,\n };\n }\n\n /**\n * 创建默认配置\n * @param projectName 项目名称\n * @param options 可选配置项\n * @returns 默认配置对象\n */\n createDefaultConfig(\n projectName: string,\n options: {\n gitBranch?: string;\n techStack?: TechStack;\n templateRepo?: string;\n templateBranch?: string;\n } = {}\n ): ProjectConfig {\n const now = new Date().toISOString();\n\n return {\n projectName,\n gitBranch: options.gitBranch || 'main',\n techStack: options.techStack || 'Other',\n workflow: {\n templateRepo: options.templateRepo || 'ideal-lab/best-practices',\n templateBranch: options.templateBranch || 'main',\n lastUpdated: now,\n },\n initializedAt: now,\n };\n }\n\n /**\n * 更新配置中的工作流信息\n * @param projectRoot 项目根目录\n * @param updates 要更新的字段\n */\n async updateWorkflow(\n projectRoot: string,\n updates: Partial<ProjectConfig['workflow']>\n ): Promise<void> {\n const config = await this.read(projectRoot);\n config.workflow = {\n ...config.workflow,\n ...updates,\n };\n await this.write(projectRoot, config);\n }\n\n /**\n * 解析配置数据\n * @param data 原始配置数据\n * @returns 项目配置对象\n */\n private parseConfig(data: Record<string, unknown>): ProjectConfig {\n // 确保必要字段存在\n const config: ProjectConfig = {\n projectName: String(data.projectName || ''),\n gitBranch: String(data.gitBranch || 'main'),\n techStack: (data.techStack as TechStack) || 'Other',\n workflow: {\n templateRepo: String(\n (data.workflow as Record<string, unknown>)?.templateRepo ||\n 'ideal-lab/best-practices'\n ),\n templateBranch: String(\n (data.workflow as Record<string, unknown>)?.templateBranch || 'main'\n ),\n lastUpdated: String(\n (data.workflow as Record<string, unknown>)?.lastUpdated ||\n new Date().toISOString()\n ),\n },\n initializedAt: String(\n data.initializedAt || new Date().toISOString()\n ),\n };\n\n return config;\n }\n\n /**\n * 生成配置文件内容\n * @param config 项目配置对象\n * @returns 配置文件内容\n */\n private generateConfigContent(config: ProjectConfig): string {\n // 准备 YAML frontmatter 数据\n const frontmatterData: Record<string, unknown> = {\n projectName: config.projectName,\n gitBranch: config.gitBranch,\n techStack: config.techStack,\n workflow: config.workflow,\n initializedAt: config.initializedAt,\n };\n\n // 使用 gray-matter 生成带 frontmatter 的内容\n const frontmatterContent = grayMatter.stringify('', frontmatterData);\n\n // 添加说明注释(放在 frontmatter 之后)\n const body = `\n\n# 项目配置文件\n\n此文件存储项目的配置信息,由 ideal-cli 自动管理。\n请勿手动修改 YAML frontmatter 中的配置。\n`;\n\n return frontmatterContent.trimEnd() + body;\n }\n}\n","/**\n * Update 命令模块\n *\n * 提供工作流模板更新功能\n */\n\nimport path from 'path';\nimport os from 'os';\nimport { Command } from 'commander';\nimport readline from 'readline';\nimport { ConfigManager, CONFIG_DIR_NAME } from '../services/config-manager.js';\nimport { TemplateManager, TemplateVariables } from '../services/template-manager.js';\nimport { DiffManager, LocalFileInfo } from '../services/diff-manager.js';\nimport { ProjectConfig } from '../types/config.js';\nimport { DiffResult } from '../types/metadata.js';\nimport { TemplateFile } from '../types/template.js';\nimport {\n ERR_CONFIG_NOT_FOUND,\n MSG_UPDATE_SUCCESS,\n INFO_CHECKING,\n INFO_UPDATING,\n WARN_CONFLICT_DETECTED,\n WARN_FILE_MODIFIED,\n} from '../constants/messages.js';\nimport { pathExists, ensureDir, copyDir, writeFile, readFile } from '../utils/file-system.js';\nimport { logger } from '../utils/logger.js';\n\n/**\n * 冲突处理策略\n */\ntype ConflictStrategy = 'keep' | 'overwrite' | 'abort';\n\n/**\n * 冲突决策\n */\ninterface ConflictDecision {\n filePath: string;\n strategy: ConflictStrategy;\n}\n\n/**\n * 更新结果\n */\ninterface UpdateResult {\n success: boolean;\n updatedFiles: string[];\n skippedFiles: string[];\n backupPath?: string;\n error?: string;\n}\n\n/**\n * 获取项目根目录(查找包含 .claude 目录的目录)\n * @param startPath 起始路径,默认为当前工作目录\n * @returns 项目根目录路径,如果未找到则返回 null\n */\nasync function getProjectRoot(startPath: string = process.cwd()): Promise<string | null> {\n let currentPath = path.resolve(startPath);\n\n while (currentPath !== path.dirname(currentPath)) {\n const claudePath = path.join(currentPath, CONFIG_DIR_NAME);\n if (await pathExists(claudePath)) {\n return currentPath;\n }\n currentPath = path.dirname(currentPath);\n }\n\n // 检查根目录\n const rootClaudePath = path.join(currentPath, CONFIG_DIR_NAME);\n if (await pathExists(rootClaudePath)) {\n return currentPath;\n }\n\n return null;\n}\n\n/**\n * UpdateCommand 类\n *\n * 管理 update 命令及其功能\n */\nexport class UpdateCommand {\n private configManager: ConfigManager;\n private diffManager: DiffManager;\n private verbose: boolean;\n private force: boolean;\n\n constructor(options: { verbose?: boolean; force?: boolean } = {}) {\n this.configManager = new ConfigManager();\n this.diffManager = new DiffManager();\n this.verbose = options.verbose ?? false;\n this.force = options.force ?? false;\n }\n\n /**\n * 注册命令到 Commander 程序\n * @param program - Commander 程序实例\n */\n register(program: Command): void {\n program\n .command('update')\n .description('更新工作流模板到最新版本')\n .option('-v, --verbose', '显示详细输出')\n .option('-f, --force', '强制更新,跳过冲突检查')\n .action(async (options: { verbose?: boolean; force?: boolean }) => {\n const command = new UpdateCommand({\n verbose: options.verbose,\n force: options.force,\n });\n const exitCode = await command.execute();\n process.exit(exitCode);\n });\n }\n\n /**\n * 执行更新命令\n * @returns 退出码(0 表示成功)\n */\n async execute(): Promise<number> {\n try {\n // 1. 检查项目是否已初始化\n const projectRoot = await getProjectRoot();\n if (!projectRoot) {\n console.error(ERR_CONFIG_NOT_FOUND);\n return 1;\n }\n\n // 2. 读取当前配置\n const config = await this.configManager.read(projectRoot);\n\n // 3. 检查更新\n console.log(INFO_CHECKING);\n const updateInfo = await this.checkForUpdates(config);\n\n if (!updateInfo.hasUpdate) {\n console.log('已是最新版本,无需更新');\n return 0;\n }\n\n console.log(`发现新版本: ${updateInfo.currentVersion} -> ${updateInfo.remoteVersion}`);\n\n if (updateInfo.changelog) {\n console.log('\\n更新内容:');\n console.log(updateInfo.changelog);\n }\n\n // 4. 检测文件变化\n console.log('\\n正在检测文件变化...');\n const diffResult = await this.detectChanges(projectRoot, config);\n\n // 显示变化摘要\n this.displayDiffSummary(diffResult);\n\n // 5. 处理冲突\n let decisions: ConflictDecision[] = [];\n if (diffResult.conflictCount > 0 || diffResult.modifiedCount > 0) {\n if (this.force) {\n console.log('\\n使用 --force 参数,将覆盖所有本地修改');\n } else {\n decisions = await this.handleConflicts(diffResult);\n if (decisions.some(d => d.strategy === 'abort')) {\n console.log('更新已取消');\n return 0;\n }\n }\n }\n\n // 6. 执行更新\n console.log(INFO_UPDATING);\n const result = await this.executeUpdate(projectRoot, config, diffResult, decisions);\n\n if (result.success) {\n console.log(MSG_UPDATE_SUCCESS);\n console.log(`已更新 ${result.updatedFiles.length} 个文件`);\n if (result.skippedFiles.length > 0) {\n console.log(`跳过 ${result.skippedFiles.length} 个文件(保留本地修改)`);\n }\n if (result.backupPath) {\n console.log(`备份已保存到: ${result.backupPath}`);\n }\n return 0;\n } else {\n console.error(`更新失败: ${result.error}`);\n return 1;\n }\n } catch (error) {\n console.error(\n `更新过程中发生错误: ${error instanceof Error ? error.message : String(error)}`\n );\n return 1;\n }\n }\n\n /**\n * 检查是否有更新\n * @param config 项目配置\n * @returns 更新信息\n */\n private async checkForUpdates(config: ProjectConfig): Promise<{\n hasUpdate: boolean;\n currentVersion: string;\n remoteVersion: string;\n changelog?: string;\n }> {\n const currentVersion = config.workflow.lastUpdated;\n\n try {\n // 获取远程版本信息\n const templateRepo = config.workflow.templateRepo;\n const templateBranch = config.workflow.templateBranch;\n\n // 创建新的 TemplateManager 使用配置中的仓库\n const tm = new TemplateManager({\n repoOwner: templateRepo,\n branch: templateBranch,\n verbose: this.verbose,\n });\n\n const remoteMeta = await tm.getTemplateVersion();\n\n // 比较版本(使用日期或版本号)\n const hasUpdate = remoteMeta.releasedAt > currentVersion;\n\n return {\n hasUpdate,\n currentVersion,\n remoteVersion: remoteMeta.version,\n changelog: remoteMeta.changelog,\n };\n } catch (error) {\n if (this.verbose) {\n logger.debug(`检查更新失败: ${error instanceof Error ? error.message : String(error)}`);\n }\n // 无法获取远程版本,假设无更新\n return {\n hasUpdate: false,\n currentVersion,\n remoteVersion: currentVersion,\n };\n }\n }\n\n /**\n * 检测文件变化\n * @param projectRoot 项目根目录\n * @param config 项目配置\n * @returns 差异比较结果\n */\n private async detectChanges(\n projectRoot: string,\n config: ProjectConfig\n ): Promise<DiffResult> {\n // 读取本地元数据\n const metadata = await this.diffManager.readMetadata(projectRoot);\n if (!metadata) {\n // 没有元数据,需要重新扫描\n return this.scanAndCompare(projectRoot, config);\n }\n\n // 获取远程文件列表\n const templateRepo = config.workflow.templateRepo;\n const templateBranch = config.workflow.templateBranch;\n\n const tm = new TemplateManager({\n repoOwner: templateRepo,\n branch: templateBranch,\n verbose: this.verbose,\n });\n\n // 确保模板已缓存\n await tm.fetchTemplate(true);\n\n // 获取缓存的文件列表\n const cachedFiles = await tm.getCachedFiles();\n const cachePath = tm.getCachePath();\n\n // 构建远程文件信息\n const remoteFiles: TemplateFile[] = [];\n for (const filePath of cachedFiles) {\n const relativePath = path.relative(cachePath, filePath);\n const content = await readFile(filePath);\n const { createHash } = await import('crypto');\n const hash = createHash('md5').update(content).digest('hex');\n const stats = await (await import('fs-extra')).stat(filePath);\n\n remoteFiles.push({\n path: relativePath,\n hash,\n size: stats.size,\n type: tm.getFileType(relativePath),\n });\n }\n\n // 扫描本地 .claude 目录下的文件\n const localFiles = await this.scanLocalClaudeFiles(projectRoot);\n\n // 使用 DiffManager 比较\n return this.diffManager.compare(localFiles, remoteFiles, metadata);\n }\n\n /**\n * 扫描并比较(无元数据时)\n */\n private async scanAndCompare(\n projectRoot: string,\n config: ProjectConfig\n ): Promise<DiffResult> {\n const localFiles = await this.scanLocalClaudeFiles(projectRoot);\n\n // 获取远程文件列表\n const templateRepo = config.workflow.templateRepo;\n const templateBranch = config.workflow.templateBranch;\n\n const tm = new TemplateManager({\n repoOwner: templateRepo,\n branch: templateBranch,\n verbose: this.verbose,\n });\n\n await tm.fetchTemplate(true);\n const cachedFiles = await tm.getCachedFiles();\n const cachePath = tm.getCachePath();\n\n const remoteFiles: TemplateFile[] = [];\n for (const filePath of cachedFiles) {\n const relativePath = path.relative(cachePath, filePath);\n const content = await readFile(filePath);\n const { createHash } = await import('crypto');\n const hash = createHash('md5').update(content).digest('hex');\n const stats = await (await import('fs-extra')).stat(filePath);\n\n remoteFiles.push({\n path: relativePath,\n hash,\n size: stats.size,\n type: tm.getFileType(relativePath),\n });\n }\n\n // 创建临时元数据\n const tempMetadata = this.diffManager.createInitialMetadata('0.0.0');\n\n return this.diffManager.compare(localFiles, remoteFiles, tempMetadata);\n }\n\n /**\n * 扫描本地 .claude 目录文件\n */\n private async scanLocalClaudeFiles(projectRoot: string): Promise<LocalFileInfo[]> {\n const claudeDir = path.join(projectRoot, CONFIG_DIR_NAME);\n const files: LocalFileInfo[] = [];\n\n if (!(await pathExists(claudeDir))) {\n return files;\n }\n\n const { walkDir, calculateFileHash } = await import('../utils/file-system.js');\n const fse = await import('fs-extra');\n\n const filePaths = await walkDir(claudeDir, {\n filter: (filePath) => {\n // 排除元数据文件和备份目录\n const relativePath = path.relative(claudeDir, filePath);\n return (\n !relativePath.startsWith('.backup') &&\n !relativePath.endsWith('.metadata.json')\n );\n },\n });\n\n for (const filePath of filePaths) {\n const relativePath = path.relative(projectRoot, filePath);\n const hash = await calculateFileHash(filePath);\n const stats = await fse.stat(filePath);\n\n files.push({\n path: relativePath,\n hash,\n size: stats.size,\n });\n }\n\n return files;\n }\n\n /**\n * 显示差异摘要\n */\n private displayDiffSummary(diffResult: DiffResult): void {\n console.log('\\n文件变化摘要:');\n console.log(` - 未修改: ${diffResult.unchangedCount}`);\n console.log(` - 本地修改: ${diffResult.modifiedCount}`);\n console.log(` - 远程新增: ${diffResult.remoteNewCount}`);\n console.log(` - 冲突: ${diffResult.conflictCount}`);\n\n if (diffResult.modifiedCount > 0 || diffResult.conflictCount > 0) {\n console.log(`\\n${WARN_FILE_MODIFIED}`);\n }\n\n if (diffResult.conflictCount > 0) {\n console.log(`\\n${WARN_CONFLICT_DETECTED}`);\n console.log('冲突文件:');\n for (const diff of diffResult.diffs) {\n if (diff.status === 'conflict') {\n console.log(` - ${diff.path}`);\n }\n }\n }\n }\n\n /**\n * 处理冲突(交互式)\n * @param diffResult 差异结果\n * @returns 冲突决策列表\n */\n private async handleConflicts(diffResult: DiffResult): Promise<ConflictDecision[]> {\n const decisions: ConflictDecision[] = [];\n const conflictFiles = diffResult.diffs.filter(\n d => d.status === 'conflict' || d.status === 'modified'\n );\n\n if (conflictFiles.length === 0) {\n return decisions;\n }\n\n console.log('\\n请为以下文件选择处理策略:');\n console.log(' k - 保留本地修改 (keep)');\n console.log(' o - 覆盖为远程版本 (overwrite)');\n console.log(' a - 取消更新 (abort)');\n console.log('');\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n for (const file of conflictFiles) {\n const statusLabel = file.status === 'conflict' ? '[冲突]' : '[本地修改]';\n const answer = await this.promptUser(\n rl,\n `${statusLabel} ${file.path} [k/o/a]: `\n );\n\n const choice = answer.toLowerCase().trim();\n let strategy: ConflictStrategy;\n\n switch (choice) {\n case 'k':\n strategy = 'keep';\n break;\n case 'o':\n strategy = 'overwrite';\n break;\n case 'a':\n strategy = 'abort';\n break;\n default:\n // 默认保留本地\n strategy = 'keep';\n }\n\n decisions.push({\n filePath: file.path,\n strategy,\n });\n\n if (strategy === 'abort') {\n break;\n }\n }\n\n rl.close();\n return decisions;\n }\n\n /**\n * 用户输入提示\n */\n private promptUser(rl: readline.Interface, question: string): Promise<string> {\n return new Promise((resolve) => {\n rl.question(question, resolve);\n });\n }\n\n /**\n * 执行更新\n * @param projectRoot 项目根目录\n * @param config 项目配置\n * @param diffResult 差异结果\n * @param decisions 冲突决策\n * @returns 更新结果\n */\n private async executeUpdate(\n projectRoot: string,\n config: ProjectConfig,\n diffResult: DiffResult,\n decisions: ConflictDecision[]\n ): Promise<UpdateResult> {\n const result: UpdateResult = {\n success: false,\n updatedFiles: [],\n skippedFiles: [],\n };\n\n try {\n // 1. 创建备份\n result.backupPath = await this.createBackup(projectRoot);\n\n // 2. 获取远程模板\n const templateRepo = config.workflow.templateRepo;\n const templateBranch = config.workflow.templateBranch;\n\n const tm = new TemplateManager({\n repoOwner: templateRepo,\n branch: templateBranch,\n verbose: this.verbose,\n });\n\n // 确保模板已缓存\n await tm.fetchTemplate(true);\n const cachePath = tm.getCachePath();\n\n // 3. 应用更新\n const decisionMap = new Map<string, ConflictStrategy>();\n for (const decision of decisions) {\n decisionMap.set(decision.filePath, decision.strategy);\n }\n\n // 准备模板变量\n const variables: TemplateVariables = {\n projectName: config.projectName,\n gitBranch: config.gitBranch,\n techStack: config.techStack,\n initializedAt: config.initializedAt,\n };\n\n // 处理每个文件\n for (const diff of diffResult.diffs) {\n const strategy = decisionMap.get(diff.path);\n\n // 跳过用户选择保留的文件\n if (strategy === 'keep') {\n result.skippedFiles.push(diff.path);\n continue;\n }\n\n // 处理远程新增和未修改的文件\n if (diff.status === 'remote-new' || diff.status === 'unchanged') {\n const sourcePath = path.join(cachePath, diff.path);\n const targetPath = path.join(projectRoot, diff.path);\n\n // 读取并渲染模板\n const content = await readFile(sourcePath);\n const renderedContent = content.replace(/\\{\\{projectName\\}\\}/g, variables.projectName || '')\n .replace(/\\{\\{gitBranch\\}\\}/g, variables.gitBranch || '')\n .replace(/\\{\\{techStack\\}\\}/g, variables.techStack || '');\n\n await ensureDir(path.dirname(targetPath));\n await writeFile(targetPath, renderedContent);\n result.updatedFiles.push(diff.path);\n }\n\n // 处理冲突和本地修改的文件(如果用户选择覆盖)\n if (\n (diff.status === 'conflict' || diff.status === 'modified') &&\n strategy === 'overwrite'\n ) {\n const sourcePath = path.join(cachePath, diff.path);\n const targetPath = path.join(projectRoot, diff.path);\n\n const content = await readFile(sourcePath);\n const renderedContent = content.replace(/\\{\\{projectName\\}\\}/g, variables.projectName || '')\n .replace(/\\{\\{gitBranch\\}\\}/g, variables.gitBranch || '')\n .replace(/\\{\\{techStack\\}\\}/g, variables.techStack || '');\n\n await ensureDir(path.dirname(targetPath));\n await writeFile(targetPath, renderedContent);\n result.updatedFiles.push(diff.path);\n }\n }\n\n // 4. 更新元数据\n await this.updateMetadata(projectRoot, result.updatedFiles, config);\n\n // 5. 更新配置中的最后更新时间\n await this.configManager.updateWorkflow(projectRoot, {\n lastUpdated: new Date().toISOString(),\n });\n\n result.success = true;\n } catch (error) {\n result.error = error instanceof Error ? error.message : String(error);\n }\n\n return result;\n }\n\n /**\n * 创建备份\n */\n private async createBackup(projectRoot: string): Promise<string> {\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n const backupDir = path.join(\n os.homedir(),\n '.ideal-cli',\n 'backups',\n path.basename(projectRoot),\n timestamp\n );\n\n const claudeDir = path.join(projectRoot, CONFIG_DIR_NAME);\n\n if (await pathExists(claudeDir)) {\n await copyDir(claudeDir, backupDir);\n }\n\n return backupDir;\n }\n\n /**\n * 更新元数据\n */\n private async updateMetadata(\n projectRoot: string,\n updatedFiles: string[],\n config: ProjectConfig\n ): Promise<void> {\n let metadata = await this.diffManager.readMetadata(projectRoot);\n\n if (!metadata) {\n metadata = this.diffManager.createInitialMetadata(config.workflow.lastUpdated);\n }\n\n // 更新已更新文件的元数据\n for (const filePath of updatedFiles) {\n const fullPath = path.join(projectRoot, filePath);\n if (await pathExists(fullPath)) {\n const { calculateFileHash } = await import('../utils/file-system.js');\n const fse = await import('fs-extra');\n const hash = await calculateFileHash(fullPath);\n const stats = await fse.stat(fullPath);\n\n metadata.files[filePath] = {\n originalHash: hash,\n remoteVersion: config.workflow.lastUpdated,\n lastSyncedAt: new Date().toISOString(),\n size: stats.size,\n };\n }\n }\n\n metadata.lastUpdatedAt = new Date().toISOString();\n await this.diffManager.writeMetadata(projectRoot, metadata);\n }\n}\n\n/**\n * 创建并返回 UpdateCommand 实例\n */\nexport function createUpdateCommand(): UpdateCommand {\n return new UpdateCommand();\n}\n","/**\n * 模板管理器\n *\n * 负责从 GitHub 拉取模板、缓存管理、变量替换\n */\n\nimport os from 'os';\nimport path from 'path';\nimport { GitHubClient } from '../clients/github-client.js';\nimport { logger } from '../utils/logger.js';\nimport {\n ensureDir,\n writeFile,\n readFile,\n pathExists,\n remove,\n walkDir,\n renderTemplate,\n fileExists,\n ensureFileDir,\n} from '../utils/file-system.js';\nimport {\n TemplateMeta,\n TemplateFileType,\n} from '../types/template.js';\nimport {\n DEFAULT_REPO_OWNER,\n DEFAULT_REPO_NAME,\n DEFAULT_TEMPLATE_PATH,\n DEFAULT_BRANCH,\n} from '../constants/defaults.js';\n\n/**\n * 模板管理器配置\n */\nexport interface TemplateManagerConfig {\n /** GitHub 客户端实例 */\n githubClient?: GitHubClient;\n /** 模板仓库所有者 */\n repoOwner?: string;\n /** 模板路径 */\n templatePath?: string;\n /** Git 分支 */\n branch?: string;\n /** 缓存目录路径 */\n cacheDir?: string;\n /** 是否启用 verbose 日志 */\n verbose?: boolean;\n}\n\n/**\n * 模板变量\n */\nexport interface TemplateVariables {\n /** 项目名称 */\n projectName: string;\n /** 项目描述 */\n projectDescription?: string;\n /** Git 分支 */\n gitBranch?: string;\n /** 技术栈 */\n techStack?: string;\n /** 作者 */\n author?: string;\n /** 初始化日期 */\n initializedAt?: string;\n /** 自定义变量 */\n [key: string]: string | undefined;\n}\n\n/**\n * 模板管理器\n *\n * 提供模板拉取、缓存、应用等功能\n */\nexport class TemplateManager {\n private githubClient: GitHubClient;\n private repoOwner: string;\n private templatePath: string;\n private branch: string;\n private cacheDir: string;\n private verbose: boolean;\n\n constructor(config: TemplateManagerConfig = {}) {\n this.githubClient = config.githubClient ?? new GitHubClient();\n this.repoOwner = config.repoOwner ?? `${DEFAULT_REPO_OWNER}/${DEFAULT_REPO_NAME}`;\n this.templatePath = config.templatePath ?? DEFAULT_TEMPLATE_PATH;\n this.branch = config.branch ?? DEFAULT_BRANCH;\n this.verbose = config.verbose ?? false;\n\n // 缓存目录默认在用户主目录下\n this.cacheDir =\n config.cacheDir ?? path.join(os.homedir(), '.ideal-cli', 'cache');\n }\n\n /**\n * 获取缓存路径\n * @returns 缓存目录路径\n */\n getCachePath(): string {\n return this.cacheDir;\n }\n\n /**\n * 获取模板缓存路径\n * @returns 模板缓存目录路径\n */\n private getTemplateCachePath(): string {\n return path.join(this.cacheDir, this.repoOwner, this.templatePath);\n }\n\n /**\n * 获取版本缓存文件路径\n * @returns 版本文件路径\n */\n private getVersionCachePath(): string {\n return path.join(this.cacheDir, 'version.json');\n }\n\n /**\n * 从 GitHub 拉取模板并缓存\n * @param force 是否强制刷新缓存\n * @returns 下载的文件数量\n */\n async fetchTemplate(force: boolean = false): Promise<number> {\n if (this.verbose) {\n logger.debug(`Fetching template from ${this.repoOwner}/${this.templatePath}`);\n }\n\n // 检查缓存是否存在\n const cachePath = this.getTemplateCachePath();\n const cacheExists = await pathExists(cachePath);\n\n if (cacheExists && !force) {\n if (this.verbose) {\n logger.debug('Using cached template');\n }\n // 返回缓存中的文件数量\n const files = await walkDir(cachePath);\n return files.length;\n }\n\n // 清理旧缓存\n if (cacheExists) {\n await remove(cachePath);\n }\n\n // 确保缓存目录存在\n await ensureDir(cachePath);\n\n // 递归获取所有文件\n const files = await this.githubClient.fetchDirectory(\n this.repoOwner,\n this.templatePath,\n '',\n this.branch\n );\n\n if (files.length === 0) {\n logger.warn(`No files found in ${this.repoOwner}/${this.templatePath}`);\n return 0;\n }\n\n // 下载并缓存每个文件\n let downloaded = 0;\n for (const file of files) {\n if (file.type === 'file') {\n try {\n const content = await this.githubClient.getFileContent(\n this.repoOwner,\n this.templatePath,\n file.path,\n this.branch\n );\n\n // 计算相对路径(移除模板路径前缀)\n const relativePath = file.path;\n const targetPath = path.join(cachePath, relativePath);\n\n // 确保目录存在并写入文件\n await ensureFileDir(targetPath);\n await writeFile(targetPath, content);\n\n downloaded++;\n if (this.verbose) {\n logger.debug(`Downloaded: ${relativePath}`);\n }\n } catch (error) {\n logger.warn(\n `Failed to download ${file.path}: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`\n );\n }\n }\n }\n\n // 缓存版本信息\n await this.cacheVersionInfo();\n\n logger.success(`Downloaded ${downloaded} template files`);\n return downloaded;\n }\n\n /**\n * 缓存版本信息\n */\n private async cacheVersionInfo(): Promise<void> {\n try {\n const versionInfo = await this.getTemplateVersion();\n const versionPath = this.getVersionCachePath();\n await ensureFileDir(versionPath);\n await writeFile(versionPath, JSON.stringify(versionInfo, null, 2));\n } catch (error) {\n // 版本信息获取失败不是致命错误\n if (this.verbose) {\n logger.debug(\n `Failed to cache version info: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`\n );\n }\n }\n }\n\n /**\n * 获取远程模板版本信息\n * @returns 版本信息\n */\n async getTemplateVersion(): Promise<TemplateMeta> {\n return this.githubClient.getVersion(\n this.repoOwner,\n this.templatePath,\n 'version.json',\n this.branch\n );\n }\n\n /**\n * 获取本地缓存的版本信息\n * @returns 版本信息,如果不存在则返回 null\n */\n async getCachedVersion(): Promise<TemplateMeta | null> {\n const versionPath = this.getVersionCachePath();\n if (!(await fileExists(versionPath))) {\n return null;\n }\n\n try {\n const content = await readFile(versionPath);\n return JSON.parse(content) as TemplateMeta;\n } catch {\n return null;\n }\n }\n\n /**\n * 检查是否有新版本\n * @returns 如果有新版本返回 true\n */\n async hasUpdate(): Promise<boolean> {\n const cachedVersion = await this.getCachedVersion();\n if (!cachedVersion) {\n return true;\n }\n\n try {\n const remoteVersion = await this.getTemplateVersion();\n return cachedVersion.version !== remoteVersion.version;\n } catch {\n // 无法获取远程版本,假设无更新\n return false;\n }\n }\n\n /**\n * 应用模板到目标目录\n * @param targetDir 目标目录\n * @param variables 模板变量\n * @returns 创建的文件数量\n */\n async applyTemplate(\n targetDir: string,\n variables: TemplateVariables\n ): Promise<number> {\n const cachePath = this.getTemplateCachePath();\n\n // 确保模板已缓存\n if (!(await pathExists(cachePath))) {\n await this.fetchTemplate();\n }\n\n // 确保目标目录存在\n await ensureDir(targetDir);\n\n // 获取所有缓存文件\n const files = await walkDir(cachePath);\n let processed = 0;\n\n for (const filePath of files) {\n const relativePath = path.relative(cachePath, filePath);\n const targetPath = path.join(targetDir, relativePath);\n\n // 读取文件内容\n const content = await readFile(filePath);\n\n // 应用变量替换\n const processedContent = renderTemplate(content, variables);\n\n // 确保目标目录存在并写入文件\n await ensureFileDir(targetPath);\n await writeFile(targetPath, processedContent);\n\n processed++;\n if (this.verbose) {\n logger.debug(`Processed: ${relativePath}`);\n }\n }\n\n logger.success(`Applied template to ${targetDir} (${processed} files)`);\n return processed;\n }\n\n /**\n * 应用模板(使用自定义过滤)\n * @param targetDir 目标目录\n * @param variables 模板变量\n * @param filter 过滤函数,返回 true 则处理该文件\n * @returns 创建的文件数量\n */\n async applyTemplateWithFilter(\n targetDir: string,\n variables: TemplateVariables,\n filter: (filePath: string) => boolean\n ): Promise<number> {\n const cachePath = this.getTemplateCachePath();\n\n // 确保模板已缓存\n if (!(await pathExists(cachePath))) {\n await this.fetchTemplate();\n }\n\n // 确保目标目录存在\n await ensureDir(targetDir);\n\n // 获取所有缓存文件\n const files = await walkDir(cachePath, { filter });\n let processed = 0;\n\n for (const filePath of files) {\n const relativePath = path.relative(cachePath, filePath);\n const targetPath = path.join(targetDir, relativePath);\n\n // 读取文件内容\n const content = await readFile(filePath);\n\n // 应用变量替换\n const processedContent = renderTemplate(content, variables);\n\n // 确保目标目录存在并写入文件\n await ensureFileDir(targetPath);\n await writeFile(targetPath, processedContent);\n\n processed++;\n if (this.verbose) {\n logger.debug(`Processed: ${relativePath}`);\n }\n }\n\n logger.success(`Applied template to ${targetDir} (${processed} files)`);\n return processed;\n }\n\n /**\n * 清除缓存\n */\n async clearCache(): Promise<void> {\n const cachePath = this.getCachePath();\n if (await pathExists(cachePath)) {\n await remove(cachePath);\n logger.success('Template cache cleared');\n }\n }\n\n /**\n * 检查模板是否已缓存\n * @returns 如果已缓存返回 true\n */\n async isCached(): Promise<boolean> {\n const cachePath = this.getTemplateCachePath();\n return pathExists(cachePath);\n }\n\n /**\n * 获取缓存的文件列表\n * @returns 文件路径数组\n */\n async getCachedFiles(): Promise<string[]> {\n const cachePath = this.getTemplateCachePath();\n if (!(await pathExists(cachePath))) {\n return [];\n }\n return walkDir(cachePath);\n }\n\n /**\n * 根据文件路径确定文件类型\n * @param filePath 文件路径\n * @returns 文件类型\n */\n getFileType(filePath: string): TemplateFileType {\n // Normalize path separators for cross-platform compatibility\n const normalizedPath = filePath.replace(/\\\\/g, '/');\n\n if (normalizedPath.includes('/agents/') || normalizedPath.startsWith('agents/')) {\n return 'agent';\n }\n if (normalizedPath.includes('/skills/') || normalizedPath.startsWith('skills/')) {\n return 'skill';\n }\n if (\n filePath.endsWith('.config.md') ||\n filePath.includes('/config/') ||\n filePath === 'CLAUDE.md'\n ) {\n return 'config';\n }\n if (\n filePath.endsWith('.sh') ||\n filePath.endsWith('.ps1') ||\n filePath.includes('/scripts/')\n ) {\n return 'script';\n }\n return 'config'; // 默认类型\n }\n}\n\n/**\n * 默认模板管理器实例\n */\nexport const defaultTemplateManager = new TemplateManager();\n","/**\n * GitHub API 客户端\n *\n * 用于与 GitHub API 交互,获取仓库内容和文件\n */\n\nimport { AxiosInstance } from 'axios';\nimport {\n createHttpClient,\n get,\n withRetry,\n NetworkError,\n} from '../utils/http.js';\nimport { logger } from '../utils/logger.js';\nimport { TemplateMeta } from '../types/template.js';\n\n/**\n * GitHub API 基础 URL\n */\nconst GITHUB_API_BASE_URL = 'https://api.github.com';\n\n/**\n * GitHub 文件信息(来自 API 响应)\n */\nexport interface GitHubFile {\n /** 文件名 */\n name: string;\n /** 文件路径 */\n path: string;\n /** 文件 SHA */\n sha: string;\n /** 文件大小(字节) */\n size: number;\n /** 文件 URL */\n url: string;\n /** 文件内容 URL(用于获取原始内容) */\n download_url: string | null;\n /** 文件类型:file 或 dir */\n type: 'file' | 'dir' | 'symlink' | 'submodule';\n /** 文件内容(Base64 编码,仅在获取单个文件时有值) */\n content?: string;\n /** 内容编码 */\n encoding?: string;\n}\n\n/**\n * GitHub API 响应的目录内容(数组)\n */\nexport type GitHubDirectoryContent = GitHubFile[];\n\n/**\n * GitHub API 响应的单个文件内容\n */\nexport interface GitHubFileContent extends GitHubFile {\n content: string;\n encoding: string;\n}\n\n/**\n * GitHubClient 配置\n */\nexport interface GitHubClientConfig {\n /** GitHub API 基础 URL,默认为 https://api.github.com */\n baseURL?: string;\n /** 请求超时时间(毫秒) */\n timeout?: number;\n /** GitHub Token(可选,用于提高速率限制) */\n token?: string;\n /** 是否启用 verbose 日志 */\n verbose?: boolean;\n}\n\n/**\n * GitHub API 客户端\n *\n * 提供与 GitHub API 交互的方法,用于获取仓库内容和文件\n */\nexport class GitHubClient {\n private client: AxiosInstance;\n private verbose: boolean;\n\n constructor(config: GitHubClientConfig = {}) {\n const {\n baseURL = GITHUB_API_BASE_URL,\n timeout,\n token,\n verbose = false,\n } = config;\n\n this.verbose = verbose;\n this.client = createHttpClient({\n baseURL,\n timeout,\n verbose,\n headers: {\n Accept: 'application/vnd.github.v3+json',\n ...(token ? { Authorization: `Bearer ${token}` } : {}),\n },\n });\n }\n\n /**\n * 获取仓库目录内容\n * @param owner 仓库所有者\n * @param repo 仓库名称\n * @param path 目录路径\n * @param ref Git 引用(分支、标签或提交 SHA)\n * @returns 目录内容数组\n */\n async getContents(\n owner: string,\n repo: string,\n path: string = '',\n ref?: string\n ): Promise<GitHubDirectoryContent> {\n let url = `/repos/${owner}/${repo}/contents/${path}`;\n if (ref) {\n url += `?ref=${encodeURIComponent(ref)}`;\n }\n\n if (this.verbose) {\n logger.debug(`Fetching contents: ${url}`);\n }\n\n try {\n return await withRetry(\n () => get<GitHubDirectoryContent>(this.client, url),\n 3,\n 1000\n );\n } catch (error) {\n if (error instanceof NetworkError) {\n logger.error(`Failed to fetch contents from ${url}: ${error.message}`);\n }\n throw error;\n }\n }\n\n /**\n * 获取单个文件内容\n * @param owner 仓库所有者\n * @param repo 仓库名称\n * @param path 文件路径\n * @param ref Git 引用\n * @returns 文件内容(已解码)\n */\n async getFileContent(\n owner: string,\n repo: string,\n path: string,\n ref?: string\n ): Promise<string> {\n let url = `/repos/${owner}/${repo}/contents/${path}`;\n if (ref) {\n url += `?ref=${encodeURIComponent(ref)}`;\n }\n\n if (this.verbose) {\n logger.debug(`Fetching file: ${url}`);\n }\n\n try {\n const response = await withRetry(\n () => get<GitHubFileContent>(this.client, url),\n 3,\n 1000\n );\n\n // 解码 Base64 内容\n if (response.content && response.encoding === 'base64') {\n const content = Buffer.from(response.content, 'base64').toString(\n 'utf-8'\n );\n return content;\n }\n\n throw new Error(\n `Unexpected response: content or encoding missing for ${path}`\n );\n } catch (error) {\n if (error instanceof NetworkError) {\n logger.error(`Failed to fetch file ${path}: ${error.message}`);\n }\n throw error;\n }\n }\n\n /**\n * 通过 download_url 获取文件内容\n * @param downloadUrl 文件下载 URL\n * @returns 文件内容\n */\n async getFileByUrl(downloadUrl: string): Promise<string> {\n if (this.verbose) {\n logger.debug(`Fetching file by URL: ${downloadUrl}`);\n }\n\n try {\n const response = await this.client.get(downloadUrl, {\n responseType: 'text',\n });\n return response.data;\n } catch (error) {\n if (error instanceof NetworkError) {\n logger.error(\n `Failed to fetch file from ${downloadUrl}: ${error.message}`\n );\n }\n throw error;\n }\n }\n\n /**\n * 获取版本信息文件\n * @param owner 仓库所有者\n * @param repo 仓库名称\n * @param path version.json 文件路径\n * @param ref Git 引用\n * @returns 版本信息\n */\n async getVersion(\n owner: string,\n repo: string,\n path: string = 'version.json',\n ref?: string\n ): Promise<TemplateMeta> {\n const content = await this.getFileContent(owner, repo, path, ref);\n\n try {\n return JSON.parse(content) as TemplateMeta;\n } catch (error) {\n throw new Error(\n `Failed to parse version.json: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`\n );\n }\n }\n\n /**\n * 递归获取目录树\n * @param owner 仓库所有者\n * @param repo 仓库名称\n * @param path 目录路径\n * @param ref Git 引用\n * @returns 所有文件的数组\n */\n async fetchDirectory(\n owner: string,\n repo: string,\n path: string = '',\n ref?: string\n ): Promise<GitHubFile[]> {\n const results: GitHubFile[] = [];\n\n const fetchRecursive = async (currentPath: string): Promise<void> => {\n const contents = await this.getContents(owner, repo, currentPath, ref);\n\n for (const item of contents) {\n if (item.type === 'file') {\n results.push(item);\n } else if (item.type === 'dir') {\n await fetchRecursive(item.path);\n }\n // 忽略 symlink 和 submodule 类型\n }\n };\n\n await fetchRecursive(path);\n return results;\n }\n\n /**\n * 检查仓库是否存在\n * @param owner 仓库所有者\n * @param repo 仓库名称\n * @returns 如果仓库存在返回 true\n */\n async repoExists(owner: string, repo: string): Promise<boolean> {\n try {\n await this.getContents(owner, repo, '');\n return true;\n } catch (error) {\n if (error instanceof NetworkError && error.statusCode === 404) {\n return false;\n }\n throw error;\n }\n }\n\n /**\n * 检查路径是否存在\n * @param owner 仓库所有者\n * @param repo 仓库名称\n * @param path 路径\n * @param ref Git 引用\n * @returns 如果路径存在返回 true\n */\n async pathExists(\n owner: string,\n repo: string,\n path: string,\n ref?: string\n ): Promise<boolean> {\n try {\n await this.getContents(owner, repo, path, ref);\n return true;\n } catch (error) {\n if (error instanceof NetworkError && error.statusCode === 404) {\n return false;\n }\n throw error;\n }\n }\n}\n\n/**\n * 默认 GitHub 客户端实例\n */\nexport const defaultGitHubClient = new GitHubClient();\n","/**\n * HTTP 客户端工具\n *\n * 基于 axios 封装的 HTTP 客户端,支持代理、超时、错误处理\n */\n\nimport axios, {\n AxiosInstance,\n AxiosRequestConfig,\n AxiosResponse,\n AxiosError,\n InternalAxiosRequestConfig,\n} from 'axios';\n\n/**\n * HTTP 客户端配置\n */\nexport interface HttpClientConfig {\n /** 基础 URL */\n baseURL?: string;\n /** 超时时间(毫秒),默认 30000 */\n timeout?: number;\n /** 请求头 */\n headers?: Record<string, string>;\n /** 是否启用代理,默认 true */\n enableProxy?: boolean;\n /** 是否启用 verbose 日志 */\n verbose?: boolean;\n}\n\n/**\n * 网络错误\n */\nexport class NetworkError extends Error {\n constructor(\n message: string,\n public readonly code?: string,\n public readonly statusCode?: number,\n public readonly responseData?: unknown\n ) {\n super(message);\n this.name = 'NetworkError';\n }\n}\n\n/**\n * 默认超时时间(30秒)\n */\nconst DEFAULT_TIMEOUT = 30000;\n\n/**\n * 创建 HTTP 客户端实例\n * @param config 客户端配置\n * @returns Axios 实例\n */\nexport function createHttpClient(config: HttpClientConfig = {}): AxiosInstance {\n const {\n baseURL,\n timeout = DEFAULT_TIMEOUT,\n headers = {},\n enableProxy = true,\n verbose = false,\n } = config;\n\n const instance = axios.create({\n baseURL,\n timeout,\n headers: {\n 'User-Agent': 'ideal-cli/1.0.0',\n ...headers,\n },\n });\n\n // 配置代理\n if (enableProxy) {\n configureProxy(instance);\n }\n\n // 请求拦截器\n instance.interceptors.request.use(\n (config: InternalAxiosRequestConfig) => {\n if (verbose) {\n console.log(`[HTTP] ${config.method?.toUpperCase()} ${config.url}`);\n }\n return config;\n },\n (error: Error) => {\n return Promise.reject(error);\n }\n );\n\n // 响应拦截器\n instance.interceptors.response.use(\n (response: AxiosResponse) => {\n if (verbose) {\n console.log(\n `[HTTP] Response ${response.status} ${response.config.url}`\n );\n }\n return response;\n },\n (error: AxiosError) => {\n return Promise.reject(handleAxiosError(error));\n }\n );\n\n return instance;\n}\n\n/**\n * 配置代理\n * @param instance Axios 实例\n */\nfunction configureProxy(instance: AxiosInstance): void {\n const httpProxy = process.env.HTTP_PROXY || process.env.http_proxy;\n const httpsProxy = process.env.HTTPS_PROXY || process.env.https_proxy;\n\n if (httpProxy || httpsProxy) {\n instance.defaults.proxy = {\n host: '',\n port: 0,\n };\n\n // 根据协议选择代理\n if (httpsProxy) {\n const url = new URL(httpsProxy);\n instance.defaults.proxy = {\n host: url.hostname,\n port: parseInt(url.port, 10) || 443,\n protocol: url.protocol.replace(':', '') as 'http' | 'https',\n };\n }\n\n if (httpProxy) {\n const url = new URL(httpProxy);\n // 仅用于 http 请求\n instance.interceptors.request.use((config) => {\n if (config.url?.startsWith('http://')) {\n config.proxy = {\n host: url.hostname,\n port: parseInt(url.port, 10) || 80,\n protocol: 'http',\n };\n }\n return config;\n });\n }\n }\n}\n\n/**\n * 处理 Axios 错误\n * @param error Axios 错误对象\n * @returns 网络错误对象\n */\nfunction handleAxiosError(error: AxiosError): NetworkError {\n // 请求已发出但服务器响应状态码超出 2xx 范围\n if (error.response) {\n const { status, data } = error.response;\n let message = `请求失败,状态码: ${status}`;\n\n // 尝试从响应中提取错误信息\n if (data && typeof data === 'object' && 'message' in data) {\n message = (data as { message: string }).message;\n } else if (typeof data === 'string') {\n message = data.substring(0, 200); // 限制消息长度\n }\n\n return new NetworkError(message, 'RESPONSE_ERROR', status, data);\n }\n\n // 请求已发出但没有收到响应\n if (error.request) {\n return new NetworkError(\n '无法连接到服务器,请检查网络连接',\n 'NO_RESPONSE'\n );\n }\n\n // 请求配置错误\n if (error.code === 'ECONNABORTED') {\n return new NetworkError(\n `请求超时,请稍后重试(超时时间: ${error.config?.timeout || DEFAULT_TIMEOUT}ms)`,\n 'TIMEOUT'\n );\n }\n\n // 其他错误\n return new NetworkError(\n error.message || '未知网络错误',\n error.code || 'UNKNOWN'\n );\n}\n\n/**\n * GET 请求\n * @param client Axios 实例\n * @param url 请求 URL\n * @param config 请求配置\n * @returns 响应数据\n */\nexport async function get<T = unknown>(\n client: AxiosInstance,\n url: string,\n config?: AxiosRequestConfig\n): Promise<T> {\n const response = await client.get<T>(url, config);\n return response.data;\n}\n\n/**\n * POST 请求\n * @param client Axios 实例\n * @param url 请求 URL\n * @param data 请求数据\n * @param config 请求配置\n * @returns 响应数据\n */\nexport async function post<T = unknown>(\n client: AxiosInstance,\n url: string,\n data?: unknown,\n config?: AxiosRequestConfig\n): Promise<T> {\n const response = await client.post<T>(url, data, config);\n return response.data;\n}\n\n/**\n * 下载文件内容\n * @param client Axios 实例\n * @param url 文件 URL\n * @returns 文件内容\n */\nexport async function downloadFile(\n client: AxiosInstance,\n url: string\n): Promise<string> {\n const response = await client.get(url, {\n responseType: 'text',\n });\n return response.data;\n}\n\n/**\n * 下载 JSON 数据\n * @param client Axios 实例\n * @param url JSON URL\n * @returns JSON 数据\n */\nexport async function downloadJson<T = unknown>(\n client: AxiosInstance,\n url: string\n): Promise<T> {\n const response = await client.get<T>(url, {\n responseType: 'json',\n });\n return response.data;\n}\n\n/**\n * 检查 URL 是否可访问\n * @param client Axios 实例\n * @param url 要检查的 URL\n * @param timeout 超时时间(毫秒)\n * @returns 如果可访问返回 true\n */\nexport async function checkUrlAccessible(\n client: AxiosInstance,\n url: string,\n timeout: number = 5000\n): Promise<boolean> {\n try {\n await client.head(url, { timeout });\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * 带重试的请求\n * @param requestFn 请求函数\n * @param maxRetries 最大重试次数,默认 3\n * @param retryDelay 重试延迟(毫秒),默认 1000\n * @returns 响应数据\n */\nexport async function withRetry<T>(\n requestFn: () => Promise<T>,\n maxRetries: number = 3,\n retryDelay: number = 1000\n): Promise<T> {\n let lastError: Error | undefined;\n\n for (let attempt = 1; attempt <= maxRetries; attempt++) {\n try {\n return await requestFn();\n } catch (error) {\n lastError = error as Error;\n\n // 如果是 4xx 错误,不重试\n if (error instanceof NetworkError && error.statusCode) {\n if (error.statusCode >= 400 && error.statusCode < 500) {\n throw error;\n }\n }\n\n // 最后一次尝试不等待\n if (attempt < maxRetries) {\n await sleep(retryDelay * attempt); // 指数退避\n }\n }\n }\n\n throw lastError;\n}\n\n/**\n * 休眠\n * @param ms 毫秒数\n */\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * 默认 HTTP 客户端\n */\nexport const defaultHttpClient = createHttpClient();\n","/**\n * 默认值常量\n */\n\n/**\n * 默认 GitHub 仓库所有者\n */\nexport const DEFAULT_REPO_OWNER = 'MTleen';\n\n/**\n * 默认 GitHub 仓库名称\n */\nexport const DEFAULT_REPO_NAME = 'ideal-lab';\n\n/**\n * 默认 Git 分支\n */\nexport const DEFAULT_BRANCH = 'main';\n\n/**\n * 默认模板路径\n */\nexport const DEFAULT_TEMPLATE_PATH = 'best-practices/dev-workflow';\n\n/**\n * 完整模板仓库 URL\n */\nexport const TEMPLATE_REPO_URL = `https://github.com/${DEFAULT_REPO_OWNER}/${DEFAULT_REPO_NAME}`;\n\n/**\n * GitHub API 内容 URL\n */\nexport const GITHUB_API_CONTENTS_URL = `https://api.github.com/repos/${DEFAULT_REPO_OWNER}/${DEFAULT_REPO_NAME}/contents`;\n\n/**\n * 默认项目配置\n */\nexport const DEFAULT_PROJECT_CONFIG = {\n projectName: '',\n gitBranch: DEFAULT_BRANCH,\n techStack: 'Node.js' as const,\n workflow: {\n templateRepo: `${DEFAULT_REPO_OWNER}/${DEFAULT_REPO_NAME}`,\n templateBranch: DEFAULT_BRANCH,\n lastUpdated: '',\n },\n initializedAt: '',\n};\n\n/**\n * 支持的技术栈列表\n */\nexport const TECH_STACKS = ['React', 'Vue', 'Node.js', 'Python', 'Other'] as const;\n\n/**\n * 必需目录列表\n */\nexport const REQUIRED_DIRS = [\n '.claude',\n '.claude/agents',\n '.claude/skills',\n 'docs',\n 'docs/迭代',\n 'docs/Wiki',\n];\n\n/**\n * 必需文件列表\n */\nexport const REQUIRED_FILES = [\n 'CLAUDE.md',\n '.claude/project-config.md',\n];\n\n/**\n * CLI 版本\n */\nexport const CLI_VERSION = '1.0.0';\n\n/**\n * CLI 名称\n */\nexport const CLI_NAME = 'ideal-cli';\n","/**\n * 差异管理器\n *\n * 负责检测本地文件与远程模板之间的差异\n */\n\nimport path from 'path';\nimport {\n ProjectMetadata,\n FileMetadata,\n FileDiff,\n DiffResult,\n} from '../types/metadata.js';\nimport { TemplateFile } from '../types/template.js';\nimport {\n readFile,\n writeFile,\n fileExists,\n pathExists,\n calculateFileHash,\n walkDir,\n ensureDir,\n} from '../utils/file-system.js';\n\n/**\n * 元数据文件名\n */\nexport const METADATA_FILE_NAME = '.metadata.json';\n\n/**\n * 元数据目录名\n */\nexport const METADATA_DIR_NAME = '.claude';\n\n/**\n * 当前元数据格式版本\n */\nexport const METADATA_VERSION = '1.0.0';\n\n/**\n * DiffManager 配置选项\n */\nexport interface DiffManagerOptions {\n /** 元数据目录名,默认为 .claude */\n metadataDirName?: string;\n}\n\n/**\n * 本地文件信息(用于差异比较)\n */\nexport interface LocalFileInfo {\n /** 文件路径 */\n path: string;\n /** 文件哈希 */\n hash: string;\n /** 文件大小 */\n size: number;\n}\n\n/**\n * 差异管理器类\n *\n * 负责管理文件差异检测和元数据存储\n */\nexport class DiffManager {\n private metadataDirName: string;\n\n constructor(options: DiffManagerOptions = {}) {\n this.metadataDirName = options.metadataDirName || METADATA_DIR_NAME;\n }\n\n /**\n * 获取元数据文件路径\n * @param projectRoot 项目根目录\n * @returns 元数据文件完整路径\n */\n getMetadataPath(projectRoot: string): string {\n return path.join(projectRoot, this.metadataDirName, METADATA_FILE_NAME);\n }\n\n /**\n * 读取项目元数据\n * @param projectRoot 项目根目录\n * @returns 项目元数据对象,如果不存在则返回 null\n */\n async readMetadata(projectRoot: string): Promise<ProjectMetadata | null> {\n const metadataPath = this.getMetadataPath(projectRoot);\n\n if (!(await fileExists(metadataPath))) {\n return null;\n }\n\n try {\n const content = await readFile(metadataPath);\n const metadata = JSON.parse(content) as ProjectMetadata;\n return metadata;\n } catch (error) {\n throw new Error(\n `元数据文件解析失败: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n\n /**\n * 写入项目元数据\n * @param projectRoot 项目根目录\n * @param metadata 项目元数据对象\n */\n async writeMetadata(\n projectRoot: string,\n metadata: ProjectMetadata\n ): Promise<void> {\n const metadataPath = this.getMetadataPath(projectRoot);\n // 确保目录存在\n await ensureDir(path.dirname(metadataPath));\n const content = JSON.stringify(metadata, null, 2);\n await writeFile(metadataPath, content);\n }\n\n /**\n * 创建初始元数据\n * @param templateVersion 模板版本\n * @returns 初始元数据对象\n */\n createInitialMetadata(templateVersion: string): ProjectMetadata {\n return {\n version: METADATA_VERSION,\n initializedAt: new Date().toISOString(),\n templateVersion,\n files: {},\n lastUpdatedAt: new Date().toISOString(),\n };\n }\n\n /**\n * 添加或更新文件元数据\n * @param projectRoot 项目根目录\n * @param filePath 文件路径(相对路径)\n * @param fileMetadata 文件元数据\n */\n async updateFileMetadata(\n projectRoot: string,\n filePath: string,\n fileMetadata: FileMetadata\n ): Promise<void> {\n const metadata = await this.readMetadata(projectRoot);\n\n if (!metadata) {\n throw new Error('元数据不存在,请先初始化项目');\n }\n\n // 规范化路径(确保使用一致的路径格式)\n const normalizedPath = this.normalizePath(filePath);\n metadata.files[normalizedPath] = fileMetadata;\n metadata.lastUpdatedAt = new Date().toISOString();\n\n await this.writeMetadata(projectRoot, metadata);\n }\n\n /**\n * 对比本地和远程文件\n * @param localFiles 本地文件列表\n * @param remoteFiles 远程文件列表\n * @param metadata 项目元数据\n * @returns 差异比较结果\n */\n async compare(\n localFiles: LocalFileInfo[],\n remoteFiles: TemplateFile[],\n metadata: ProjectMetadata\n ): Promise<DiffResult> {\n const diffs: FileDiff[] = [];\n const processedPaths = new Set<string>();\n\n // 创建本地文件映射\n const localFileMap = new Map<string, LocalFileInfo>();\n for (const file of localFiles) {\n localFileMap.set(this.normalizePath(file.path), file);\n }\n\n // 创建远程文件映射\n const remoteFileMap = new Map<string, TemplateFile>();\n for (const file of remoteFiles) {\n remoteFileMap.set(this.normalizePath(file.path), file);\n }\n\n // 检查所有本地文件\n for (const [normalizedPath, localFile] of localFileMap) {\n processedPaths.add(normalizedPath);\n\n const remoteFile = remoteFileMap.get(normalizedPath);\n const fileMetadata = metadata.files[normalizedPath];\n\n const diff = this.compareFile(\n normalizedPath,\n localFile,\n remoteFile,\n fileMetadata\n );\n diffs.push(diff);\n }\n\n // 检查远程新增的文件(本地不存在)\n for (const [normalizedPath, remoteFile] of remoteFileMap) {\n if (!processedPaths.has(normalizedPath)) {\n // 检查是否在元数据中(可能是用户删除的)\n const fileMetadata = metadata.files[normalizedPath];\n\n if (fileMetadata) {\n // 本地不存在但元数据中有,说明用户删除了\n diffs.push({\n path: normalizedPath,\n status: 'deleted',\n originalHash: fileMetadata.originalHash,\n remoteHash: remoteFile.hash,\n remoteVersion: remoteFile.version || metadata.templateVersion,\n });\n } else {\n // 本地和元数据都没有,是远程新增\n diffs.push({\n path: normalizedPath,\n status: 'remote-new',\n remoteHash: remoteFile.hash,\n remoteVersion: remoteFile.version || metadata.templateVersion,\n });\n }\n }\n }\n\n // 检查用户删除的文件(元数据中有但本地和远程都没有)\n for (const normalizedPath of Object.keys(metadata.files)) {\n if (\n !localFileMap.has(normalizedPath) &&\n !remoteFileMap.has(normalizedPath)\n ) {\n // 文件既不在本地也不在远程,可能是远程已删除的文件\n // 这里不标记为 deleted,因为远程也没有\n }\n }\n\n // 统计各种状态的文件数量\n const result = this.calculateDiffResult(diffs);\n return result;\n }\n\n /**\n * 判断用户是否修改了文件\n * @param filePath 文件路径\n * @param metadata 项目元数据\n * @returns 如果用户修改了文件返回 true\n */\n async isUserModified(\n projectRoot: string,\n filePath: string,\n metadata: ProjectMetadata\n ): Promise<boolean> {\n const normalizedPath = this.normalizePath(filePath);\n const fileMetadata = metadata.files[normalizedPath];\n\n if (!fileMetadata) {\n // 没有元数据,无法判断,假设用户添加的文件\n return true;\n }\n\n // 计算当前文件哈希\n const fullPath = path.join(projectRoot, filePath);\n if (!(await fileExists(fullPath))) {\n // 文件不存在,不算修改\n return false;\n }\n\n const currentHash = await calculateFileHash(fullPath);\n return currentHash !== fileMetadata.originalHash;\n }\n\n /**\n * 获取所有用户修改的文件\n * @param projectRoot 项目根目录\n * @param metadata 项目元数据\n * @returns 用户修改的文件路径列表\n */\n async getUserModifiedFiles(\n projectRoot: string,\n metadata: ProjectMetadata\n ): Promise<string[]> {\n const modifiedFiles: string[] = [];\n\n for (const filePath of Object.keys(metadata.files)) {\n if (await this.isUserModified(projectRoot, filePath, metadata)) {\n modifiedFiles.push(filePath);\n }\n }\n\n return modifiedFiles;\n }\n\n /**\n * 扫描本地文件\n * @param projectRoot 项目根目录\n * @param targetDir 目标目录(相对于项目根目录)\n * @param filter 过滤函数\n * @returns 本地文件信息列表\n */\n async scanLocalFiles(\n projectRoot: string,\n targetDir: string,\n filter?: (filePath: string) => boolean | Promise<boolean>\n ): Promise<LocalFileInfo[]> {\n const fullDir = path.join(projectRoot, targetDir);\n const files: LocalFileInfo[] = [];\n\n if (!(await pathExists(fullDir))) {\n return files;\n }\n\n const filePaths = await walkDir(fullDir, {\n filter: filter\n ? async (filePath, _stats) => {\n const relativePath = path.relative(fullDir, filePath);\n return filter(relativePath);\n }\n : undefined,\n });\n\n for (const filePath of filePaths) {\n const relativePath = path.relative(projectRoot, filePath);\n const hash = await calculateFileHash(filePath);\n const stats = await (await import('fs-extra')).stat(filePath);\n\n files.push({\n path: relativePath,\n hash,\n size: stats.size,\n });\n }\n\n return files;\n }\n\n /**\n * 更新元数据中的文件记录\n * @param projectRoot 项目根目录\n * @param files 文件列表\n * @param templateVersion 模板版本\n */\n async syncMetadata(\n projectRoot: string,\n files: LocalFileInfo[],\n templateVersion: string\n ): Promise<void> {\n let metadata = await this.readMetadata(projectRoot);\n\n if (!metadata) {\n metadata = this.createInitialMetadata(templateVersion);\n }\n\n // 更新所有文件的元数据\n for (const file of files) {\n const normalizedPath = this.normalizePath(file.path);\n metadata.files[normalizedPath] = {\n originalHash: file.hash,\n remoteVersion: templateVersion,\n lastSyncedAt: new Date().toISOString(),\n size: file.size,\n };\n }\n\n metadata.templateVersion = templateVersion;\n metadata.lastUpdatedAt = new Date().toISOString();\n\n await this.writeMetadata(projectRoot, metadata);\n }\n\n /**\n * 比较单个文件\n */\n private compareFile(\n normalizedPath: string,\n localFile: LocalFileInfo,\n remoteFile?: TemplateFile,\n fileMetadata?: FileMetadata\n ): FileDiff {\n // 如果没有元数据,说明是新增文件\n if (!fileMetadata) {\n if (remoteFile) {\n // 有远程文件但没有元数据,可能是用户手动添加的同名文件\n return {\n path: normalizedPath,\n status: localFile.hash === remoteFile.hash ? 'unchanged' : 'added',\n localHash: localFile.hash,\n remoteHash: remoteFile.hash,\n remoteVersion: remoteFile.version,\n };\n }\n return {\n path: normalizedPath,\n status: 'added',\n localHash: localFile.hash,\n };\n }\n\n // 有元数据,比较哈希\n const isUserModified = localFile.hash !== fileMetadata.originalHash;\n\n if (!remoteFile) {\n // 远程没有此文件\n return {\n path: normalizedPath,\n status: isUserModified ? 'modified' : 'unchanged',\n localHash: localFile.hash,\n originalHash: fileMetadata.originalHash,\n localVersion: fileMetadata.remoteVersion,\n };\n }\n\n // 有远程文件\n const isRemoteChanged = remoteFile.hash !== fileMetadata.originalHash;\n\n if (!isUserModified && !isRemoteChanged) {\n // 都没变\n return {\n path: normalizedPath,\n status: 'unchanged',\n localHash: localFile.hash,\n remoteHash: remoteFile.hash,\n originalHash: fileMetadata.originalHash,\n localVersion: fileMetadata.remoteVersion,\n remoteVersion: remoteFile.version || fileMetadata.remoteVersion,\n };\n }\n\n if (isUserModified && isRemoteChanged) {\n // 用户修改了,远程也改了,冲突\n return {\n path: normalizedPath,\n status: 'conflict',\n localHash: localFile.hash,\n remoteHash: remoteFile.hash,\n originalHash: fileMetadata.originalHash,\n localVersion: fileMetadata.remoteVersion,\n remoteVersion: remoteFile.version || fileMetadata.remoteVersion,\n };\n }\n\n if (isUserModified) {\n // 只有用户修改了\n return {\n path: normalizedPath,\n status: 'modified',\n localHash: localFile.hash,\n remoteHash: remoteFile.hash,\n originalHash: fileMetadata.originalHash,\n localVersion: fileMetadata.remoteVersion,\n remoteVersion: remoteFile.version || fileMetadata.remoteVersion,\n };\n }\n\n // 只有远程改了\n return {\n path: normalizedPath,\n status: 'unchanged', // 本地未修改,可以安全更新\n localHash: localFile.hash,\n remoteHash: remoteFile.hash,\n originalHash: fileMetadata.originalHash,\n localVersion: fileMetadata.remoteVersion,\n remoteVersion: remoteFile.version || fileMetadata.remoteVersion,\n };\n }\n\n /**\n * 计算差异统计结果\n */\n private calculateDiffResult(diffs: FileDiff[]): DiffResult {\n let unchangedCount = 0;\n let modifiedCount = 0;\n let addedCount = 0;\n let deletedCount = 0;\n let remoteNewCount = 0;\n let conflictCount = 0;\n\n for (const diff of diffs) {\n switch (diff.status) {\n case 'unchanged':\n unchangedCount++;\n break;\n case 'modified':\n modifiedCount++;\n break;\n case 'added':\n addedCount++;\n break;\n case 'deleted':\n deletedCount++;\n break;\n case 'remote-new':\n remoteNewCount++;\n break;\n case 'conflict':\n conflictCount++;\n break;\n }\n }\n\n const hasChanges =\n modifiedCount > 0 ||\n addedCount > 0 ||\n deletedCount > 0 ||\n remoteNewCount > 0 ||\n conflictCount > 0;\n\n return {\n hasChanges,\n unchangedCount,\n modifiedCount,\n addedCount,\n deletedCount,\n remoteNewCount,\n conflictCount,\n diffs,\n };\n }\n\n /**\n * 规范化路径(统一使用 / 分隔符)\n */\n private normalizePath(filePath: string): string {\n return filePath.replace(/\\\\/g, '/');\n }\n}\n","/**\n * 类型定义导出\n */\n\nexport * from './config.js';\nexport * from './template.js';\nexport * from './doctor.js';\nexport * from './metadata.js';\n","/**\n * 技术栈类型\n */\nexport type TechStack = 'React' | 'Vue' | 'Node.js' | 'Python' | 'Other';\n\n/**\n * 项目配置\n */\nexport interface ProjectConfig {\n /** 项目名称 */\n projectName: string;\n /** Git 主分支名称 */\n gitBranch: string;\n /** 技术栈类型 */\n techStack: TechStack;\n /** 工作流配置 */\n workflow: {\n /** 模板仓库 */\n templateRepo: string;\n /** 模板分支 */\n templateBranch: string;\n /** 最后更新时间 */\n lastUpdated: string;\n };\n /** 初始化时间 */\n initializedAt: string;\n}\n","/**\n * 模板文件类型\n */\nexport type TemplateFileType = 'agent' | 'skill' | 'config' | 'script';\n\n/**\n * 模板文件信息\n */\nexport interface TemplateFile {\n /** 相对于项目根目录的路径 */\n path: string;\n /** MD5 哈希值 */\n hash: string;\n /** 文件大小(字节) */\n size: number;\n /** 文件类型 */\n type: TemplateFileType;\n /** 文件版本(可选) */\n version?: string;\n}\n\n/**\n * 模板版本信息\n */\nexport interface TemplateMeta {\n /** 语义化版本号 */\n version: string;\n /** 发布日期 */\n releasedAt: string;\n /** 版本变更说明 */\n changelog?: string;\n /** 最低兼容 CLI 版本 */\n minCliVersion: string;\n /** 文件清单 */\n files?: TemplateFile[];\n}\n\n/**\n * 下载的模板文件\n */\nexport interface DownloadedFile {\n /** 文件路径 */\n path: string;\n /** 文件内容 */\n content: string;\n /** 文件类型 */\n type: TemplateFileType;\n}\n","/**\n * 检查结果状态\n */\nexport type CheckStatus = 'pass' | 'warning' | 'error';\n\n/**\n * 检查结果\n */\nexport interface CheckResult {\n /** 检查项名称 */\n name: string;\n /** 检查状态 */\n status: CheckStatus;\n /** 检查消息 */\n message: string;\n /** 详细信息 */\n details?: string;\n}\n\n/**\n * 诊断结果\n */\nexport interface DoctorResult {\n /** 检查结果列表 */\n checks: CheckResult[];\n /** 摘要统计 */\n summary: {\n /** 通过数量 */\n passed: number;\n /** 警告数量 */\n warnings: number;\n /** 错误数量 */\n errors: number;\n };\n}\n","/**\n * 元数据类型定义\n *\n * 用于跟踪模板文件的安装和更新状态\n */\n\n/**\n * 单个文件的元数据\n */\nexport interface FileMetadata {\n /** 原始文件哈希(安装时的哈希) */\n originalHash: string;\n /** 远程模板版本 */\n remoteVersion: string;\n /** 最后同步时间 */\n lastSyncedAt?: string;\n /** 文件大小(字节) */\n size?: number;\n}\n\n/**\n * 项目元数据\n */\nexport interface ProjectMetadata {\n /** 元数据格式版本 */\n version: string;\n /** 项目初始化时间 */\n initializedAt: string;\n /** 模板版本 */\n templateVersion: string;\n /** 文件元数据映射(相对路径 -> 文件元数据) */\n files: Record<string, FileMetadata>;\n /** 最后更新时间 */\n lastUpdatedAt?: string;\n}\n\n/**\n * 文件差异状态\n */\nexport type FileDiffStatus =\n | 'unchanged' // 未修改(哈希相同)\n | 'modified' // 用户已修改(哈希不同)\n | 'added' // 新增文件(本地存在但元数据中没有)\n | 'deleted' // 已删除(元数据中存在但本地不存在)\n | 'remote-new' // 远程新增(远程存在但本地没有)\n | 'conflict'; // 冲突(用户修改且远程也更新)\n\n/**\n * 文件差异信息\n */\nexport interface FileDiff {\n /** 文件路径 */\n path: string;\n /** 差异状态 */\n status: FileDiffStatus;\n /** 本地哈希(如果存在) */\n localHash?: string;\n /** 远程哈希(如果存在) */\n remoteHash?: string;\n /** 原始哈希(如果存在) */\n originalHash?: string;\n /** 本地版本(如果存在) */\n localVersion?: string;\n /** 远程版本(如果存在) */\n remoteVersion?: string;\n}\n\n/**\n * 差异比较结果\n */\nexport interface DiffResult {\n /** 是否有变化 */\n hasChanges: boolean;\n /** 未修改的文件数量 */\n unchangedCount: number;\n /** 用户修改的文件数量 */\n modifiedCount: number;\n /** 新增的文件数量 */\n addedCount: number;\n /** 删除的文件数量 */\n deletedCount: number;\n /** 远程新增的文件数量 */\n remoteNewCount: number;\n /** 冲突的文件数量 */\n conflictCount: number;\n /** 所有文件差异列表 */\n diffs: FileDiff[];\n}\n"],"mappings":"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","names":["path","options","exports","module","exports","module","exports","module","exports","module","options","exports","module","exports","module","exports","module","exports","module","options","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","options","exports","module","options","str","string","exports","module","require_js_yaml","exports","module","yaml","options","exports","module","str","exports","str","exports","module","engines","options","exports","module","options","exports","module","options","str","exports","module","options","exports","module","options","exports","module","str","options","exports","module","fs","engines","parse","options","str","path","execSync","path","process","options","styles","options","options","chalk","styles","path","path","path","execSync","path","path","path","options","grayMatter","getProjectRoot","path","path","os","os","path","config","path","path","os","files","path","options","getProjectRoot","path","options","walkDir","calculateFileHash","os","options"]}
|