@nipe-solutions/flex-layout-codemod 2.0.0-beta.1 → 2.0.0-beta.3

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/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../node_modules/ignore/index.js","../src/cli/run-cli.ts","../package.json","../src/logger.ts","../src/adapter/tailwind/tailwind-value.parser.ts","../src/adapter/tailwind/directives/layout.strategy.ts","../src/adapter/tailwind/directives/layout-gap.strategy.ts","../src/adapter/tailwind/directives/flex-item.strategy.ts","../src/adapter/tailwind/directives/flex-offset.strategy.ts","../src/adapter/tailwind/directives/layout-align.strategy.ts","../src/adapter/tailwind/directives/flex-align.strategy.ts","../src/adapter/tailwind/directives/flex-fill.strategy.ts","../src/adapter/tailwind/directives/flex-order.strategy.ts","../src/adapter/tailwind/independent-directive.registry.ts","../src/template/template-attribute.ts","../src/analyzer/flex-layout.catalog.ts","../src/breakpoint/breakpoint-catalog.ts","../src/adapter/tailwind/tailwind-arbitrary-syntax.ts","../src/adapter/tailwind/extended/css-property-ownership.ts","../src/adapter/tailwind/extended/tailwind-arbitrary-value-ownership.ts","../src/adapter/tailwind/tailwind-class-conflict.ts","../src/adapter/tailwind/responsive-variant.emitter.ts","../src/adapter/tailwind/responsive-plan.ts","../src/adapter/tailwind/responsive-family.planner.ts","../src/adapter/tailwind/visibility/visibility.emitter.ts","../src/adapter/tailwind/visibility/display-composition.planner.ts","../src/adapter/tailwind/visibility/visibility-value.parser.ts","../src/adapter/tailwind/visibility/visibility-state.planner.ts","../src/adapter/tailwind/visibility/literal-style-display.ts","../src/adapter/tailwind/visibility/visible-display.resolver.ts","../src/edit/html-attribute-value.ts","../src/adapter/tailwind/extended/tailwind-arbitrary-property.encoder.ts","../src/adapter/tailwind/extended/responsive-style-value.parser.ts","../src/adapter/tailwind/extended/extended-family.planner.ts","../src/adapter/tailwind/extended/tailwind-candidate-classifier.ts","../src/adapter/tailwind/extended/extended-display-composition.planner.ts","../src/adapter/tailwind/extended/extended-responsive.emitter.ts","../src/adapter/tailwind/extended/responsive-class-value.parser.ts","../src/adapter/tailwind/extended/extended-responsive.planner.ts","../src/adapter/tailwind/extended/generated-property-composition.planner.ts","../src/adapter/tailwind/tailwind.adapter.ts","../src/adapter/adapter.factory.ts","../src/migrator/migrator.ts","../src/lib/gitignore.helper.ts","../src/report/migration-report.builder.ts","../src/util/compare-code-units.ts","../src/migrator/file.migrator.ts","../src/analyzer/flex-layout-attribute.analyzer.ts","../src/analyzer/template.analyzer.ts","../src/edit/source-editor.ts","../src/lib/atomic-file.writer.ts","../src/planner/conversion-planner.ts","../src/template/angular-template.parser.ts","../src/migrator/base.migrator.ts","../src/migrator/folder.migrator.ts","../src/report/json-report.writer.ts","../src/report/terminal.presenter.ts","../src/util/error.util.ts","../src/cli/exit-policy.ts","../src/cli/report-path.validator.ts","../src/main.ts"],"sourcesContent":["// A simple implementation of make-array\nfunction makeArray (subject) {\n return Array.isArray(subject)\n ? subject\n : [subject]\n}\n\nconst EMPTY = ''\nconst SPACE = ' '\nconst ESCAPE = '\\\\'\nconst REGEX_TEST_BLANK_LINE = /^\\s+$/\nconst REGEX_INVALID_TRAILING_BACKSLASH = /(?:[^\\\\]|^)\\\\$/\nconst REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\\\!/\nconst REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\\\#/\nconst REGEX_SPLITALL_CRLF = /\\r?\\n/g\n// /foo,\n// ./foo,\n// ../foo,\n// .\n// ..\nconst REGEX_TEST_INVALID_PATH = /^\\.*\\/|^\\.+$/\n\nconst SLASH = '/'\n\n// Do not use ternary expression here, since \"istanbul ignore next\" is buggy\nlet TMP_KEY_IGNORE = 'node-ignore'\n/* istanbul ignore else */\nif (typeof Symbol !== 'undefined') {\n TMP_KEY_IGNORE = Symbol.for('node-ignore')\n}\nconst KEY_IGNORE = TMP_KEY_IGNORE\n\nconst define = (object, key, value) =>\n Object.defineProperty(object, key, {value})\n\nconst REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g\n\nconst RETURN_FALSE = () => false\n\n// Sanitize the range of a regular expression\n// The cases are complicated, see test cases for details\nconst sanitizeRange = range => range.replace(\n REGEX_REGEXP_RANGE,\n (match, from, to) => from.charCodeAt(0) <= to.charCodeAt(0)\n ? match\n // Invalid range (out of order) which is ok for gitignore rules but\n // fatal for JavaScript regular expression, so eliminate it.\n : EMPTY\n)\n\n// See fixtures #59\nconst cleanRangeBackSlash = slashes => {\n const {length} = slashes\n return slashes.slice(0, length - length % 2)\n}\n\n// > If the pattern ends with a slash,\n// > it is removed for the purpose of the following description,\n// > but it would only find a match with a directory.\n// > In other words, foo/ will match a directory foo and paths underneath it,\n// > but will not match a regular file or a symbolic link foo\n// > (this is consistent with the way how pathspec works in general in Git).\n// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`'\n// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call\n// you could use option `mark: true` with `glob`\n\n// '`foo/`' should not continue with the '`..`'\nconst REPLACERS = [\n\n // > Trailing spaces are ignored unless they are quoted with backslash (\"\\\")\n [\n // (a\\ ) -> (a )\n // (a ) -> (a)\n // (a \\ ) -> (a )\n /\\\\?\\s+$/,\n match => match.indexOf('\\\\') === 0\n ? SPACE\n : EMPTY\n ],\n\n // replace (\\ ) with ' '\n [\n /\\\\\\s/g,\n () => SPACE\n ],\n\n // Escape metacharacters\n // which is written down by users but means special for regular expressions.\n\n // > There are 12 characters with special meanings:\n // > - the backslash \\,\n // > - the caret ^,\n // > - the dollar sign $,\n // > - the period or dot .,\n // > - the vertical bar or pipe symbol |,\n // > - the question mark ?,\n // > - the asterisk or star *,\n // > - the plus sign +,\n // > - the opening parenthesis (,\n // > - the closing parenthesis ),\n // > - and the opening square bracket [,\n // > - the opening curly brace {,\n // > These special characters are often called \"metacharacters\".\n [\n /[\\\\$.|*+(){^]/g,\n match => `\\\\${match}`\n ],\n\n [\n // > a question mark (?) matches a single character\n /(?!\\\\)\\?/g,\n () => '[^/]'\n ],\n\n // leading slash\n [\n\n // > A leading slash matches the beginning of the pathname.\n // > For example, \"/*.c\" matches \"cat-file.c\" but not \"mozilla-sha1/sha1.c\".\n // A leading slash matches the beginning of the pathname\n /^\\//,\n () => '^'\n ],\n\n // replace special metacharacter slash after the leading slash\n [\n /\\//g,\n () => '\\\\/'\n ],\n\n [\n // > A leading \"**\" followed by a slash means match in all directories.\n // > For example, \"**/foo\" matches file or directory \"foo\" anywhere,\n // > the same as pattern \"foo\".\n // > \"**/foo/bar\" matches file or directory \"bar\" anywhere that is directly\n // > under directory \"foo\".\n // Notice that the '*'s have been replaced as '\\\\*'\n /^\\^*\\\\\\*\\\\\\*\\\\\\//,\n\n // '**/foo' <-> 'foo'\n () => '^(?:.*\\\\/)?'\n ],\n\n // starting\n [\n // there will be no leading '/'\n // (which has been replaced by section \"leading slash\")\n // If starts with '**', adding a '^' to the regular expression also works\n /^(?=[^^])/,\n function startingReplacer () {\n // If has a slash `/` at the beginning or middle\n return !/\\/(?!$)/.test(this)\n // > Prior to 2.22.1\n // > If the pattern does not contain a slash /,\n // > Git treats it as a shell glob pattern\n // Actually, if there is only a trailing slash,\n // git also treats it as a shell glob pattern\n\n // After 2.22.1 (compatible but clearer)\n // > If there is a separator at the beginning or middle (or both)\n // > of the pattern, then the pattern is relative to the directory\n // > level of the particular .gitignore file itself.\n // > Otherwise the pattern may also match at any level below\n // > the .gitignore level.\n ? '(?:^|\\\\/)'\n\n // > Otherwise, Git treats the pattern as a shell glob suitable for\n // > consumption by fnmatch(3)\n : '^'\n }\n ],\n\n // two globstars\n [\n // Use lookahead assertions so that we could match more than one `'/**'`\n /\\\\\\/\\\\\\*\\\\\\*(?=\\\\\\/|$)/g,\n\n // Zero, one or several directories\n // should not use '*', or it will be replaced by the next replacer\n\n // Check if it is not the last `'/**'`\n (_, index, str) => index + 6 < str.length\n\n // case: /**/\n // > A slash followed by two consecutive asterisks then a slash matches\n // > zero or more directories.\n // > For example, \"a/**/b\" matches \"a/b\", \"a/x/b\", \"a/x/y/b\" and so on.\n // '/**/'\n ? '(?:\\\\/[^\\\\/]+)*'\n\n // case: /**\n // > A trailing `\"/**\"` matches everything inside.\n\n // #21: everything inside but it should not include the current folder\n : '\\\\/.+'\n ],\n\n // normal intermediate wildcards\n [\n // Never replace escaped '*'\n // ignore rule '\\*' will match the path '*'\n\n // 'abc.*/' -> go\n // 'abc.*' -> skip this rule,\n // coz trailing single wildcard will be handed by [trailing wildcard]\n /(^|[^\\\\]+)(\\\\\\*)+(?=.+)/g,\n\n // '*.js' matches '.js'\n // '*.js' doesn't match 'abc'\n (_, p1, p2) => {\n // 1.\n // > An asterisk \"*\" matches anything except a slash.\n // 2.\n // > Other consecutive asterisks are considered regular asterisks\n // > and will match according to the previous rules.\n const unescaped = p2.replace(/\\\\\\*/g, '[^\\\\/]*')\n return p1 + unescaped\n }\n ],\n\n [\n // unescape, revert step 3 except for back slash\n // For example, if a user escape a '\\\\*',\n // after step 3, the result will be '\\\\\\\\\\\\*'\n /\\\\\\\\\\\\(?=[$.|*+(){^])/g,\n () => ESCAPE\n ],\n\n [\n // '\\\\\\\\' -> '\\\\'\n /\\\\\\\\/g,\n () => ESCAPE\n ],\n\n [\n // > The range notation, e.g. [a-zA-Z],\n // > can be used to match one of the characters in a range.\n\n // `\\` is escaped by step 3\n /(\\\\)?\\[([^\\]/]*?)(\\\\*)($|\\])/g,\n (match, leadEscape, range, endEscape, close) => leadEscape === ESCAPE\n // '\\\\[bar]' -> '\\\\\\\\[bar\\\\]'\n ? `\\\\[${range}${cleanRangeBackSlash(endEscape)}${close}`\n : close === ']'\n ? endEscape.length % 2 === 0\n // A normal case, and it is a range notation\n // '[bar]'\n // '[bar\\\\\\\\]'\n ? `[${sanitizeRange(range)}${endEscape}]`\n // Invalid range notaton\n // '[bar\\\\]' -> '[bar\\\\\\\\]'\n : '[]'\n : '[]'\n ],\n\n // ending\n [\n // 'js' will not match 'js.'\n // 'ab' will not match 'abc'\n /(?:[^*])$/,\n\n // WTF!\n // https://git-scm.com/docs/gitignore\n // changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1)\n // which re-fixes #24, #38\n\n // > If there is a separator at the end of the pattern then the pattern\n // > will only match directories, otherwise the pattern can match both\n // > files and directories.\n\n // 'js*' will not match 'a.js'\n // 'js/' will not match 'a.js'\n // 'js' will match 'a.js' and 'a.js/'\n match => /\\/$/.test(match)\n // foo/ will not match 'foo'\n ? `${match}$`\n // foo matches 'foo' and 'foo/'\n : `${match}(?=$|\\\\/$)`\n ],\n\n // trailing wildcard\n [\n /(\\^|\\\\\\/)?\\\\\\*$/,\n (_, p1) => {\n const prefix = p1\n // '\\^':\n // '/*' does not match EMPTY\n // '/*' does not match everything\n\n // '\\\\\\/':\n // 'abc/*' does not match 'abc/'\n ? `${p1}[^/]+`\n\n // 'a*' matches 'a'\n // 'a*' matches 'aa'\n : '[^/]*'\n\n return `${prefix}(?=$|\\\\/$)`\n }\n ],\n]\n\n// A simple cache, because an ignore rule only has only one certain meaning\nconst regexCache = Object.create(null)\n\n// @param {pattern}\nconst makeRegex = (pattern, ignoreCase) => {\n let source = regexCache[pattern]\n\n if (!source) {\n source = REPLACERS.reduce(\n (prev, current) => prev.replace(current[0], current[1].bind(pattern)),\n pattern\n )\n regexCache[pattern] = source\n }\n\n return ignoreCase\n ? new RegExp(source, 'i')\n : new RegExp(source)\n}\n\nconst isString = subject => typeof subject === 'string'\n\n// > A blank line matches no files, so it can serve as a separator for readability.\nconst checkPattern = pattern => pattern\n && isString(pattern)\n && !REGEX_TEST_BLANK_LINE.test(pattern)\n && !REGEX_INVALID_TRAILING_BACKSLASH.test(pattern)\n\n // > A line starting with # serves as a comment.\n && pattern.indexOf('#') !== 0\n\nconst splitPattern = pattern => pattern.split(REGEX_SPLITALL_CRLF)\n\nclass IgnoreRule {\n constructor (\n origin,\n pattern,\n negative,\n regex\n ) {\n this.origin = origin\n this.pattern = pattern\n this.negative = negative\n this.regex = regex\n }\n}\n\nconst createRule = (pattern, ignoreCase) => {\n const origin = pattern\n let negative = false\n\n // > An optional prefix \"!\" which negates the pattern;\n if (pattern.indexOf('!') === 0) {\n negative = true\n pattern = pattern.substr(1)\n }\n\n pattern = pattern\n // > Put a backslash (\"\\\") in front of the first \"!\" for patterns that\n // > begin with a literal \"!\", for example, `\"\\!important!.txt\"`.\n .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!')\n // > Put a backslash (\"\\\") in front of the first hash for patterns that\n // > begin with a hash.\n .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#')\n\n const regex = makeRegex(pattern, ignoreCase)\n\n return new IgnoreRule(\n origin,\n pattern,\n negative,\n regex\n )\n}\n\nconst throwError = (message, Ctor) => {\n throw new Ctor(message)\n}\n\nconst checkPath = (path, originalPath, doThrow) => {\n if (!isString(path)) {\n return doThrow(\n `path must be a string, but got \\`${originalPath}\\``,\n TypeError\n )\n }\n\n // We don't know if we should ignore EMPTY, so throw\n if (!path) {\n return doThrow(`path must not be empty`, TypeError)\n }\n\n // Check if it is a relative path\n if (checkPath.isNotRelative(path)) {\n const r = '`path.relative()`d'\n return doThrow(\n `path should be a ${r} string, but got \"${originalPath}\"`,\n RangeError\n )\n }\n\n return true\n}\n\nconst isNotRelative = path => REGEX_TEST_INVALID_PATH.test(path)\n\ncheckPath.isNotRelative = isNotRelative\ncheckPath.convert = p => p\n\nclass Ignore {\n constructor ({\n ignorecase = true,\n ignoreCase = ignorecase,\n allowRelativePaths = false\n } = {}) {\n define(this, KEY_IGNORE, true)\n\n this._rules = []\n this._ignoreCase = ignoreCase\n this._allowRelativePaths = allowRelativePaths\n this._initCache()\n }\n\n _initCache () {\n this._ignoreCache = Object.create(null)\n this._testCache = Object.create(null)\n }\n\n _addPattern (pattern) {\n // #32\n if (pattern && pattern[KEY_IGNORE]) {\n this._rules = this._rules.concat(pattern._rules)\n this._added = true\n return\n }\n\n if (checkPattern(pattern)) {\n const rule = createRule(pattern, this._ignoreCase)\n this._added = true\n this._rules.push(rule)\n }\n }\n\n // @param {Array<string> | string | Ignore} pattern\n add (pattern) {\n this._added = false\n\n makeArray(\n isString(pattern)\n ? splitPattern(pattern)\n : pattern\n ).forEach(this._addPattern, this)\n\n // Some rules have just added to the ignore,\n // making the behavior changed.\n if (this._added) {\n this._initCache()\n }\n\n return this\n }\n\n // legacy\n addPattern (pattern) {\n return this.add(pattern)\n }\n\n // | ignored : unignored\n // negative | 0:0 | 0:1 | 1:0 | 1:1\n // -------- | ------- | ------- | ------- | --------\n // 0 | TEST | TEST | SKIP | X\n // 1 | TESTIF | SKIP | TEST | X\n\n // - SKIP: always skip\n // - TEST: always test\n // - TESTIF: only test if checkUnignored\n // - X: that never happen\n\n // @param {boolean} whether should check if the path is unignored,\n // setting `checkUnignored` to `false` could reduce additional\n // path matching.\n\n // @returns {TestResult} true if a file is ignored\n _testOne (path, checkUnignored) {\n let ignored = false\n let unignored = false\n\n this._rules.forEach(rule => {\n const {negative} = rule\n if (\n unignored === negative && ignored !== unignored\n || negative && !ignored && !unignored && !checkUnignored\n ) {\n return\n }\n\n const matched = rule.regex.test(path)\n\n if (matched) {\n ignored = !negative\n unignored = negative\n }\n })\n\n return {\n ignored,\n unignored\n }\n }\n\n // @returns {TestResult}\n _test (originalPath, cache, checkUnignored, slices) {\n const path = originalPath\n // Supports nullable path\n && checkPath.convert(originalPath)\n\n checkPath(\n path,\n originalPath,\n this._allowRelativePaths\n ? RETURN_FALSE\n : throwError\n )\n\n return this._t(path, cache, checkUnignored, slices)\n }\n\n _t (path, cache, checkUnignored, slices) {\n if (path in cache) {\n return cache[path]\n }\n\n if (!slices) {\n // path/to/a.js\n // ['path', 'to', 'a.js']\n slices = path.split(SLASH)\n }\n\n slices.pop()\n\n // If the path has no parent directory, just test it\n if (!slices.length) {\n return cache[path] = this._testOne(path, checkUnignored)\n }\n\n const parent = this._t(\n slices.join(SLASH) + SLASH,\n cache,\n checkUnignored,\n slices\n )\n\n // If the path contains a parent directory, check the parent first\n return cache[path] = parent.ignored\n // > It is not possible to re-include a file if a parent directory of\n // > that file is excluded.\n ? parent\n : this._testOne(path, checkUnignored)\n }\n\n ignores (path) {\n return this._test(path, this._ignoreCache, false).ignored\n }\n\n createFilter () {\n return path => !this.ignores(path)\n }\n\n filter (paths) {\n return makeArray(paths).filter(this.createFilter())\n }\n\n // @returns {TestResult}\n test (path) {\n return this._test(path, this._testCache, true)\n }\n}\n\nconst factory = options => new Ignore(options)\n\nconst isPathValid = path =>\n checkPath(path && checkPath.convert(path), path, RETURN_FALSE)\n\nfactory.isPathValid = isPathValid\n\n// Fixes typescript\nfactory.default = factory\n\nmodule.exports = factory\n\n// Windows\n// --------------------------------------------------------------\n/* istanbul ignore if */\nif (\n // Detect `process` so that it can run in browsers.\n typeof process !== 'undefined'\n && (\n process.env && process.env.IGNORE_TEST_WIN32\n || process.platform === 'win32'\n )\n) {\n /* eslint no-control-regex: \"off\" */\n const makePosix = str => /^\\\\\\\\\\?\\\\/.test(str)\n || /[\"<>|\\u0000-\\u001F]+/u.test(str)\n ? str\n : str.replace(/\\\\/g, '/')\n\n checkPath.convert = makePosix\n\n // 'C:\\\\foo' <- 'C:\\\\foo' has been converted to 'C:/'\n // 'd:\\\\foo'\n const REGIX_IS_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\\//i\n checkPath.isNotRelative = path =>\n REGIX_IS_WINDOWS_PATH_ABSOLUTE.test(path)\n || isNotRelative(path)\n}\n","import { Command, CommanderError, Option } from 'commander';\nimport packageJson from '../../package.json' with { type: 'json' };\nimport { AdapterFactory } from '../adapter/adapter.factory';\nimport { logger } from '../logger';\nimport { Migrator } from '../migrator/migrator';\nimport { JsonReportWriter } from '../report/json-report.writer';\nimport { TerminalPresenter, type TextOutput } from '../report/terminal.presenter';\nimport { getErrorMessage } from '../util/error.util';\nimport { resolveExitCode } from './exit-policy';\nimport { validateReportPath } from './report-path.validator';\n\ninterface ProgramOptions {\n readonly output?: string;\n readonly target: string;\n readonly dryRun: boolean;\n readonly report?: string;\n readonly allowUnresolved: boolean;\n readonly debug: boolean;\n}\n\nexport interface CliOutput {\n readonly stdout: TextOutput;\n readonly stderr: TextOutput;\n}\n\nconst processOutput: CliOutput = {\n stdout: process.stdout,\n stderr: process.stderr,\n};\n\nexport async function runCli(argv: readonly string[], output: CliOutput = processOutput): Promise<0 | 1 | 2> {\n let exitCode: 0 | 1 | 2 = 0;\n let debug = false;\n const program = new Command();\n\n program\n .name('flex-layout-codemod')\n .version(packageJson.version)\n .description('Migrate Angular Flex-Layout attributes to Tailwind CSS utilities')\n .exitOverride()\n .configureOutput({\n writeOut: text => output.stdout.write(text),\n writeErr: text => output.stderr.write(text),\n })\n .argument('<input>', 'input HTML file or folder')\n .option(\n '-o, --output <path>',\n 'output HTML file or folder; single-file output must end in .html; defaults to input',\n )\n .addOption(\n new Option('-t, --target <target>', 'conversion target; currently tailwind')\n .choices(['tailwind'])\n .default('tailwind'),\n )\n .option('--dry-run', 'analyze and plan without writing templates', false)\n .option('--report <path>', 'atomically write a JSON report; path must end in .json')\n .option('--allow-unresolved', 'return success when unresolved inputs remain', false)\n .option('-d, --debug', 'enable debug logging', false)\n .action(async (input: string, options: ProgramOptions) => {\n debug = options.debug;\n logger.level = debug ? 'debug' : 'warn';\n\n const destination = options.output ?? input;\n const adapter = AdapterFactory.create(options.target);\n if (options.report !== undefined) {\n validateReportPath(options.report);\n }\n const report = await new Migrator(adapter, input, destination).migrate({ dryRun: options.dryRun });\n const reportOutput = report.summary.parseErrors > 0 ? output.stderr : output.stdout;\n\n new TerminalPresenter().present(report, reportOutput);\n if (options.report !== undefined) {\n await new JsonReportWriter().write(options.report, report);\n }\n\n exitCode = resolveExitCode(report, options.allowUnresolved);\n });\n\n try {\n await program.parseAsync([...argv]);\n return exitCode;\n } catch (error: unknown) {\n if (error instanceof CommanderError) {\n return error.exitCode === 0 ? 0 : 1;\n }\n\n output.stderr.write(`Error: ${getErrorMessage(error)}\\n`);\n if (debug && error instanceof Error && error.stack) {\n output.stderr.write(`${error.stack}\\n`);\n }\n return 1;\n }\n}\n","{\n \"name\": \"@nipe-solutions/flex-layout-codemod\",\n \"version\": \"2.0.0-beta.1\",\n \"description\": \"A safety-first codemod for migrating Angular Flex-Layout templates to native CSS or Tailwind CSS.\",\n \"type\": \"module\",\n \"engines\": {\n \"node\": \">=24\"\n },\n \"packageManager\": \"npm@11.19.0\",\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\",\n \"CHANGELOG.md\"\n ],\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"scripts\": {\n \"clean\": \"rimraf dist coverage\",\n \"build\": \"tsup\",\n \"typecheck\": \"tsc --noEmit\",\n \"start\": \"ts-node ./src/main.ts\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage\",\n \"lint\": \"eslint .\",\n \"lint:fix\": \"eslint . --fix\",\n \"format\": \"prettier --check .\",\n \"format:write\": \"prettier --write .\",\n \"verify\": \"npm run format && npm run lint && npm run typecheck && npm run test:coverage && npm run build && npm run package:check\",\n \"package:check\": \"node scripts/verify-package.mjs\",\n \"changeset\": \"changeset add\",\n \"version-packages\": \"changeset version\",\n \"release:prepare\": \"node scripts/release-artifact.mjs\",\n \"release:verify\": \"node scripts/release-artifact.mjs --verify-retained\",\n \"release:version\": \"changeset version && npm install --package-lock-only --ignore-scripts\",\n \"prepare\": \"husky\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/NIPE-Solutions/flex-layout-migrator.git\"\n },\n \"keywords\": [\n \"angular\",\n \"flex-layout\",\n \"migration\",\n \"tailwindcss\"\n ],\n \"author\": \"Nicholas Petrasek\",\n \"license\": \"MIT\",\n \"bugs\": {\n \"url\": \"https://github.com/NIPE-Solutions/flex-layout-migrator/issues\"\n },\n \"homepage\": \"https://github.com/NIPE-Solutions/flex-layout-migrator#readme\",\n \"dependencies\": {\n \"@angular/compiler\": \"21.2.22\",\n \"commander\": \"^15.0.0\",\n \"fs-extra\": \"^11.4.0\",\n \"winston\": \"^3.19.0\"\n },\n \"bin\": {\n \"flex-layout-codemod\": \"./dist/cli.js\"\n },\n \"devDependencies\": {\n \"@changesets/cli\": \"^3.0.1\",\n \"@eslint/js\": \"^10.0.1\",\n \"@tailwindcss/cli\": \"4.3.3\",\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/mock-fs\": \"^4.13.4\",\n \"@types/node\": \"^26.4.0\",\n \"@vitest/coverage-v8\": \"^4.1.11\",\n \"eslint\": \"^10.9.1\",\n \"eslint-config-prettier\": \"^10.1.8\",\n \"husky\": \"^9.1.7\",\n \"lint-staged\": \"^17.4.1\",\n \"mock-fs\": \"^5.5.0\",\n \"postcss\": \"^8.5.26\",\n \"prettier\": \"^3.9.6\",\n \"rimraf\": \"^6.1.3\",\n \"tailwindcss\": \"4.3.3\",\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"^6.0.3\",\n \"typescript-eslint\": \"^8.68.0\",\n \"vitest\": \"^4.1.11\",\n \"yaml\": \"^2.9.0\"\n },\n \"husky\": {\n \"hooks\": {\n \"pre-commit\": \"lint-staged\"\n }\n },\n \"lint-staged\": {\n \"*.{js,mjs,ts}\": [\n \"eslint --fix\",\n \"prettier --write\"\n ],\n \"*.{json,md,yml,yaml}\": [\n \"prettier --write\"\n ]\n }\n}\n","import { createLogger, format, transports } from 'winston';\n\nconst { combine, timestamp, printf, colorize, splat } = format;\n\nconst myFormat = printf(({ timestamp, level, message, label, lineNumber }) => {\n const timestampValue =\n typeof timestamp === 'string' || typeof timestamp === 'number' || timestamp instanceof Date\n ? timestamp\n : Date.now();\n const formattedTimestamp = new Date(timestampValue)\n .toISOString()\n .replace('T', ' ')\n .replace(/\\.\\d{3}Z$/, 'Z');\n const fileLineInfo = label && lineNumber ? `(${label}:${lineNumber})` : '';\n return `[${formattedTimestamp}] ${level}: ${message} ${fileLineInfo}`;\n});\n\nexport const logger = createLogger({\n level: 'info',\n format: combine(splat(), colorize(), timestamp(), myFormat),\n transports: [new transports.Console()],\n});\n","import type { CssLength, ParsedValue } from './tailwind-semantic.model';\n\nconst NUMBER = String.raw`-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)`;\nconst LENGTH = new RegExp(`^${NUMBER}(?:%|px|r?em|v(?:w|h|min|max)|ch|ex|cm|mm|in|pt|pc)$`);\nconst UNITLESS = new RegExp(`^${NUMBER}$`);\nconst CSS_FUNCTION = /^(?:calc|clamp|min|max|var)\\([a-zA-Z0-9_%+*/.,()\\-\\s]+\\)$/;\n\nexport interface CssLengthOptions {\n readonly fallbackUnit: 'px' | '%';\n}\n\nexport function parseCssLength(source: string, options: CssLengthOptions): ParsedValue<CssLength> {\n const value = source.trim();\n if (UNITLESS.test(value)) {\n return { ok: true, value: `${value}${options.fallbackUnit}` as CssLength };\n }\n if (LENGTH.test(value) || CSS_FUNCTION.test(value)) {\n return { ok: true, value: value as CssLength };\n }\n return { ok: false };\n}\n\nexport function arbitraryValue(value: string): string {\n return `[${value.replaceAll(/\\s+/g, '_')}]`;\n}\n","import type { ParsedValue } from '../tailwind-semantic.model';\n\nexport type LayoutDirection = 'row' | 'row-reverse' | 'column' | 'column-reverse';\nexport type LayoutWrap = 'nowrap' | 'wrap' | 'wrap-reverse';\n\nexport interface LayoutValue {\n readonly direction: LayoutDirection;\n readonly wrap: LayoutWrap;\n readonly explicitWrap: boolean;\n readonly inline: boolean;\n}\n\nexport interface TailwindClassPlan {\n readonly classNames: readonly string[];\n}\n\nconst directions = new Set<LayoutDirection>(['row', 'row-reverse', 'column', 'column-reverse']);\nconst wraps = new Set<LayoutWrap>(['nowrap', 'wrap', 'wrap-reverse']);\n\nexport function parseLayout(value: string): ParsedValue<LayoutValue> {\n const tokens = value.split(/\\s+/).filter(Boolean);\n const direction = (tokens.shift() ?? 'row') as LayoutDirection;\n if (!directions.has(direction)) return { ok: false };\n\n const wrapTokens = tokens.filter(token => wraps.has(token as LayoutWrap));\n if (wrapTokens.length > 1) return { ok: false };\n let wrap: LayoutWrap = 'nowrap';\n let inline = false;\n for (const token of tokens) {\n if (wraps.has(token as LayoutWrap)) {\n wrap = token as LayoutWrap;\n } else if (token === 'inline' && !inline) {\n inline = true;\n } else {\n return { ok: false };\n }\n }\n\n return { ok: true, value: { direction, wrap, explicitWrap: wrapTokens.length === 1, inline } };\n}\n\nexport function layoutClassNames(layout: LayoutValue): readonly string[] {\n const direction = {\n row: 'flex-row',\n 'row-reverse': 'flex-row-reverse',\n column: 'flex-col',\n 'column-reverse': 'flex-col-reverse',\n }[layout.direction];\n const wrap = layout.explicitWrap ? [`flex-${layout.wrap}`] : [];\n return [layout.inline ? 'inline-flex' : 'flex', direction, ...wrap, 'box-border'];\n}\n\nexport function planLayout(value: string): ParsedValue<TailwindClassPlan> {\n const parsed = parseLayout(value);\n return parsed.ok ? { ok: true, value: { classNames: layoutClassNames(parsed.value) } } : parsed;\n}\n","import type { TailwindStrategyResult } from '../tailwind-semantic.model';\nimport { arbitraryValue, parseCssLength } from '../tailwind-value.parser';\nimport { parseLayout } from './layout.strategy';\n\nexport function planLayoutGap(value: string, layoutValue: string | undefined): TailwindStrategyResult {\n const normalized = value.trim();\n if (!normalized) return { status: 'invalid', code: 'invalid-value' };\n\n if (normalized.endsWith(' grid')) {\n return {\n status: 'review',\n code: 'semantic-unsupported',\n reason: 'The Flex-Layout grid gap mode changes child padding and compensating host margins.',\n suggestion: 'Replace the grid gap manually after reviewing the child padding behavior.',\n };\n }\n\n const gap = parseCssLength(normalized, { fallbackUnit: 'px' });\n if (!gap.ok) return { status: 'invalid', code: 'invalid-value' };\n if (gap.value.startsWith('-')) {\n return {\n status: 'review',\n code: 'semantic-unsupported',\n reason: 'Flex-Layout accepts a negative margin gap, but CSS gap does not accept negative values.',\n suggestion: 'Preserve the margin-based spacing or migrate the child margins manually.',\n };\n }\n if (gap.value.includes('(')) {\n return {\n status: 'review',\n code: 'context-unverified',\n reason: 'The computed gap may resolve to a negative value that CSS gap cannot represent.',\n suggestion: 'Prove the value is nonnegative or migrate the margin-based spacing manually.',\n };\n }\n if (layoutValue === undefined) {\n return {\n status: 'review',\n code: 'context-unverified',\n reason: 'The active flex direction and wrapping behavior depend on a dynamic layout.',\n suggestion: 'Make the layout static or migrate the gap and responsive layout together.',\n };\n }\n\n const layout = parseLayout(layoutValue);\n if (!layout.ok) return { status: 'invalid', code: 'invalid-value' };\n if (layout.value.wrap !== 'nowrap') {\n return {\n status: 'review',\n code: 'semantic-unsupported',\n reason: 'Flex-Layout margins and CSS gap differ when flex items wrap across lines.',\n suggestion: 'Verify the wrapped layout and migrate its spacing manually.',\n };\n }\n\n return { status: 'converted', classNames: [`gap-${arbitraryValue(gap.value)}`] };\n}\n","import type { TailwindStrategyResult } from '../tailwind-semantic.model';\nimport { parseCssLength } from '../tailwind-value.parser';\nimport { parseLayout } from './layout.strategy';\n\nexport interface FlexItemInput {\n readonly basis: string;\n readonly grow?: string;\n readonly shrink?: string;\n readonly layout: string | undefined;\n}\n\nconst FACTOR = /^\\d+(?:\\.\\d+)?$/;\nfunction property(name: string, value: string): string {\n return `[${name}:${value.replaceAll(/\\s+/g, '_')}]`;\n}\n\nexport function planFlexItem(input: FlexItemInput): TailwindStrategyResult {\n if (input.layout === undefined) {\n return {\n status: 'review',\n code: 'context-unverified',\n reason: 'Flex sizing depends on a dynamic parent direction or wrapping mode.',\n suggestion: 'Make the parent layout static or migrate this flex item manually.',\n };\n }\n const layout = parseLayout(input.layout);\n if (!layout.ok) return { status: 'invalid', code: 'invalid-value' };\n\n let grow = input.grow?.trim() || '1';\n let shrink = input.shrink?.trim() || '1';\n let basis = input.basis.trim();\n const shorthand = basis.startsWith('calc(') ? undefined : basis.match(/^(\\S+)\\s+(\\S+)\\s+(.+)$/);\n if (shorthand) {\n grow = shorthand[1] ?? grow;\n shrink = shorthand[2] ?? shrink;\n basis = shorthand[3] ?? basis;\n } else if (basis.split(/\\s+/).length > 1 && !basis.startsWith('calc(')) {\n return { status: 'invalid', code: 'invalid-value' };\n }\n if (!FACTOR.test(grow) || !FACTOR.test(shrink)) return { status: 'invalid', code: 'invalid-value' };\n\n const direction = layout.value.direction.startsWith('column') ? 'height' : 'width';\n let isValue = false;\n let usingCalc = false;\n\n if (!basis) {\n basis = direction === 'width' ? '0%' : '0.000000001px';\n } else if (basis === 'initial' || basis === 'nogrow') {\n grow = '0';\n basis = 'auto';\n } else if (basis === 'grow') {\n basis = '100%';\n } else if (basis === 'noshrink') {\n shrink = '0';\n basis = 'auto';\n } else if (basis === 'none') {\n grow = '0';\n shrink = '0';\n basis = 'auto';\n } else if (basis !== 'auto') {\n const parsed = parseCssLength(basis, { fallbackUnit: '%' });\n if (!parsed.ok) return { status: 'invalid', code: 'invalid-value' };\n basis = parsed.value;\n usingCalc = basis.startsWith('calc(');\n isValue = usingCalc || !basis.endsWith('%');\n if (basis === '0px') basis = '0%';\n }\n\n const fixed = grow === '0' && shrink === '0';\n const min =\n !['0%', '0px', '0.000000001px', 'auto'].includes(basis) && (fixed || (isValue && grow !== '0')) ? basis : undefined;\n const max =\n !['0%', '0px', '0.000000001px', 'auto'].includes(basis) && (fixed || (!usingCalc && shrink !== '0'))\n ? basis\n : undefined;\n\n const effectiveBasis =\n min || max ? (layout.value.wrap === 'wrap' ? (max ?? min ?? basis) : isValue ? basis : '100%') : basis;\n const flexClasses = usingCalc\n ? [property('flex-grow', grow), property('flex-shrink', shrink), property('flex-basis', effectiveBasis)]\n : [property('flex', `${grow} ${shrink} ${effectiveBasis}`)];\n return {\n status: 'converted',\n classNames: [\n ...flexClasses,\n ...(min ? [property(`min-${direction}`, min)] : []),\n ...(max ? [property(`max-${direction}`, max)] : []),\n 'box-border',\n ],\n };\n}\n","import type { TailwindStrategyResult } from '../tailwind-semantic.model';\nimport { arbitraryValue, parseCssLength } from '../tailwind-value.parser';\nimport { parseLayout } from './layout.strategy';\n\nexport function planFlexOffset(value: string, layoutValue: string | undefined): TailwindStrategyResult {\n const offset = parseCssLength(value.trim() || '0', { fallbackUnit: '%' });\n if (!offset.ok) return { status: 'invalid', code: 'invalid-value' };\n if (layoutValue === undefined) {\n return {\n status: 'review',\n code: 'context-unverified',\n reason: 'The offset margin axis depends on a dynamic parent layout.',\n suggestion: 'Make the parent layout static or migrate the offset manually.',\n };\n }\n const layout = parseLayout(layoutValue);\n if (!layout.ok) return { status: 'invalid', code: 'invalid-value' };\n const prefix = layout.value.direction.startsWith('column') ? 'mt' : 'ms';\n return { status: 'converted', classNames: [`${prefix}-${arbitraryValue(offset.value)}`] };\n}\n","import type { ParsedValue } from '../tailwind-semantic.model';\nimport { layoutClassNames, parseLayout, type TailwindClassPlan } from './layout.strategy';\n\nconst mainAxis = {\n start: 'start',\n 'flex-start': 'start',\n center: 'center',\n end: 'end',\n 'flex-end': 'end',\n 'space-around': 'around',\n 'space-between': 'between',\n 'space-evenly': 'evenly',\n} as const;\n\nconst crossAxis = {\n start: ['start', 'start'],\n 'flex-start': ['start', 'start'],\n center: ['center', 'center'],\n end: ['end', 'end'],\n 'flex-end': ['end', 'end'],\n 'space-between': ['stretch', 'between'],\n 'space-around': ['stretch', 'around'],\n baseline: ['baseline', 'stretch'],\n stretch: ['stretch', 'stretch'],\n} as const;\n\nexport function planLayoutAlign(value: string, layoutValue: string): ParsedValue<TailwindClassPlan> {\n const values = value.split(/\\s+/).filter(Boolean);\n if (values.length > 2) return { ok: false };\n const main = mainAxis[(values[0] ?? 'start') as keyof typeof mainAxis];\n const crossKey = (values[1] ?? 'stretch') as keyof typeof crossAxis;\n const cross = crossAxis[crossKey];\n const layout = parseLayout(layoutValue);\n if (!main || !cross || !layout.ok) return { ok: false };\n\n const sizing =\n crossKey !== 'stretch' ? [] : layout.value.direction.startsWith('row') ? ['max-h-full'] : ['max-w-full'];\n return {\n ok: true,\n value: {\n classNames: [\n `justify-${main}`,\n `items-${cross[0]}`,\n `content-${cross[1]}`,\n ...layoutClassNames(layout.value),\n ...sizing,\n ],\n },\n };\n}\n","import type { TailwindStrategyResult } from '../tailwind-semantic.model';\n\nconst values = new Set(['auto', 'start', 'end', 'center', 'baseline', 'stretch']);\n\nexport function planFlexAlign(value: string): TailwindStrategyResult {\n const normalized = value.trim() || 'stretch';\n if (!values.has(normalized)) return { status: 'invalid', code: 'invalid-value' };\n return { status: 'converted', classNames: [`self-${normalized}`] };\n}\n","import type { TailwindStrategyResult } from '../tailwind-semantic.model';\n\nexport function planFlexFill(): TailwindStrategyResult {\n return {\n status: 'converted',\n classNames: ['m-0', 'w-full', 'h-full', 'min-w-full', 'min-h-full'],\n };\n}\n","import type { TailwindStrategyResult } from '../tailwind-semantic.model';\n\nexport function planFlexOrder(value: string): TailwindStrategyResult {\n const order = Number.parseInt(value.trim(), 10);\n return {\n status: 'converted',\n classNames: order ? [`[order:${order}]`] : [],\n };\n}\n","import type { LocatedFlexLayoutInput } from '../../analyzer/flex-layout-attribute.analyzer';\nimport { planFlexAlign } from './directives/flex-align.strategy';\nimport { planFlexFill } from './directives/flex-fill.strategy';\nimport { planFlexOrder } from './directives/flex-order.strategy';\nimport type { TailwindStrategyResult } from './tailwind-semantic.model';\n\ntype IndependentDirective = 'fxFlexAlign' | 'fxFlexFill' | 'fxFill' | 'fxFlexOrder';\ntype IndependentPlanner = (value: string) => TailwindStrategyResult;\n\nconst planners = new Map<IndependentDirective, IndependentPlanner>([\n ['fxFlexAlign', planFlexAlign],\n ['fxFlexFill', planFlexFill],\n ['fxFill', planFlexFill],\n ['fxFlexOrder', planFlexOrder],\n]);\n\nexport function planIndependentDirective(input: LocatedFlexLayoutInput): TailwindStrategyResult | undefined {\n return planners.get(input.directive as IndependentDirective)?.(input.value);\n}\n","import type { TemplateAttribute } from './template.model';\n\nexport function templateAttributeKeys(attribute: TemplateAttribute): ReadonlySet<string> {\n const semanticKey = attribute.name.toLowerCase();\n const rawName = attribute.rawName.toLowerCase();\n const rawKey =\n attribute.binding !== 'property'\n ? rawName\n : rawName.startsWith('[') && rawName.endsWith(']')\n ? rawName.slice(1, -1)\n : rawName.startsWith('bind-')\n ? rawName.slice('bind-'.length)\n : rawName;\n return new Set([rawKey, semanticKey]);\n}\n","export const FLEX_LAYOUT_DIRECTIVES = [\n 'fxLayout',\n 'fxLayoutAlign',\n 'fxLayoutGap',\n 'fxFlex',\n 'fxGrow',\n 'fxShrink',\n 'fxFlexAlign',\n 'fxFlexFill',\n 'fxFill',\n 'fxFlexOffset',\n 'fxFlexOrder',\n 'fxShow',\n 'fxHide',\n 'gdAlignColumns',\n 'gdAlignRows',\n 'gdArea',\n 'gdAreas',\n 'gdAuto',\n 'gdColumn',\n 'gdColumns',\n 'gdGap',\n 'gdGridAlign',\n 'gdRow',\n 'gdRows',\n 'class',\n 'ngClass',\n 'style',\n 'ngStyle',\n 'imgSrc',\n] as const;\n\nexport type FlexLayoutDirective = (typeof FLEX_LAYOUT_DIRECTIVES)[number];\n\nexport const DEFAULT_BREAKPOINTS = [\n 'xs',\n 'sm',\n 'md',\n 'lg',\n 'xl',\n 'lt-sm',\n 'lt-md',\n 'lt-lg',\n 'lt-xl',\n 'gt-xs',\n 'gt-sm',\n 'gt-md',\n 'gt-lg',\n] as const;\n\nexport type DefaultBreakpoint = (typeof DEFAULT_BREAKPOINTS)[number];\n\nexport const ORIENTATION_BREAKPOINTS = [\n 'handset',\n 'handset.portrait',\n 'handset.landscape',\n 'tablet',\n 'tablet.portrait',\n 'tablet.landscape',\n 'web',\n 'web.portrait',\n 'web.landscape',\n] as const;\n\nexport const SPECIAL_BREAKPOINTS = ['print'] as const;\n\nexport type KnownBreakpoint =\n DefaultBreakpoint | (typeof ORIENTATION_BREAKPOINTS)[number] | (typeof SPECIAL_BREAKPOINTS)[number];\n\nconst directiveNames = new Set<string>(FLEX_LAYOUT_DIRECTIVES);\nconst breakpointNames = new Set<string>([...DEFAULT_BREAKPOINTS, ...ORIENTATION_BREAKPOINTS, ...SPECIAL_BREAKPOINTS]);\n\nexport function isFlexLayoutDirective(value: string): value is FlexLayoutDirective {\n return directiveNames.has(value);\n}\n\nexport function isKnownBreakpoint(value: string): value is KnownBreakpoint {\n return breakpointNames.has(value);\n}\n","import { ORIENTATION_BREAKPOINTS, type DefaultBreakpoint } from '../analyzer/flex-layout.catalog';\n\nexport interface MediaRange {\n readonly min?: number;\n readonly max?: number;\n}\n\nexport interface BreakpointDefinition {\n readonly alias: DefaultBreakpoint;\n readonly range: MediaRange;\n readonly priority: number;\n}\n\nexport type BreakpointClassification =\n | { readonly kind: 'verified'; readonly definition: BreakpointDefinition }\n | { readonly kind: 'optional'; readonly alias: string }\n | { readonly kind: 'print'; readonly alias: 'print' }\n | { readonly kind: 'custom'; readonly alias: string };\n\nfunction freezeDefinition(definition: BreakpointDefinition): BreakpointDefinition {\n return Object.freeze({\n ...definition,\n range: Object.freeze({ ...definition.range }),\n });\n}\n\nconst breakpointDefinitions: readonly BreakpointDefinition[] = [\n { alias: 'xs', range: { min: 0, max: 599.98 }, priority: 1000 },\n { alias: 'sm', range: { min: 600, max: 959.98 }, priority: 900 },\n { alias: 'md', range: { min: 960, max: 1279.98 }, priority: 800 },\n { alias: 'lg', range: { min: 1280, max: 1919.98 }, priority: 700 },\n { alias: 'xl', range: { min: 1920, max: 4999.98 }, priority: 600 },\n { alias: 'lt-sm', range: { min: undefined, max: 599.98 }, priority: 950 },\n { alias: 'lt-md', range: { min: undefined, max: 959.98 }, priority: 850 },\n { alias: 'lt-lg', range: { min: undefined, max: 1279.98 }, priority: 750 },\n { alias: 'lt-xl', range: { min: undefined, max: 1919.98 }, priority: 650 },\n { alias: 'gt-xs', range: { min: 600, max: undefined }, priority: -950 },\n { alias: 'gt-sm', range: { min: 960, max: undefined }, priority: -850 },\n { alias: 'gt-md', range: { min: 1280, max: undefined }, priority: -750 },\n { alias: 'gt-lg', range: { min: 1920, max: undefined }, priority: -650 },\n];\n\nconst definitions = Object.freeze(breakpointDefinitions.map(freezeDefinition));\n\nconst definitionsByAlias = new Map(definitions.map(definition => [definition.alias, definition]));\nconst optionalAliases = new Set<string>(ORIENTATION_BREAKPOINTS);\n\nexport class BreakpointCatalog {\n classify(alias: string): BreakpointClassification {\n const definition = definitionsByAlias.get(alias as DefaultBreakpoint);\n\n if (definition) {\n return { kind: 'verified', definition };\n }\n\n if (optionalAliases.has(alias)) {\n return { kind: 'optional', alias };\n }\n\n if (alias === 'print') {\n return { kind: 'print', alias };\n }\n\n return { kind: 'custom', alias };\n }\n}\n\nexport function mediaRangesIntersect(left: MediaRange, right: MediaRange): boolean {\n const leftMin = left.min ?? Number.NEGATIVE_INFINITY;\n const leftMax = left.max ?? Number.POSITIVE_INFINITY;\n const rightMin = right.min ?? Number.NEGATIVE_INFINITY;\n const rightMax = right.max ?? Number.POSITIVE_INFINITY;\n\n return leftMin <= rightMax && rightMin <= leftMax;\n}\n","export interface TailwindArbitrarySyntax {\n readonly important: boolean;\n}\n\nconst closingByOpening = new Map([\n ['(', ')'],\n ['[', ']'],\n ['{', '}'],\n]);\n\nexport function analyzeTailwindArbitrarySyntax(value: string): TailwindArbitrarySyntax | undefined {\n if (!value.startsWith('[') || !value.endsWith(']')) return undefined;\n const inner = value.slice(1, -1);\n if (inner.trim().length === 0) return undefined;\n\n const stack: string[] = [];\n let quote: '\"' | \"'\" | undefined;\n let typedSeparator = -1;\n let topLevelValue = '';\n\n for (let index = 0; index < inner.length; index += 1) {\n const character = inner[index];\n if (character === undefined) return undefined;\n const codePoint = character.codePointAt(0);\n if (codePoint === undefined || codePoint <= 0x1f || codePoint === 0x7f) return undefined;\n\n if (quote !== undefined) {\n if (character === '\\\\') {\n if (inner[index + 1] === undefined) return undefined;\n index += 1;\n } else if (character === quote) {\n quote = undefined;\n }\n continue;\n }\n\n if (character === '/' && inner[index + 1] === '*') {\n const commentEnd = inner.indexOf('*/', index + 2);\n if (commentEnd < 0) return undefined;\n if (stack.length === 0) topLevelValue += ' ';\n index = commentEnd + 1;\n continue;\n }\n\n if (character === '\\\\') {\n const escaped = inner[index + 1];\n if (escaped === undefined || escaped === '\\n' || escaped === '\\r' || escaped === '\\f') return undefined;\n if (stack.length === 0) topLevelValue += escaped === '_' ? '_' : 'x';\n index += 1;\n continue;\n }\n\n if (character === '\"' || character === \"'\") {\n if (stack.length === 0) topLevelValue += 'x';\n quote = character;\n continue;\n }\n\n const closing = closingByOpening.get(character);\n if (closing !== undefined) {\n if (stack.length === 0) topLevelValue += 'x';\n stack.push(closing);\n continue;\n }\n if ([')', ']', '}'].includes(character)) {\n if (stack.pop() !== character) return undefined;\n continue;\n }\n if (stack.length !== 0) continue;\n\n if (character === ';') return undefined;\n if (character === ':' && typedSeparator < 0) typedSeparator = index;\n topLevelValue += character === '_' ? ' ' : character;\n }\n\n if (quote !== undefined || stack.length !== 0) return undefined;\n if (\n typedSeparator >= 0 &&\n (inner.slice(0, typedSeparator).trim().length === 0 || inner.slice(typedSeparator + 1).trim().length === 0)\n ) {\n return undefined;\n }\n\n return { important: /!\\s*important\\s*$/iu.test(topLevelValue) };\n}\n\nexport function hasValidTailwindArbitrarySyntax(value: string): boolean {\n return analyzeTailwindArbitrarySyntax(value) !== undefined;\n}\n","type CssPropertyOwnership =\n | { readonly kind: 'universal' }\n | { readonly kind: 'known'; readonly longhands: ReadonlySet<string> }\n | { readonly kind: 'unknown'; readonly property: string }\n | { readonly kind: 'custom'; readonly property: string };\n\nconst edges = ['top', 'right', 'bottom', 'left'] as const;\n\nfunction edgeLonghands(prefix: string, suffix?: string): readonly string[] {\n return edges.map(edge => `${prefix}-${edge}${suffix === undefined ? '' : `-${suffix}`}`);\n}\n\nconst physicalBorderWidths = edgeLonghands('border', 'width');\nconst physicalBorderStyles = edgeLonghands('border', 'style');\nconst physicalBorderColors = edgeLonghands('border', 'color');\nconst logicalBorderWidths = [\n 'border-inline-start-width',\n 'border-inline-end-width',\n 'border-block-start-width',\n 'border-block-end-width',\n] as const;\nconst logicalBorderStyles = [\n 'border-inline-start-style',\n 'border-inline-end-style',\n 'border-block-start-style',\n 'border-block-end-style',\n] as const;\nconst logicalBorderColors = [\n 'border-inline-start-color',\n 'border-inline-end-color',\n 'border-block-start-color',\n 'border-block-end-color',\n] as const;\nconst borderWidths = [...physicalBorderWidths, ...logicalBorderWidths];\nconst borderStyles = [...physicalBorderStyles, ...logicalBorderStyles];\nconst borderColors = [...physicalBorderColors, ...logicalBorderColors];\nconst borderImage = [\n 'border-image-source',\n 'border-image-slice',\n 'border-image-width',\n 'border-image-outset',\n 'border-image-repeat',\n] as const;\n\nconst shorthandLonghands = new Map<string, readonly string[]>([\n [\n 'margin',\n [...edgeLonghands('margin'), 'margin-inline-start', 'margin-inline-end', 'margin-block-start', 'margin-block-end'],\n ],\n ['margin-inline', ['margin-inline-start', 'margin-inline-end', 'margin-left', 'margin-right']],\n ['margin-block', ['margin-block-start', 'margin-block-end', 'margin-top', 'margin-bottom']],\n ['margin-inline-start', ['margin-inline-start', 'margin-left', 'margin-right']],\n ['margin-inline-end', ['margin-inline-end', 'margin-left', 'margin-right']],\n [\n 'padding',\n [\n ...edgeLonghands('padding'),\n 'padding-inline-start',\n 'padding-inline-end',\n 'padding-block-start',\n 'padding-block-end',\n ],\n ],\n ['padding-inline', ['padding-inline-start', 'padding-inline-end', 'padding-left', 'padding-right']],\n ['padding-block', ['padding-block-start', 'padding-block-end', 'padding-top', 'padding-bottom']],\n ['padding-inline-start', ['padding-inline-start', 'padding-left', 'padding-right']],\n ['padding-inline-end', ['padding-inline-end', 'padding-left', 'padding-right']],\n ['inset', [...edges, 'inset-inline-start', 'inset-inline-end', 'inset-block-start', 'inset-block-end']],\n ['inset-inline', ['inset-inline-start', 'inset-inline-end', 'left', 'right']],\n ['inset-block', ['inset-block-start', 'inset-block-end', 'top', 'bottom']],\n ['gap', ['row-gap', 'column-gap']],\n [\n 'font',\n [\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'font-stretch',\n 'font-size',\n 'line-height',\n 'font-family',\n 'font-size-adjust',\n 'font-kerning',\n 'font-optical-sizing',\n 'font-feature-settings',\n 'font-variation-settings',\n 'font-language-override',\n ],\n ],\n [\n 'background',\n [\n 'background-image',\n 'background-position',\n 'background-size',\n 'background-repeat',\n 'background-origin',\n 'background-clip',\n 'background-attachment',\n 'background-color',\n ],\n ],\n ['border', [...borderWidths, ...borderStyles, ...borderColors, ...borderImage]],\n ['border-top', ['border-top-width', 'border-top-style', 'border-top-color']],\n ['border-right', ['border-right-width', 'border-right-style', 'border-right-color']],\n ['border-bottom', ['border-bottom-width', 'border-bottom-style', 'border-bottom-color']],\n ['border-left', ['border-left-width', 'border-left-style', 'border-left-color']],\n ['border-width', borderWidths],\n [\n 'border-inline-width',\n ['border-inline-start-width', 'border-inline-end-width', 'border-left-width', 'border-right-width'],\n ],\n ['border-block-width', ['border-block-start-width', 'border-block-end-width', ...physicalBorderWidths]],\n ['border-inline-start-width', ['border-inline-start-width', 'border-left-width', 'border-right-width']],\n ['border-inline-end-width', ['border-inline-end-width', 'border-left-width', 'border-right-width']],\n ['border-block-start-width', ['border-block-start-width', ...physicalBorderWidths]],\n ['border-block-end-width', ['border-block-end-width', ...physicalBorderWidths]],\n ['border-style', borderStyles],\n [\n 'border-inline-style',\n ['border-inline-start-style', 'border-inline-end-style', 'border-left-style', 'border-right-style'],\n ],\n ['border-block-style', ['border-block-start-style', 'border-block-end-style', ...physicalBorderStyles]],\n ['border-inline-start-style', ['border-inline-start-style', 'border-left-style', 'border-right-style']],\n ['border-inline-end-style', ['border-inline-end-style', 'border-left-style', 'border-right-style']],\n ['border-block-start-style', ['border-block-start-style', ...physicalBorderStyles]],\n ['border-block-end-style', ['border-block-end-style', ...physicalBorderStyles]],\n ['border-color', borderColors],\n [\n 'border-inline-color',\n ['border-inline-start-color', 'border-inline-end-color', 'border-left-color', 'border-right-color'],\n ],\n ['border-block-color', ['border-block-start-color', 'border-block-end-color', ...physicalBorderColors]],\n ['border-inline-start-color', ['border-inline-start-color', 'border-left-color', 'border-right-color']],\n ['border-inline-end-color', ['border-inline-end-color', 'border-left-color', 'border-right-color']],\n ['border-block-start-color', ['border-block-start-color', ...physicalBorderColors]],\n ['border-block-end-color', ['border-block-end-color', ...physicalBorderColors]],\n [\n 'border-radius',\n [\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-bottom-right-radius',\n 'border-bottom-left-radius',\n 'border-start-start-radius',\n 'border-start-end-radius',\n 'border-end-start-radius',\n 'border-end-end-radius',\n ],\n ],\n ['border-image', borderImage],\n ['overflow', ['overflow-x', 'overflow-y']],\n ['flex', ['flex-grow', 'flex-shrink', 'flex-basis']],\n [\n 'transition',\n [\n 'transition-property',\n 'transition-duration',\n 'transition-timing-function',\n 'transition-delay',\n 'transition-behavior',\n ],\n ],\n ['grid-template', ['grid-template-rows', 'grid-template-columns', 'grid-template-areas']],\n ['grid-column', ['grid-column-start', 'grid-column-end']],\n ['grid-row', ['grid-row-start', 'grid-row-end']],\n [\n 'grid',\n [\n 'grid-template-rows',\n 'grid-template-columns',\n 'grid-template-areas',\n 'grid-auto-rows',\n 'grid-auto-columns',\n 'grid-auto-flow',\n ],\n ],\n ['list-style', ['list-style-type', 'list-style-position', 'list-style-image']],\n ['columns', ['column-width', 'column-count']],\n ['column-rule', ['column-rule-width', 'column-rule-style', 'column-rule-color']],\n ['outline', ['outline-width', 'outline-style', 'outline-color']],\n [\n 'text-decoration',\n ['text-decoration-line', 'text-decoration-style', 'text-decoration-color', 'text-decoration-thickness'],\n ],\n ['place-content', ['align-content', 'justify-content']],\n ['place-items', ['align-items', 'justify-items']],\n ['place-self', ['align-self', 'justify-self']],\n [\n 'animation',\n [\n 'animation-name',\n 'animation-duration',\n 'animation-timing-function',\n 'animation-delay',\n 'animation-iteration-count',\n 'animation-direction',\n 'animation-fill-mode',\n 'animation-play-state',\n 'animation-timeline',\n 'animation-range-start',\n 'animation-range-end',\n ],\n ],\n]);\n\nconst knownIndependentProperties = new Set([\n ...[...shorthandLonghands.values()].flatMap(longhands => [...longhands]),\n 'display',\n 'box-sizing',\n 'flex-direction',\n 'flex-wrap',\n 'justify-items',\n 'justify-self',\n 'width',\n 'height',\n 'min-width',\n 'min-height',\n 'max-width',\n 'max-height',\n 'color',\n 'text-align',\n 'text-wrap',\n 'background-blend-mode',\n 'background-size',\n 'background-attachment',\n 'background-clip',\n 'background-origin',\n 'background-position',\n 'background-repeat',\n 'box-shadow',\n 'opacity',\n 'position',\n 'transform',\n 'translate',\n 'rotate',\n 'scale',\n 'transform-origin',\n 'order',\n 'grid-column-start',\n 'grid-column-end',\n 'grid-row-start',\n 'grid-row-end',\n 'grid-auto-columns',\n 'grid-auto-rows',\n 'table-layout',\n 'object-fit',\n 'object-position',\n 'cursor',\n 'pointer-events',\n 'visibility',\n 'clip',\n 'clip-path',\n 'white-space',\n 'text-overflow',\n 'content',\n 'z-index',\n]);\n\nfunction ownership(property: string): CssPropertyOwnership {\n if (property.startsWith('--')) return { kind: 'custom', property };\n\n const normalized = property.toLowerCase();\n if (normalized === 'all') return { kind: 'universal' };\n const expanded = shorthandLonghands.get(normalized);\n if (expanded !== undefined) return { kind: 'known', longhands: new Set(expanded) };\n if (knownIndependentProperties.has(normalized)) {\n return { kind: 'known', longhands: new Set([normalized]) };\n }\n return { kind: 'unknown', property: normalized };\n}\n\nexport function cssPropertiesOverlap(leftProperty: string, rightProperty: string): boolean {\n const left = ownership(leftProperty);\n const right = ownership(rightProperty);\n\n if (left.kind === 'custom' || right.kind === 'custom') {\n return left.kind === 'custom' && right.kind === 'custom' && left.property === right.property;\n }\n if (left.kind === 'universal' || right.kind === 'universal') return true;\n if (left.kind === 'unknown' || right.kind === 'unknown') return true;\n return [...left.longhands].some(longhand => right.longhands.has(longhand));\n}\n\nexport function cssPropertyOwnershipCovers(ownerProperty: string, targetProperty: string): boolean {\n const owner = ownership(ownerProperty);\n const target = ownership(targetProperty);\n\n if (owner.kind === 'custom' || target.kind === 'custom') {\n return owner.kind === 'custom' && target.kind === 'custom' && owner.property === target.property;\n }\n if (owner.kind === 'universal') return true;\n if (target.kind === 'universal') return false;\n if (owner.kind === 'unknown' || target.kind === 'unknown') {\n return owner.kind === 'unknown' && target.kind === 'unknown' && owner.property === target.property;\n }\n return [...target.longhands].every(longhand => owner.longhands.has(longhand));\n}\n","const cssLengthUnits = new Set([\n 'cm',\n 'mm',\n 'Q',\n 'in',\n 'pc',\n 'pt',\n 'px',\n 'em',\n 'ex',\n 'ch',\n 'rem',\n 'lh',\n 'rlh',\n 'vw',\n 'vh',\n 'vmin',\n 'vmax',\n 'vb',\n 'vi',\n 'svw',\n 'svh',\n 'lvw',\n 'lvh',\n 'dvw',\n 'dvh',\n 'cqw',\n 'cqh',\n 'cqi',\n 'cqb',\n 'cqmin',\n 'cqmax',\n]);\n\nconst cssColorKeywords = new Set(\n `black silver gray white maroon red purple fuchsia green lime olive yellow navy blue teal aqua aliceblue\n antiquewhite aquamarine azure beige bisque blanchedalmond blueviolet brown burlywood cadetblue chartreuse\n chocolate coral cornflowerblue cornsilk crimson cyan darkblue darkcyan darkgoldenrod darkgray darkgreen darkgrey\n darkkhaki darkmagenta darkolivegreen darkorange darkorchid darkred darksalmon darkseagreen darkslateblue\n darkslategray darkslategrey darkturquoise darkviolet deeppink deepskyblue dimgray dimgrey dodgerblue firebrick\n floralwhite forestgreen gainsboro ghostwhite gold goldenrod greenyellow grey honeydew hotpink indianred indigo ivory\n khaki lavender lavenderblush lawngreen lemonchiffon lightblue lightcoral lightcyan lightgoldenrodyellow lightgray\n lightgreen lightgrey lightpink lightsalmon lightseagreen lightskyblue lightslategray lightslategrey lightsteelblue\n lightyellow limegreen linen magenta mediumaquamarine mediumblue mediumorchid mediumpurple mediumseagreen\n mediumslateblue mediumspringgreen mediumturquoise mediumvioletred midnightblue mintcream mistyrose moccasin\n navajowhite oldlace olivedrab orange orangered orchid palegoldenrod palegreen paleturquoise palevioletred papayawhip\n peachpuff peru pink plum powderblue rebeccapurple rosybrown royalblue saddlebrown salmon sandybrown seagreen\n seashell sienna skyblue slateblue slategray slategrey snow springgreen steelblue tan thistle tomato turquoise violet\n wheat whitesmoke yellowgreen transparent currentcolor canvas canvastext linktext visitedtext activetext buttonface\n buttontext buttonborder field fieldtext highlight highlighttext selecteditem selecteditemtext mark marktext graytext\n accentcolor accentcolortext`\n .split(/\\s+/u)\n .filter(Boolean),\n);\n\nconst absoluteFontSizes = new Set([\n 'xx-small',\n 'x-small',\n 'small',\n 'medium',\n 'large',\n 'x-large',\n 'xx-large',\n 'xxx-large',\n]);\nconst relativeFontSizes = new Set(['larger', 'smaller']);\nconst defaultTailwindColorNames = new Set([\n 'red',\n 'orange',\n 'amber',\n 'yellow',\n 'lime',\n 'green',\n 'emerald',\n 'teal',\n 'cyan',\n 'sky',\n 'blue',\n 'indigo',\n 'violet',\n 'purple',\n 'fuchsia',\n 'pink',\n 'rose',\n 'slate',\n 'gray',\n 'zinc',\n 'neutral',\n 'stone',\n]);\nconst defaultTailwindColorShades = new Set([\n '50',\n '100',\n '200',\n '300',\n '400',\n '500',\n '600',\n '700',\n '800',\n '900',\n '950',\n]);\n\nconst unsignedDecimal = /^(?:(?:\\d+(?:\\.\\d+)?)|(?:\\.\\d+))$/u;\nconst signedCssNumber = /^[+-]?(?:\\d*\\.)?\\d+(?:e[+-]?\\d+)?$/iu;\nconst mathFunction = /(?:calc|min|max|clamp|mod|rem|sin|cos|tan|asin|acos|atan|atan2|pow|sqrt|hypot|log|exp|round)\\(/u;\nconst colorFunction = /^(?:rgba?|hsla?|hwb|color|(?:ok)?(?:lab|lch)|light-dark|color-mix|--alpha)\\(/iu;\n\ninterface ArbitraryValue {\n readonly hint?: string;\n readonly payload: string;\n}\n\nfunction arbitraryValue(value: string): ArbitraryValue | undefined {\n if (!value.startsWith('[') || !value.endsWith(']')) return undefined;\n const inner = value.slice(1, -1);\n const hinted = inner.match(/^([a-z][a-z-]*):([\\s\\S]+)$/u);\n return hinted === null ? { payload: inner } : { hint: hinted[1], payload: hinted[2] ?? '' };\n}\n\nfunction splitNumberAndUnit(value: string): { readonly number: string; readonly unit?: string } | undefined {\n const match = value.match(/^((?:(?:\\d+(?:\\.\\d+)?)|(?:\\.\\d+)))([a-zA-Z%]+)?$/u);\n if (match === null) return undefined;\n return { number: match[1] ?? '', unit: match[2] };\n}\n\nfunction isUnsignedLength(value: string, allowPercentage: boolean, allowUnitless: boolean): boolean {\n const parsed = splitNumberAndUnit(value);\n if (parsed === undefined || !unsignedDecimal.test(parsed.number)) return false;\n if (parsed.unit === undefined) return allowUnitless;\n return (allowPercentage && parsed.unit === '%') || cssLengthUnits.has(parsed.unit);\n}\n\nexport function isConservativelyAdmittedTextLength(value: string): boolean {\n const arbitrary = arbitraryValue(value);\n if (arbitrary === undefined) return false;\n if (arbitrary.hint !== undefined && arbitrary.hint !== 'length') return false;\n if (arbitrary.hint === 'length' && arbitrary.payload === '0') return true;\n return isUnsignedLength(arbitrary.payload, true, false);\n}\n\nexport function isConservativelyAdmittedBorderWidth(value: string): boolean {\n const arbitrary = arbitraryValue(value);\n if (arbitrary === undefined) return false;\n if (arbitrary.hint !== undefined && arbitrary.hint !== 'length') return false;\n if (arbitrary.hint === 'length' && arbitrary.payload === '0') return true;\n return isUnsignedLength(arbitrary.payload, false, arbitrary.hint === undefined);\n}\n\nfunction isTailwindLength(value: string): boolean {\n if (/^--spacing\\(/iu.test(value)) return true;\n if (mathFunction.test(value)) return true;\n const match = value.match(/^([+-]?(?:\\d*\\.)?\\d+(?:e[+-]?\\d+)?)([a-zA-Z]+)$/iu);\n return match !== null && signedCssNumber.test(match[1] ?? '') && cssLengthUnits.has(match[2] ?? '');\n}\n\nfunction isTailwindPercentage(value: string): boolean {\n return /^[+-]?(?:\\d*\\.)?\\d+(?:e[+-]?\\d+)?%$/iu.test(value) || mathFunction.test(value);\n}\n\nfunction decodedInferenceValue(value: string): string | undefined {\n if (value.includes('\\\\')) return undefined;\n return value.replaceAll('_', ' ');\n}\n\ntype TailwindDataType = 'color' | 'length' | 'percentage' | 'absolute-size' | 'relative-size' | 'line-width';\n\nfunction inferTailwindDataType(value: string, types: readonly TailwindDataType[]): TailwindDataType | undefined {\n if (value.startsWith('var(')) return undefined;\n\n for (const type of types) {\n if (\n type === 'color' &&\n (value.startsWith('#') || colorFunction.test(value) || cssColorKeywords.has(value.toLowerCase()))\n ) {\n return type;\n }\n if (type === 'length' && isTailwindLength(value)) return type;\n if (type === 'percentage' && isTailwindPercentage(value)) return type;\n if (type === 'absolute-size' && absoluteFontSizes.has(value)) return type;\n if (type === 'relative-size' && relativeFontSizes.has(value)) return type;\n if (type === 'line-width') {\n const parts = value.split(' ');\n if (\n parts.length > 0 &&\n parts.every(\n part =>\n part.length > 0 &&\n (isTailwindLength(part) || signedCssNumber.test(part) || ['thin', 'medium', 'thick'].includes(part)),\n )\n ) {\n return type;\n }\n }\n }\n return undefined;\n}\n\nexport function isPinnedTailwindColorToken(value: string): boolean {\n const [color, opacity, remainder] = value.split('/');\n if (remainder !== undefined || color === undefined) return false;\n const standard = ['inherit', 'current', 'transparent', 'black', 'white'].includes(color);\n const [name, shade, extra] = color.split('-');\n const palette =\n extra === undefined &&\n name !== undefined &&\n shade !== undefined &&\n defaultTailwindColorNames.has(name) &&\n defaultTailwindColorShades.has(shade);\n if (!standard && !palette) return false;\n if (opacity === undefined) return true;\n if (!/^(?:0|[1-9]\\d*)(?:\\.\\d+)?$/u.test(opacity)) return false;\n const numericOpacity = Number(opacity);\n return numericOpacity >= 0 && numericOpacity <= 100;\n}\n\nexport function tailwindArbitraryTextKind(value: string): 'color' | 'font-size' | 'unknown' {\n const arbitrary = arbitraryValue(value);\n if (arbitrary === undefined) return 'unknown';\n if (['size', 'length', 'percentage', 'absolute-size', 'relative-size'].includes(arbitrary.hint ?? '')) {\n return 'font-size';\n }\n if (arbitrary.hint === 'color') return 'color';\n if (arbitrary.hint !== undefined) return 'unknown';\n const payload = decodedInferenceValue(arbitrary.payload);\n if (payload === undefined || payload.length === 0) return 'unknown';\n const inferred = inferTailwindDataType(payload, ['color', 'length', 'percentage', 'absolute-size', 'relative-size']);\n return inferred !== undefined && inferred !== 'color' ? 'font-size' : 'color';\n}\n\nfunction isTailwindBackgroundPosition(value: string): boolean {\n let recognized = 0;\n for (const part of value.split(' ')) {\n if (['center', 'top', 'right', 'bottom', 'left'].includes(part)) {\n recognized += 1;\n continue;\n }\n if (part.startsWith('var(')) continue;\n if (!isTailwindLength(part) && !isTailwindPercentage(part)) return false;\n recognized += 1;\n }\n return recognized > 0;\n}\n\nfunction isTailwindBackgroundSize(value: string): boolean {\n let recognized = 0;\n for (const layer of value.split(',')) {\n if (layer === 'cover' || layer === 'contain') {\n recognized += 1;\n continue;\n }\n const parts = layer.split(' ');\n if (\n (parts.length !== 1 && parts.length !== 2) ||\n !parts.every(part => part === 'auto' || isTailwindLength(part) || isTailwindPercentage(part))\n ) {\n return false;\n }\n recognized += 1;\n }\n return recognized > 0;\n}\n\nfunction splitTopLevelCommas(value: string): readonly string[] | undefined {\n const closingByOpening = new Map([\n ['(', ')'],\n ['[', ']'],\n ['{', '}'],\n ]);\n const stack: string[] = [];\n const parts: string[] = [];\n let quote: '\"' | \"'\" | undefined;\n let start = 0;\n\n for (let index = 0; index < value.length; index += 1) {\n const character = value[index];\n if (character === undefined) return undefined;\n if (quote !== undefined) {\n if (character === '\\\\') index += 1;\n else if (character === quote) quote = undefined;\n continue;\n }\n if (character === '\\\\') {\n index += 1;\n continue;\n }\n if (character === '\"' || character === \"'\") {\n quote = character;\n continue;\n }\n const closing = closingByOpening.get(character);\n if (closing !== undefined) {\n stack.push(closing);\n continue;\n }\n if ([')', ']', '}'].includes(character)) {\n if (stack.pop() !== character) return undefined;\n continue;\n }\n if (character === ',' && stack.length === 0) {\n parts.push(value.slice(start, index));\n start = index + 1;\n }\n }\n if (quote !== undefined || stack.length > 0) return undefined;\n parts.push(value.slice(start));\n return parts;\n}\n\nfunction isTailwindBackgroundImage(value: string): boolean {\n const layers = splitTopLevelCommas(value);\n if (layers === undefined) return false;\n let recognized = 0;\n for (const layer of layers) {\n const normalized = layer.trim();\n if (normalized.startsWith('var(')) continue;\n if (\n !/^(?:url|(?:repeating-)?(?:linear|radial|conic)-gradient|element|image|cross-fade|image-set)\\([\\s\\S]*\\)$/u.test(\n normalized,\n )\n ) {\n return false;\n }\n recognized += 1;\n }\n return recognized > 0;\n}\n\nexport function tailwindArbitraryBackgroundKind(\n value: string,\n): 'background-color' | 'background-image' | 'background-position' | 'background-size' | 'unknown' {\n const arbitrary = arbitraryValue(value);\n if (arbitrary === undefined) return 'unknown';\n if (arbitrary.hint === 'percentage' || arbitrary.hint === 'position') return 'background-position';\n if (['bg-size', 'length', 'size'].includes(arbitrary.hint ?? '')) return 'background-size';\n if (arbitrary.hint === 'image' || arbitrary.hint === 'url') return 'background-image';\n if (arbitrary.hint === 'color') return 'background-color';\n if (arbitrary.hint !== undefined) return 'unknown';\n\n const payload = decodedInferenceValue(arbitrary.payload);\n if (payload === undefined || payload.length === 0) return 'unknown';\n if (payload.startsWith('var(')) return 'unknown';\n if (isTailwindBackgroundImage(payload)) return 'background-image';\n if (inferTailwindDataType(payload, ['color']) === 'color') return 'background-color';\n\n const position = isTailwindBackgroundPosition(payload);\n const size = isTailwindBackgroundSize(payload);\n if (position === size) return 'unknown';\n return position ? 'background-position' : 'background-size';\n}\n\nexport function tailwindArbitraryBorderKind(value: string): 'border-color' | 'border-width' | 'unknown' {\n const arbitrary = arbitraryValue(value);\n if (arbitrary === undefined) return 'unknown';\n if (arbitrary.hint === 'length' || arbitrary.hint === 'line-width') return 'border-width';\n if (arbitrary.hint === 'color') return 'border-color';\n if (arbitrary.hint !== undefined) return 'unknown';\n const payload = decodedInferenceValue(arbitrary.payload);\n if (payload === undefined || payload.length === 0) return 'unknown';\n const inferred = inferTailwindDataType(payload, ['color', 'line-width', 'length']);\n return inferred === 'line-width' || inferred === 'length' ? 'border-width' : 'border-color';\n}\n\nexport function tailwindArbitraryShadowKind(value: string): 'shadow-color' | 'shadow-geometry' | 'unknown' {\n const arbitrary = arbitraryValue(value);\n if (arbitrary === undefined) return 'unknown';\n if (arbitrary.hint === 'color') return 'shadow-color';\n if (arbitrary.hint !== undefined) return 'unknown';\n const payload = decodedInferenceValue(arbitrary.payload);\n if (payload === undefined || payload.length === 0) return 'unknown';\n return inferTailwindDataType(payload, ['color']) === 'color' ? 'shadow-color' : 'shadow-geometry';\n}\n","import { mediaRangesIntersect, type MediaRange } from '../../breakpoint/breakpoint-catalog';\nimport { analyzeTailwindArbitrarySyntax } from './tailwind-arbitrary-syntax';\nimport { cssPropertiesOverlap } from './extended/css-property-ownership';\nimport {\n isPinnedTailwindColorToken,\n tailwindArbitraryBackgroundKind,\n tailwindArbitraryBorderKind,\n tailwindArbitraryShadowKind,\n tailwindArbitraryTextKind,\n} from './extended/tailwind-arbitrary-value-ownership';\n\nexport type TailwindActivation = { readonly kind: 'base' } | { readonly kind: 'media'; readonly range: MediaRange };\n\nexport interface TailwindDisplayUtility {\n readonly token: string;\n readonly utility: string;\n readonly activation: TailwindActivation;\n readonly important: boolean;\n}\n\nexport interface TailwindUtilityDescriptor {\n readonly token: string;\n readonly variants: readonly string[];\n readonly utility: string;\n readonly cssProperties: readonly string[];\n readonly hasUnknownCssAuthority?: true;\n readonly activation: TailwindActivation;\n readonly hasGeneratedMediaVariant: boolean;\n readonly important: boolean;\n}\n\nconst displayUtilities = new Set([\n 'inline',\n 'block',\n 'inline-block',\n 'flow-root',\n 'flex',\n 'inline-flex',\n 'grid',\n 'inline-grid',\n 'contents',\n 'table',\n 'inline-table',\n 'table-caption',\n 'table-cell',\n 'table-column',\n 'table-column-group',\n 'table-footer-group',\n 'table-header-group',\n 'table-row-group',\n 'table-row',\n 'list-item',\n 'hidden',\n]);\n\nconst generatedMediaVariant =\n /^\\[@media_screen_and_(?:(?:\\(min-width:_(\\d+(?:\\.\\d+)?)px\\))(?:_and_\\(max-width:_(\\d+(?:\\.\\d+)?)px\\))?|\\(max-width:_(\\d+(?:\\.\\d+)?)px\\))\\]$/u;\n\nfunction splitVariants(\n className: string,\n): { readonly variants: readonly string[]; readonly utility: string } | undefined {\n let bracketDepth = 0;\n let escaped = false;\n let segmentStart = 0;\n const segments: string[] = [];\n\n for (let index = 0; index < className.length; index += 1) {\n const character = className[index];\n if (escaped) {\n escaped = false;\n continue;\n }\n if (character === '\\\\') {\n escaped = true;\n } else if (character === '[') {\n bracketDepth += 1;\n } else if (character === ']') {\n if (bracketDepth === 0) return undefined;\n bracketDepth -= 1;\n } else if (character === ':' && bracketDepth === 0) {\n const segment = className.slice(segmentStart, index);\n if (segment.length === 0) return undefined;\n segments.push(segment);\n segmentStart = index + 1;\n }\n }\n\n if (escaped || bracketDepth !== 0) return undefined;\n\n const utility = className.slice(segmentStart);\n if (utility.length === 0) return undefined;\n return { variants: Object.freeze(segments), utility };\n}\n\nfunction activation(variants: readonly string[]): TailwindActivation {\n for (const variant of variants) {\n const match = variant.match(generatedMediaVariant);\n if (!match) continue;\n const min = match[1] === undefined ? undefined : Number(match[1]);\n const maxValue = match[2] ?? match[3];\n const max = maxValue === undefined ? undefined : Number(maxValue);\n if (min !== undefined && max !== undefined && min > max) continue;\n return { kind: 'media', range: { min, max } };\n }\n\n return { kind: 'base' };\n}\n\nfunction hasGeneratedMediaVariant(variants: readonly string[]): boolean {\n return variants.some(variant => variant.startsWith('[@media_screen_and_'));\n}\n\nfunction hasInternalDeclarationImportance(utility: string): boolean {\n const arbitraryStart = utility.indexOf('[');\n if (arbitraryStart < 0) return false;\n return analyzeTailwindArbitrarySyntax(utility.slice(arbitraryStart))?.important ?? false;\n}\n\ntype CssAuthority = readonly string[] | 'unknown';\n\nconst textSizes = new Set(['xs', 'sm', 'base', 'lg', 'xl', '2xl', '3xl', '4xl', '5xl', '6xl', '7xl', '8xl', '9xl']);\nconst shadowGeometryNames = new Set(['2xs', 'xs', 'sm', 'md', 'lg', 'xl', '2xl', 'none']);\nconst insetShadowGeometryNames = new Set(['2xs', 'xs', 'sm', 'none']);\n\ninterface BorderFamilyOwnership {\n readonly namespace: string;\n readonly width: readonly string[];\n readonly color: readonly string[];\n}\n\nconst borderFamilies: readonly BorderFamilyOwnership[] = [\n {\n namespace: 'border-bs',\n width: ['border-block-start-style', 'border-block-start-width'],\n color: ['border-block-start-color'],\n },\n {\n namespace: 'border-be',\n width: ['border-block-end-style', 'border-block-end-width'],\n color: ['border-block-end-color'],\n },\n {\n namespace: 'border-x',\n width: ['border-inline-style', 'border-inline-width'],\n color: ['border-inline-color'],\n },\n {\n namespace: 'border-y',\n width: ['border-block-style', 'border-block-width'],\n color: ['border-block-color'],\n },\n {\n namespace: 'border-s',\n width: ['border-inline-start-style', 'border-inline-start-width'],\n color: ['border-inline-start-color'],\n },\n {\n namespace: 'border-e',\n width: ['border-inline-end-style', 'border-inline-end-width'],\n color: ['border-inline-end-color'],\n },\n { namespace: 'border-t', width: ['border-top-style', 'border-top-width'], color: ['border-top-color'] },\n { namespace: 'border-r', width: ['border-right-style', 'border-right-width'], color: ['border-right-color'] },\n { namespace: 'border-b', width: ['border-bottom-style', 'border-bottom-width'], color: ['border-bottom-color'] },\n { namespace: 'border-l', width: ['border-left-style', 'border-left-width'], color: ['border-left-color'] },\n { namespace: 'border', width: ['border-style', 'border-width'], color: ['border-color'] },\n];\n\nconst recognizedTailwindAuthorityNamespaces = [\n '@container',\n 'accent',\n 'align',\n 'animate',\n 'appearance',\n 'aspect',\n 'auto-cols',\n 'auto-rows',\n 'backdrop',\n 'backface',\n 'basis',\n 'bg',\n 'block',\n 'blur',\n 'border',\n 'box-decoration',\n 'break',\n 'brightness',\n 'caption',\n 'caret',\n 'clear',\n 'col',\n 'columns',\n 'contain',\n 'content',\n 'contrast',\n 'decoration',\n 'delay',\n 'divide',\n 'drop-shadow',\n 'duration',\n 'ease',\n 'end',\n 'field-sizing',\n 'fill',\n 'filter',\n 'float',\n 'font',\n 'forced-color-adjust',\n 'from',\n 'gradient',\n 'grid',\n 'grid-flow',\n 'grayscale',\n 'hue-rotate',\n 'hyphens',\n 'indent',\n 'inline',\n 'inset-ring',\n 'inset-shadow',\n 'invert',\n 'isolate',\n 'isolation',\n 'justify-items',\n 'justify-self',\n 'leading',\n 'line-clamp',\n 'list',\n 'list-image',\n 'mask',\n 'max-block',\n 'max-inline',\n 'mbe',\n 'mbs',\n 'min-block',\n 'min-inline',\n 'mix-blend',\n 'object',\n 'opacity',\n 'order',\n 'origin',\n 'outline',\n 'overflow',\n 'overscroll',\n 'place-content',\n 'place-items',\n 'place-self',\n 'placeholder',\n 'pbe',\n 'pbs',\n 'perspective',\n 'perspective-origin',\n 'resize',\n 'ring',\n 'rotate',\n 'rounded',\n 'row',\n 'saturate',\n 'scale',\n 'scheme',\n 'scroll',\n 'scrollbar',\n 'select',\n 'sepia',\n 'shadow',\n 'skew',\n 'snap',\n 'space',\n 'start',\n 'stroke',\n 'tab',\n 'table',\n 'text',\n 'to',\n 'touch',\n 'tracking',\n 'transform',\n 'transition',\n 'translate',\n 'underline-offset',\n 'via',\n 'whitespace',\n 'will-change',\n 'wrap',\n 'z',\n 'zoom',\n] as const;\n\nconst recognizedTailwindAuthorityTokens = new Set([\n 'antialiased',\n 'border-collapse',\n 'border-separate',\n 'capitalize',\n 'container',\n 'diagonal-fractions',\n 'italic',\n 'line-through',\n 'lining-nums',\n 'lowercase',\n 'no-underline',\n 'normal-case',\n 'normal-nums',\n 'not-italic',\n 'oldstyle-nums',\n 'ordinal',\n 'outline',\n 'overline',\n 'proportional-nums',\n 'slashed-zero',\n 'stacked-fractions',\n 'subpixel-antialiased',\n 'tabular-nums',\n 'truncate',\n 'underline',\n 'uppercase',\n]);\n\nfunction isCanonicalInteger(value: string): boolean {\n return /^(?:0|[1-9]\\d*)$/u.test(value);\n}\n\nfunction isCssVariableShorthand(value: string): boolean {\n return /^\\(--[A-Za-z_][A-Za-z0-9_-]*\\)$/u.test(value);\n}\n\nfunction borderCssAuthority(utility: string): CssAuthority | undefined {\n const family = borderFamilies.find(\n current => utility === current.namespace || utility.startsWith(`${current.namespace}-`),\n );\n if (family === undefined) return undefined;\n const suffix = utility === family.namespace ? '' : utility.slice(family.namespace.length + 1);\n if (suffix.length === 0 || isCanonicalInteger(suffix)) return family.width;\n if (family.namespace === 'border' && ['solid', 'dashed', 'dotted', 'double', 'hidden', 'none'].includes(suffix)) {\n return ['--tw-border-style', 'border-style'];\n }\n if (suffix.startsWith('[') && suffix.endsWith(']')) {\n const kind = tailwindArbitraryBorderKind(suffix);\n if (kind === 'border-width') return family.width;\n if (kind === 'border-color') return family.color;\n return 'unknown';\n }\n if (isCssVariableShorthand(suffix) || isPinnedTailwindColorToken(suffix)) return family.color;\n return 'unknown';\n}\n\nfunction shadowCssAuthority(utility: string): CssAuthority | undefined {\n if (utility === 'shadow') return ['--tw-shadow', 'box-shadow'];\n if (!utility.startsWith('shadow-')) return undefined;\n const suffix = utility.slice('shadow-'.length);\n if (suffix.startsWith('[') && suffix.endsWith(']')) {\n const kind = tailwindArbitraryShadowKind(suffix);\n if (kind === 'shadow-color') return ['--tw-shadow-color'];\n if (kind === 'shadow-geometry') return ['--tw-shadow', 'box-shadow'];\n return 'unknown';\n }\n if (isCssVariableShorthand(suffix) || shadowGeometryNames.has(suffix)) return ['--tw-shadow', 'box-shadow'];\n if (isPinnedTailwindColorToken(suffix)) return ['--tw-shadow-color'];\n return 'unknown';\n}\n\nfunction ringCssAuthority(utility: string): CssAuthority | undefined {\n if (utility === 'ring') return ['--tw-ring-shadow', 'box-shadow'];\n if (utility === 'ring-inset') return ['--tw-ring-inset'];\n if (!utility.startsWith('ring-')) return undefined;\n const suffix = utility.slice('ring-'.length);\n if (isCanonicalInteger(suffix)) return ['--tw-ring-shadow', 'box-shadow'];\n if (isPinnedTailwindColorToken(suffix)) return ['--tw-ring-color'];\n return 'unknown';\n}\n\nfunction insetShadowCssAuthority(utility: string): CssAuthority | undefined {\n if (utility === 'inset-shadow') return 'unknown';\n if (!utility.startsWith('inset-shadow-')) return undefined;\n const suffix = utility.slice('inset-shadow-'.length);\n if (insetShadowGeometryNames.has(suffix)) return ['--tw-inset-shadow', 'box-shadow'];\n if (suffix === 'initial' || isPinnedTailwindColorToken(suffix)) return ['--tw-inset-shadow-color'];\n return 'unknown';\n}\n\nfunction insetRingCssAuthority(utility: string): CssAuthority | undefined {\n if (utility === 'inset-ring') return ['--tw-inset-ring-shadow', 'box-shadow'];\n if (!utility.startsWith('inset-ring-')) return undefined;\n const suffix = utility.slice('inset-ring-'.length);\n if (isCanonicalInteger(suffix)) return ['--tw-inset-ring-shadow', 'box-shadow'];\n if (isPinnedTailwindColorToken(suffix)) return ['--tw-inset-ring-color'];\n return 'unknown';\n}\n\nfunction arbitraryBackgroundCssAuthority(value: string): CssAuthority {\n const arbitrary = value.match(/^\\[([\\s\\S]+)\\](?:\\/[\\s\\S]+)?$/u)?.[1];\n if (arbitrary === undefined) return 'unknown';\n const property = tailwindArbitraryBackgroundKind(`[${arbitrary}]`);\n return property === 'unknown' ? property : [property];\n}\n\nfunction isRecognizedTailwindAuthority(utility: string): boolean {\n const normalized = utility.startsWith('-') ? utility.slice(1) : utility;\n return (\n recognizedTailwindAuthorityTokens.has(normalized) ||\n recognizedTailwindAuthorityNamespaces.some(\n namespace => normalized === namespace || normalized.startsWith(`${namespace}-`),\n )\n );\n}\n\nfunction cssProperties(utility: string): CssAuthority | undefined {\n const arbitraryProperty = utility.match(/^\\[([^:]+):/u)?.[1];\n if (arbitraryProperty) return [arbitraryProperty];\n if (displayUtilities.has(utility)) return ['display'];\n if (/^flex-(?:row|row-reverse|col|col-reverse)$/u.test(utility)) return ['flex-direction'];\n if (/^flex-(?:wrap|wrap-reverse|nowrap)$/u.test(utility)) return ['flex-wrap'];\n if (/^flex-.+$/u.test(utility)) return ['flex'];\n if (/^grow(?:-.+)?$/u.test(utility)) return ['flex-grow'];\n if (/^shrink(?:-.+)?$/u.test(utility)) return ['flex-shrink'];\n if (/^basis-.+$/u.test(utility)) return ['flex-basis'];\n if (/^box-(?:border|content)$/u.test(utility)) return ['box-sizing'];\n if (/^justify-items-/u.test(utility)) return ['justify-items'];\n if (/^justify-self-/u.test(utility)) return ['justify-self'];\n if (/^justify-/u.test(utility)) return ['justify-content'];\n if (/^items-/u.test(utility)) return ['align-items'];\n if (utility === 'content-none') return ['--tw-content', 'content'];\n if (/^content-\\[/u.test(utility)) return ['--tw-content', 'content'];\n if (/^content-/u.test(utility)) return ['align-content'];\n if (/^self-/u.test(utility)) return ['align-self'];\n if (/^gap-x-/u.test(utility)) return ['column-gap'];\n if (/^gap-y-/u.test(utility)) return ['row-gap'];\n if (/^gap-/u.test(utility)) return ['gap'];\n if (/^order-/u.test(utility)) return ['order'];\n if (/^-?m-/u.test(utility)) return ['margin'];\n if (/^-?mx-/u.test(utility)) return ['margin-inline'];\n if (/^-?my-/u.test(utility)) return ['margin-block'];\n if (/^-?mt-/u.test(utility)) return ['margin-top'];\n if (/^-?mr-/u.test(utility)) return ['margin-right'];\n if (/^-?mb-/u.test(utility)) return ['margin-bottom'];\n if (/^-?ml-/u.test(utility)) return ['margin-left'];\n if (/^-?ms-/u.test(utility)) return ['margin-inline-start'];\n if (/^-?me-/u.test(utility)) return ['margin-inline-end'];\n if (/^p-/u.test(utility)) return ['padding'];\n if (/^px-/u.test(utility)) return ['padding-inline'];\n if (/^py-/u.test(utility)) return ['padding-block'];\n if (/^pt-/u.test(utility)) return ['padding-top'];\n if (/^pr-/u.test(utility)) return ['padding-right'];\n if (/^pb-/u.test(utility)) return ['padding-bottom'];\n if (/^pl-/u.test(utility)) return ['padding-left'];\n if (/^ps-/u.test(utility)) return ['padding-inline-start'];\n if (/^pe-/u.test(utility)) return ['padding-inline-end'];\n if (/^size-/u.test(utility)) return ['width', 'height'];\n if (/^w-/u.test(utility)) return ['width'];\n if (/^h-/u.test(utility)) return ['height'];\n if (/^min-w-/u.test(utility)) return ['min-width'];\n if (/^min-h-/u.test(utility)) return ['min-height'];\n if (/^max-w-/u.test(utility)) return ['max-width'];\n if (/^max-h-/u.test(utility)) return ['max-height'];\n const textValue = utility.match(/^text-([\\s\\S]+)$/u)?.[1];\n const [textBaseValue] = textValue?.split('/') ?? [];\n if (textBaseValue !== undefined && textSizes.has(textBaseValue)) return ['font-size', 'line-height'];\n const arbitraryText = utility.match(/^text-(\\[[\\s\\S]+\\])(?:\\/[^\\s]+)?$/u)?.[1];\n if (arbitraryText !== undefined) {\n const kind = tailwindArbitraryTextKind(arbitraryText);\n if (kind === 'color') return ['color'];\n if (kind === 'font-size') return utility.includes(']/') ? ['font-size', 'line-height'] : ['font-size'];\n return 'unknown';\n }\n if (/^text-(?:left|right|center|justify|start|end)$/u.test(utility)) return ['text-align'];\n if (/^text-(?:wrap|nowrap|balance|pretty)$/u.test(utility)) return ['text-wrap'];\n if (/^text-(?:ellipsis|clip)$/u.test(utility)) return ['text-overflow'];\n if (textValue !== undefined && isPinnedTailwindColorToken(textValue)) return ['color'];\n if (/^text-/u.test(utility)) return 'unknown';\n if (/^bg-(?:auto|cover|contain)$/u.test(utility)) return ['background-size'];\n if (/^bg-(?:fixed|local|scroll)$/u.test(utility)) return ['background-attachment'];\n if (/^bg-clip-/u.test(utility)) return ['background-clip'];\n if (/^bg-origin-/u.test(utility)) return ['background-origin'];\n if (/^bg-(?:bottom|center|left|left-bottom|left-top|right|right-bottom|right-top|top)$/u.test(utility)) {\n return ['background-position'];\n }\n if (/^bg-(?:repeat|no-repeat|repeat-x|repeat-y|repeat-round|repeat-space)$/u.test(utility)) {\n return ['background-repeat'];\n }\n if (/^bg-blend-/u.test(utility)) return ['background-blend-mode'];\n if (utility === 'bg-none') return ['background-image'];\n const backgroundValue = utility.match(/^bg-([\\s\\S]+)$/u)?.[1];\n if (backgroundValue?.startsWith('[')) return arbitraryBackgroundCssAuthority(backgroundValue);\n if (isCssVariableShorthand(backgroundValue ?? '')) return 'unknown';\n if (backgroundValue !== undefined && isPinnedTailwindColorToken(backgroundValue)) return ['background-color'];\n if (/^bg-/u.test(utility)) return 'unknown';\n const borderAuthority = borderCssAuthority(utility);\n if (borderAuthority !== undefined) return borderAuthority;\n if (/^rounded(?:-|$)/u.test(utility)) return ['border-radius'];\n const shadowAuthority = shadowCssAuthority(utility);\n if (shadowAuthority !== undefined) return shadowAuthority;\n const ringAuthority = ringCssAuthority(utility);\n if (ringAuthority !== undefined) return ringAuthority;\n const insetShadowAuthority = insetShadowCssAuthority(utility);\n if (insetShadowAuthority !== undefined) return insetShadowAuthority;\n const insetRingAuthority = insetRingCssAuthority(utility);\n if (insetRingAuthority !== undefined) return insetRingAuthority;\n if (utility === 'truncate') return ['overflow', 'text-overflow', 'white-space'];\n if (/^opacity-/u.test(utility)) return ['opacity'];\n if (/^overflow(?:-|$)/u.test(utility)) return ['overflow'];\n if (['static', 'fixed', 'absolute', 'relative', 'sticky'].includes(utility)) return ['position'];\n if (/^-?inset-x-/u.test(utility)) return ['inset-inline'];\n if (/^-?inset-y-/u.test(utility)) return ['inset-block'];\n if (/^-?inset-/u.test(utility)) return ['inset'];\n if (/^-?top-/u.test(utility)) return ['top'];\n if (/^-?right-/u.test(utility)) return ['right'];\n if (/^-?bottom-/u.test(utility)) return ['bottom'];\n if (/^-?left-/u.test(utility)) return ['left'];\n if (/^-?rotate-z-/u.test(utility)) return ['--tw-rotate-z', 'transform'];\n if (/^-?rotate-(?:x|y)-/u.test(utility)) return 'unknown';\n if (/^-?rotate-/u.test(utility)) return ['rotate'];\n if (/^scale-(?:x|y|z)-/u.test(utility)) return 'unknown';\n if (/^scale-(?:\\[|\\()/u.test(utility)) return ['scale'];\n if (/^scale-/u.test(utility)) return ['--tw-scale-x', '--tw-scale-y', '--tw-scale-z', 'scale'];\n if (/^-?translate-z-/u.test(utility)) return 'unknown';\n if (/^-?translate-x-/u.test(utility)) return ['--tw-translate-x', 'translate'];\n if (/^-?translate-y-/u.test(utility)) return ['--tw-translate-y', 'translate'];\n if (/^-?translate-/u.test(utility)) return ['--tw-translate-x', '--tw-translate-y', 'translate'];\n if (utility === 'transition-none') return ['transition-property'];\n if (utility === 'transition-discrete' || utility === 'transition-normal') return ['transition-behavior'];\n if (/^transition(?:-|$)/u.test(utility)) {\n return ['transition-property', 'transition-timing-function', 'transition-duration'];\n }\n if (/^duration-/u.test(utility)) return ['--tw-duration', 'transition-duration'];\n if (/^delay-/u.test(utility)) return ['transition-delay'];\n if (/^ease-/u.test(utility)) return ['--tw-ease', 'transition-timing-function'];\n if (/^grid-cols(?:-|$)/u.test(utility)) return ['grid-template-columns'];\n if (/^auto-cols(?:-|$)/u.test(utility)) return ['grid-auto-columns'];\n if (/^grid-rows(?:-|$)/u.test(utility)) return ['grid-template-rows'];\n if (/^auto-rows(?:-|$)/u.test(utility)) return ['grid-auto-rows'];\n if (/^col-(?:span-|auto$)/u.test(utility)) return ['grid-column'];\n if (/^col-start-/u.test(utility)) return ['grid-column-start'];\n if (/^col-end-/u.test(utility)) return ['grid-column-end'];\n if (/^row-(?:span-|auto$)/u.test(utility)) return ['grid-row'];\n if (/^row-start-/u.test(utility)) return ['grid-row-start'];\n if (/^row-end-/u.test(utility)) return ['grid-row-end'];\n if (/^table-(?:auto|fixed)$/u.test(utility)) return ['table-layout'];\n if (/^list-(?:disc|decimal|none)$/u.test(utility)) return ['list-style-type'];\n if (/^list-(?:inside|outside)$/u.test(utility)) return ['list-style-position'];\n if (/^object-(?:contain|cover|fill|none|scale-down)$/u.test(utility)) return ['object-fit'];\n if (/^object-/u.test(utility)) return ['object-position'];\n if (/^cursor-/u.test(utility)) return ['cursor'];\n if (/^pointer-events-/u.test(utility)) return ['pointer-events'];\n if (['visible', 'invisible', 'collapse'].includes(utility)) return ['visibility'];\n if (utility === 'sr-only') {\n return ['position', 'width', 'height', 'padding', 'margin', 'overflow', 'clip-path', 'white-space', 'border-width'];\n }\n if (utility === 'not-sr-only') {\n return ['position', 'width', 'height', 'padding', 'margin', 'overflow', 'clip-path', 'white-space'];\n }\n return isRecognizedTailwindAuthority(utility) ? 'unknown' : undefined;\n}\n\nexport function describeTailwindUtility(token: string): TailwindUtilityDescriptor | undefined {\n const split = splitVariants(token);\n if (split === undefined) return undefined;\n const { variants, utility: modifiedUtility } = split;\n const leadingImportant = modifiedUtility.startsWith('!');\n const trailingImportant = modifiedUtility.endsWith('!');\n if (leadingImportant && trailingImportant) return undefined;\n const utility = modifiedUtility.replace(/^!/u, '').replace(/!$/u, '');\n if (utility.length === 0) return undefined;\n const important = leadingImportant || trailingImportant || hasInternalDeclarationImportance(utility);\n const authority = cssProperties(utility);\n return {\n token,\n variants,\n utility,\n cssProperties: authority === undefined || authority === 'unknown' ? [] : authority,\n ...(authority === 'unknown' ? { hasUnknownCssAuthority: true } : {}),\n activation: activation(variants),\n hasGeneratedMediaVariant: hasGeneratedMediaVariant(variants),\n important,\n };\n}\n\nexport function describeTailwindDisplay(token: string): TailwindDisplayUtility | undefined {\n const descriptor = describeTailwindUtility(token);\n if (descriptor === undefined) return undefined;\n if (!descriptor.cssProperties.includes('display')) return undefined;\n return {\n token: descriptor.token,\n utility: descriptor.utility,\n activation: descriptor.activation,\n important: descriptor.important,\n };\n}\n\nfunction activationsIntersect(left: TailwindActivation, right: TailwindActivation): boolean {\n return left.kind === 'base' || right.kind === 'base' || mediaRangesIntersect(left.range, right.range);\n}\n\nexport function findTailwindClassConflicts(\n existingClassNames: readonly string[],\n generatedClassNames: readonly string[],\n): ReadonlySet<string> {\n const generatedTokens = new Set(generatedClassNames);\n const existing = existingClassNames\n .filter(token => !generatedTokens.has(token))\n .map(describeTailwindUtility)\n .filter(descriptor => descriptor !== undefined);\n const conflicts = new Set<string>();\n\n for (const generated of generatedClassNames\n .map(describeTailwindUtility)\n .filter(descriptor => descriptor !== undefined)) {\n const generatedProperties = generated.cssProperties;\n if (generatedProperties.length === 0) continue;\n if (\n existing.some(\n current =>\n activationsIntersect(current.activation, generated.activation) &&\n (current.hasUnknownCssAuthority === true ||\n generated.hasUnknownCssAuthority === true ||\n current.cssProperties.some(currentProperty =>\n generatedProperties.some(generatedProperty => cssPropertiesOverlap(currentProperty, generatedProperty)),\n )),\n )\n ) {\n conflicts.add(generated.token);\n }\n }\n\n return conflicts;\n}\n\nexport function hasTailwindClassConflict(\n existingClassNames: readonly string[],\n generatedClassNames: readonly string[],\n): boolean {\n return findTailwindClassConflicts(existingClassNames, generatedClassNames).size > 0;\n}\n","import type { BreakpointDefinition, MediaRange } from '../../breakpoint/breakpoint-catalog';\nimport { describeTailwindUtility } from './tailwind-class-conflict';\n\nexport class ResponsiveVariantEmitter {\n emit(definition: BreakpointDefinition, utility: string): string {\n const descriptor = describeTailwindUtility(utility);\n if (descriptor === undefined) {\n throw new Error('Cannot decorate a malformed Tailwind utility');\n }\n if (descriptor.variants.length > 0) {\n throw new Error('Cannot decorate an already-variant utility');\n }\n\n return `[${this.mediaQuery(definition.range)}]:${utility}`;\n }\n\n emitCandidate(definition: BreakpointDefinition, candidate: string): string {\n const descriptor = describeTailwindUtility(candidate);\n if (descriptor === undefined) {\n throw new Error('Cannot decorate a malformed Tailwind candidate');\n }\n if (descriptor.hasGeneratedMediaVariant) {\n throw new Error('Cannot decorate a candidate containing a generated media variant');\n }\n\n return `[${this.mediaQuery(definition.range)}]:${candidate}`;\n }\n\n private mediaQuery(range: MediaRange): string {\n const conditions = [\n range.min === undefined ? undefined : `(min-width:_${range.min}px)`,\n range.max === undefined ? undefined : `(max-width:_${range.max}px)`,\n ].filter((condition): condition is string => condition !== undefined);\n\n return `@media_screen_and_${conditions.join('_and_')}`;\n }\n}\n","import type { LocatedFlexLayoutInput } from '../../analyzer/flex-layout-attribute.analyzer';\nimport { BreakpointCatalog } from '../../breakpoint/breakpoint-catalog';\nimport { ResponsiveVariantEmitter } from './responsive-variant.emitter';\nimport type { TailwindStrategyResult } from './tailwind-semantic.model';\n\nexport function planResponsiveClasses(\n input: LocatedFlexLayoutInput,\n classNames: readonly string[],\n catalog: BreakpointCatalog,\n emitter: ResponsiveVariantEmitter,\n): TailwindStrategyResult {\n if (input.binding === 'property') {\n return {\n status: 'review',\n code: 'dynamic-binding',\n reason: 'Angular property bindings may depend on runtime state.',\n suggestion: 'Replace the binding manually or make it a literal before migration.',\n };\n }\n\n if (!input.breakpoint) return { status: 'converted', classNames };\n\n const classification = catalog.classify(input.breakpoint);\n if (classification.kind === 'verified') {\n return {\n status: 'converted',\n classNames: classNames.map(className => emitter.emit(classification.definition, className)),\n };\n }\n\n if (classification.kind === 'custom') {\n return {\n status: 'review',\n code: 'custom-breakpoint',\n reason: `The breakpoint alias ${classification.alias} may be registered by the project.`,\n suggestion: 'Provide its media query or migrate this responsive input manually.',\n };\n }\n\n const alias = classification.alias;\n const kind = classification.kind === 'print' ? 'print' : 'optional';\n return {\n status: 'review',\n code: 'breakpoint-unverified',\n reason: `Exact media-query output for the ${kind} breakpoint alias ${alias} is not implemented.`,\n suggestion: 'Keep the responsive directive until exact breakpoint support is available.',\n };\n}\n","import type { LocatedFlexLayoutInput } from '../../analyzer/flex-layout-attribute.analyzer';\nimport { BreakpointCatalog, mediaRangesIntersect, type MediaRange } from '../../breakpoint/breakpoint-catalog';\nimport type { ConversionContext, PlannedConversion } from '../conversion-adapter';\nimport { planResponsiveClasses } from './responsive-plan';\nimport { ResponsiveVariantEmitter } from './responsive-variant.emitter';\nimport type { TailwindStrategyResult } from './tailwind-semantic.model';\n\nexport type DirectiveFamily =\n | 'layout'\n | 'layout-gap'\n | 'layout-align'\n | 'flex-item'\n | 'flex-align'\n | 'flex-fill'\n | 'flex-offset'\n | 'flex-order'\n | 'visibility'\n | 'extended-class'\n | 'extended-style';\n\nexport type PlanOne = (input: LocatedFlexLayoutInput, context: ConversionContext) => PlannedConversion;\nexport type PlanExtendedFamily = (\n family: 'extended-class' | 'extended-style',\n inputs: readonly LocatedFlexLayoutInput[],\n context: ConversionContext,\n) => readonly PlannedConversion[];\n\nconst familyByDirective = new Map<LocatedFlexLayoutInput['directive'], DirectiveFamily>([\n ['fxLayout', 'layout'],\n ['fxLayoutGap', 'layout-gap'],\n ['fxLayoutAlign', 'layout-align'],\n ['fxFlex', 'flex-item'],\n ['fxGrow', 'flex-item'],\n ['fxShrink', 'flex-item'],\n ['fxFlexAlign', 'flex-align'],\n ['fxFlexFill', 'flex-fill'],\n ['fxFill', 'flex-fill'],\n ['fxFlexOffset', 'flex-offset'],\n ['fxFlexOrder', 'flex-order'],\n ['fxShow', 'visibility'],\n ['fxHide', 'visibility'],\n ['class', 'extended-class'],\n ['ngClass', 'extended-class'],\n ['style', 'extended-style'],\n ['ngStyle', 'extended-style'],\n]);\n\nconst localLayoutDependents = new Set<DirectiveFamily>(['layout-gap', 'layout-align']);\nconst parentLayoutDependents = new Set<DirectiveFamily>(['flex-item', 'flex-offset']);\n\ninterface NumericRange {\n readonly min: number;\n readonly max: number;\n}\n\nfunction converted(input: LocatedFlexLayoutInput, classNames: readonly string[]): PlannedConversion {\n return { status: 'converted', input, classNames };\n}\n\nfunction fromStrategyResult(input: LocatedFlexLayoutInput, result: TailwindStrategyResult): PlannedConversion {\n if (result.status === 'converted') return converted(input, result.classNames);\n if (result.status === 'invalid') {\n return {\n status: 'invalid',\n input,\n code: result.code,\n reason: `${input.value} is not a supported ${input.directive} value.`,\n suggestion: 'Correct the value or migrate this directive manually.',\n };\n }\n return { ...result, input };\n}\n\nfunction contextUnverified(input: LocatedFlexLayoutInput, reason: string): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'context-unverified',\n reason,\n suggestion: 'Migrate the responsive context and its dependent directive families together manually.',\n };\n}\n\nfunction canonicalClasses(plan: PlannedConversion): readonly string[] | undefined {\n return plan.status === 'converted' ? [...new Set(plan.classNames)].sort() : undefined;\n}\n\nfunction sameClasses(left: PlannedConversion, right: PlannedConversion): boolean {\n const leftClasses = canonicalClasses(left);\n const rightClasses = canonicalClasses(right);\n return (\n leftClasses !== undefined &&\n rightClasses !== undefined &&\n leftClasses.length === rightClasses.length &&\n leftClasses.every((className, index) => className === rightClasses[index])\n );\n}\n\nfunction numericRange(range: MediaRange): NumericRange {\n return {\n min: range.min ?? Number.NEGATIVE_INFINITY,\n max: range.max ?? Number.POSITIVE_INFINITY,\n };\n}\n\nfunction mediaRange(range: NumericRange): MediaRange {\n return {\n min: range.min === Number.NEGATIVE_INFINITY ? undefined : range.min,\n max: range.max === Number.POSITIVE_INFINITY ? undefined : range.max,\n };\n}\n\nfunction nextBelow(value: number): number {\n return value - Math.max(1, Math.abs(value)) * Number.EPSILON;\n}\n\nfunction nextAbove(value: number): number {\n return value + Math.max(1, Math.abs(value)) * Number.EPSILON;\n}\n\nfunction subtractRange(source: NumericRange, excluded: NumericRange): readonly NumericRange[] {\n if (source.max < excluded.min || excluded.max < source.min) return [source];\n const remaining: NumericRange[] = [];\n if (source.min < excluded.min) remaining.push({ min: source.min, max: nextBelow(excluded.min) });\n if (excluded.max < source.max) remaining.push({ min: nextAbove(excluded.max), max: source.max });\n return remaining;\n}\n\nfunction effectiveRanges(\n input: LocatedFlexLayoutInput,\n familyInputs: readonly LocatedFlexLayoutInput[],\n catalog: BreakpointCatalog,\n): readonly NumericRange[] {\n if (input.breakpoint) {\n const classification = catalog.classify(input.breakpoint);\n return classification.kind === 'verified' ? [numericRange(classification.definition.range)] : [];\n }\n\n let ranges: readonly NumericRange[] = [{ min: Number.NEGATIVE_INFINITY, max: Number.POSITIVE_INFINITY }];\n for (const sibling of familyInputs) {\n if (!sibling.breakpoint || sibling.binding !== 'literal') continue;\n const classification = catalog.classify(sibling.breakpoint);\n if (classification.kind !== 'verified') continue;\n const excluded = numericRange(classification.definition.range);\n ranges = ranges.flatMap(range => subtractRange(range, excluded));\n }\n return ranges;\n}\n\nfunction rangesCover(target: NumericRange, ranges: readonly NumericRange[]): boolean {\n const clipped = ranges\n .map(range => ({ min: Math.max(target.min, range.min), max: Math.min(target.max, range.max) }))\n .filter(range => range.min <= range.max)\n .sort((left, right) => left.min - right.min);\n if (!clipped.length || clipped[0]?.min !== target.min) return false;\n\n let coveredUntil = clipped[0].max;\n for (const range of clipped.slice(1)) {\n if (range.min > coveredUntil) return false;\n coveredUntil = Math.max(coveredUntil, range.max);\n }\n return coveredUntil >= target.max;\n}\n\nexport class ResponsiveFamilyPlanner {\n constructor(\n private readonly catalog = new BreakpointCatalog(),\n private readonly emitter = new ResponsiveVariantEmitter(),\n ) {}\n\n plan(\n inputs: readonly LocatedFlexLayoutInput[],\n context: ConversionContext,\n planOne: PlanOne,\n planExtendedFamily?: PlanExtendedFamily,\n ): readonly PlannedConversion[] {\n return this.planWithDependencies(inputs, context, planOne, true, true, planExtendedFamily);\n }\n\n closeDependencies(\n inputs: readonly LocatedFlexLayoutInput[],\n context: ConversionContext,\n planOne: PlanOne,\n ): readonly PlannedConversion[] {\n return this.planWithDependencies(inputs, context, planOne, false, false);\n }\n\n private planWithDependencies(\n inputs: readonly LocatedFlexLayoutInput[],\n context: ConversionContext,\n planOne: PlanOne,\n decorate: boolean,\n validateResponsivePrecedence: boolean,\n planExtendedFamily?: PlanExtendedFamily,\n ): readonly PlannedConversion[] {\n const groups = new Map<DirectiveFamily, LocatedFlexLayoutInput[]>();\n const ungrouped: LocatedFlexLayoutInput[] = [];\n for (const input of inputs) {\n const family = familyByDirective.get(input.directive);\n if (!family) {\n ungrouped.push(input);\n continue;\n }\n const members = groups.get(family) ?? [];\n members.push(input);\n groups.set(family, members);\n }\n\n const completeContext: ConversionContext = { ...context, inputs };\n const rawPlansByFamily = new Map<DirectiveFamily, readonly PlannedConversion[]>();\n const layoutInputs = groups.get('layout') ?? [];\n const layoutPlans = this.planFamily(layoutInputs, completeContext, planOne, validateResponsivePrecedence);\n if (layoutInputs.length) rawPlansByFamily.set('layout', layoutPlans);\n\n const parentLayoutInputs = context.parentInputs?.filter(input => input.directive === 'fxLayout');\n const parentLayoutSafe =\n parentLayoutInputs === undefined ||\n this.isLayoutContextSafe(\n context.parentInputs ?? [],\n {\n ...context,\n element: context.parent ?? context.element,\n inputs: context.parentInputs,\n parent: undefined,\n parentInputs: undefined,\n },\n planOne,\n validateResponsivePrecedence,\n );\n const localLayoutSafe = layoutPlans.every(plan => plan.status === 'converted');\n\n for (const [family, familyInputs] of groups) {\n if (family === 'layout') continue;\n\n let plans: readonly PlannedConversion[];\n if ((family === 'extended-class' || family === 'extended-style') && planExtendedFamily) {\n plans = planExtendedFamily(family, familyInputs, completeContext);\n } else if (localLayoutDependents.has(family)) {\n plans = localLayoutSafe\n ? this.planContextualFamily(\n familyInputs,\n completeContext,\n layoutInputs,\n 'activeLayout',\n planOne,\n validateResponsivePrecedence,\n )\n : this.planBlockedContextFamily(\n familyInputs,\n completeContext,\n planOne,\n 'The responsive layout family contains an unresolved member.',\n !validateResponsivePrecedence,\n );\n } else if (parentLayoutDependents.has(family)) {\n plans = parentLayoutSafe\n ? this.planContextualFamily(\n familyInputs,\n completeContext,\n parentLayoutInputs ?? [],\n 'activeParentLayout',\n planOne,\n validateResponsivePrecedence,\n )\n : this.planBlockedContextFamily(\n familyInputs,\n completeContext,\n planOne,\n 'The responsive parent layout family contains an unresolved member.',\n !validateResponsivePrecedence,\n );\n } else {\n plans = this.planFamily(familyInputs, completeContext, planOne, validateResponsivePrecedence);\n }\n rawPlansByFamily.set(family, plans);\n }\n\n const localFamilies = ['layout', 'layout-gap', 'layout-align'] as const;\n const localContextUnresolved = localFamilies.some(family =>\n rawPlansByFamily.get(family)?.some(plan => plan.status !== 'converted'),\n );\n if (localContextUnresolved) {\n for (const family of localFamilies) {\n const plans = rawPlansByFamily.get(family);\n if (!plans) continue;\n rawPlansByFamily.set(\n family,\n plans.map(plan =>\n plan.status === 'converted'\n ? contextUnverified(\n plan.input,\n 'The element layout context contains an unresolved dependent directive family.',\n )\n : plan,\n ),\n );\n }\n }\n\n const plansById = new Map<string, PlannedConversion>();\n for (const [family, plans] of rawPlansByFamily) {\n const shouldDecorate = decorate && family !== 'extended-class' && family !== 'extended-style';\n for (const plan of plans) plansById.set(plan.input.id, shouldDecorate ? this.decorate(plan) : plan);\n }\n for (const input of ungrouped) {\n const plan = planOne(input, completeContext);\n plansById.set(input.id, decorate ? this.decorate(plan) : plan);\n }\n return inputs.map(input => {\n const planned = plansById.get(input.id);\n if (planned) return planned;\n const plan = planOne(input, completeContext);\n return decorate ? this.decorate(plan) : plan;\n });\n }\n\n private planContextualFamily(\n inputs: readonly LocatedFlexLayoutInput[],\n context: ConversionContext,\n layoutInputs: readonly LocatedFlexLayoutInput[],\n contextKey: 'activeLayout' | 'activeParentLayout',\n planOne: PlanOne,\n validateResponsivePrecedence: boolean,\n ): readonly PlannedConversion[] {\n const semanticPlans = inputs.map(input => {\n const breakpointPlan = this.planBreakpoint(input, context, planOne);\n if (breakpointPlan.status !== 'converted') return breakpointPlan;\n const layoutValues = this.layoutValuesFor(input, inputs, layoutInputs);\n if (!layoutValues.length) {\n return contextUnverified(input, 'The active responsive layout cannot be resolved for this input.');\n }\n const candidates = layoutValues.map(value => planOne(input, { ...context, [contextKey]: value }));\n const unresolved = candidates.find(candidate => candidate.status !== 'converted');\n if (unresolved) return unresolved;\n const first = candidates[0];\n if (!first || candidates.some(candidate => !sameClasses(first, candidate))) {\n return contextUnverified(\n input,\n 'This directive emits different utilities across its active responsive layout contexts.',\n );\n }\n return first;\n });\n return this.validateFamily(inputs, semanticPlans, validateResponsivePrecedence);\n }\n\n private isLayoutContextSafe(\n inputs: readonly LocatedFlexLayoutInput[],\n context: ConversionContext,\n planOne: PlanOne,\n validateResponsivePrecedence: boolean,\n ): boolean {\n const layoutInputs = inputs.filter(input => input.directive === 'fxLayout');\n if (\n this.planFamily(layoutInputs, context, planOne, validateResponsivePrecedence).some(\n plan => plan.status !== 'converted',\n )\n ) {\n return false;\n }\n\n return (['fxLayoutGap', 'fxLayoutAlign'] as const).every(directive => {\n const familyInputs = inputs.filter(input => input.directive === directive);\n return this.planContextualFamily(\n familyInputs,\n context,\n layoutInputs,\n 'activeLayout',\n planOne,\n validateResponsivePrecedence,\n ).every(plan => plan.status === 'converted');\n });\n }\n\n private planBlockedContextFamily(\n inputs: readonly LocatedFlexLayoutInput[],\n context: ConversionContext,\n planOne: PlanOne,\n reason: string,\n preserveExistingDiagnostics = false,\n ): readonly PlannedConversion[] {\n return inputs.map(input => {\n const breakpointPlan = this.planBreakpoint(input, context, planOne);\n if (breakpointPlan.status !== 'converted') return breakpointPlan;\n const existingPlan = preserveExistingDiagnostics ? planOne(input, context) : breakpointPlan;\n return existingPlan.status === 'converted' ? contextUnverified(input, reason) : existingPlan;\n });\n }\n\n private planBreakpoint(\n input: LocatedFlexLayoutInput,\n context: ConversionContext,\n planOne: PlanOne,\n ): PlannedConversion {\n return input.binding === 'literal' ? this.validateBreakpoint(converted(input, [])) : planOne(input, context);\n }\n\n private layoutValuesFor(\n input: LocatedFlexLayoutInput,\n familyInputs: readonly LocatedFlexLayoutInput[],\n layoutInputs: readonly LocatedFlexLayoutInput[],\n ): readonly string[] {\n const baseLayouts = layoutInputs.filter(layout => !layout.breakpoint);\n const responsiveLayouts = layoutInputs.flatMap(layout => {\n if (!layout.breakpoint) return [];\n const classification = this.catalog.classify(layout.breakpoint);\n return classification.kind === 'verified'\n ? [{ value: layout.value, range: numericRange(classification.definition.range) }]\n : [];\n });\n const values = new Set<string>();\n\n for (const target of effectiveRanges(input, familyInputs, this.catalog)) {\n const activeResponsive = responsiveLayouts.filter(layout =>\n mediaRangesIntersect(mediaRange(target), mediaRange(layout.range)),\n );\n for (const layout of activeResponsive) values.add(layout.value);\n if (\n !rangesCover(\n target,\n activeResponsive.map(layout => layout.range),\n )\n ) {\n if (baseLayouts.length) {\n for (const layout of baseLayouts) values.add(layout.value);\n } else {\n values.add('row');\n }\n }\n }\n return [...values];\n }\n\n private planFamily(\n inputs: readonly LocatedFlexLayoutInput[],\n context: ConversionContext,\n planOne: PlanOne,\n validateResponsivePrecedence: boolean,\n ): readonly PlannedConversion[] {\n return this.validateFamily(\n inputs,\n inputs.map(input => planOne(input, context)),\n validateResponsivePrecedence,\n );\n }\n\n private validateFamily(\n inputs: readonly LocatedFlexLayoutInput[],\n semanticPlans: readonly PlannedConversion[],\n validateResponsivePrecedence: boolean,\n ): readonly PlannedConversion[] {\n if (inputs.some(input => input.binding !== 'literal')) {\n return inputs.map((input, index) => {\n const semanticPlan =\n semanticPlans[index] ??\n contextUnverified(input, 'The dynamic member of this directive family cannot be planned.');\n if (input.binding !== 'literal') return semanticPlan;\n const breakpointPlan = this.validateBreakpoint(semanticPlan);\n if (\n breakpointPlan.status !== 'converted' &&\n (breakpointPlan.code === 'breakpoint-unverified' || breakpointPlan.code === 'custom-breakpoint')\n ) {\n return breakpointPlan;\n }\n return contextUnverified(input, 'Another member of this responsive directive family is dynamic.');\n });\n }\n const supportedPlans = semanticPlans.map(plan => this.validateBreakpoint(plan));\n if (supportedPlans.some(plan => plan.status !== 'converted')) {\n return supportedPlans.map(plan =>\n plan.status === 'converted'\n ? contextUnverified(plan.input, 'Another member of this responsive directive family is unresolved.')\n : plan,\n );\n }\n\n if (!validateResponsivePrecedence) return supportedPlans;\n\n for (let leftIndex = 0; leftIndex < inputs.length; leftIndex += 1) {\n const leftInput = inputs[leftIndex];\n const leftPlan = supportedPlans[leftIndex];\n if (!leftInput?.breakpoint || !leftPlan) continue;\n const leftClassification = this.catalog.classify(leftInput.breakpoint);\n if (leftClassification.kind !== 'verified') continue;\n\n for (let rightIndex = leftIndex + 1; rightIndex < inputs.length; rightIndex += 1) {\n const rightInput = inputs[rightIndex];\n const rightPlan = supportedPlans[rightIndex];\n if (!rightInput?.breakpoint || !rightPlan) continue;\n const rightClassification = this.catalog.classify(rightInput.breakpoint);\n if (\n rightClassification.kind === 'verified' &&\n mediaRangesIntersect(leftClassification.definition.range, rightClassification.definition.range) &&\n !sameClasses(leftPlan, rightPlan)\n ) {\n return inputs.map(input => ({\n status: 'review',\n input,\n code: 'responsive-precedence-unverified',\n reason: 'Overlapping responsive ranges emit different utilities for the same directive family.',\n suggestion: 'Simplify the overlapping declarations or migrate this directive family manually.',\n }));\n }\n }\n }\n return supportedPlans;\n }\n\n private validateBreakpoint(plan: PlannedConversion): PlannedConversion {\n if (plan.status !== 'converted' || !plan.input.breakpoint) return plan;\n const classification = this.catalog.classify(plan.input.breakpoint);\n if (classification.kind === 'verified') return plan;\n const result = planResponsiveClasses(plan.input, plan.classNames, this.catalog, this.emitter);\n return result.status === 'converted' ? plan : fromStrategyResult(plan.input, result);\n }\n\n private decorate(plan: PlannedConversion): PlannedConversion {\n if (plan.status !== 'converted') return plan;\n const result = planResponsiveClasses(plan.input, plan.classNames, this.catalog, this.emitter);\n return fromStrategyResult(plan.input, result);\n }\n}\n","import { ResponsiveVariantEmitter } from '../responsive-variant.emitter';\nimport type { VisibilityState } from './visibility.model';\n\nexport class VisibilityEmitter {\n constructor(private readonly responsiveEmitter = new ResponsiveVariantEmitter()) {}\n\n emit(state: VisibilityState, restorationUtility: string | undefined): readonly string[] {\n const utility = state.intent === 'hidden' ? 'hidden' : restorationUtility;\n if (utility === undefined) return [];\n if (state.activation.kind === 'base') return [utility];\n return [this.responsiveEmitter.emit(state.activation.definition, utility)];\n }\n}\n","import type { LocatedFlexLayoutInput } from '../../../analyzer/flex-layout-attribute.analyzer';\nimport { BreakpointCatalog, mediaRangesIntersect, type MediaRange } from '../../../breakpoint/breakpoint-catalog';\nimport type { PlannedConversion } from '../../conversion-adapter';\nimport { describeTailwindDisplay, type TailwindActivation } from '../tailwind-class-conflict';\nimport { VisibilityEmitter } from './visibility.emitter';\nimport type { VisibilityState } from './visibility.model';\nimport type { VisibilityFamilyPlan } from './visibility-state.planner';\nimport type { VisibleDisplayResolution } from './visible-display.resolver';\n\nexport interface DisplayCompositionRequest {\n readonly visibilityPlan: VisibilityFamilyPlan;\n readonly displayResolution: VisibleDisplayResolution;\n readonly layoutPlans: readonly PlannedConversion[];\n}\n\nexport type DisplayCompositionResult =\n | { readonly status: 'converted'; readonly plans: readonly PlannedConversion[] }\n | { readonly status: 'unresolved'; readonly plans: readonly PlannedConversion[] };\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n\ninterface NumericRange {\n readonly min: number;\n readonly max: number;\n}\n\nfunction mediaRange(activation: TailwindActivation): MediaRange {\n return activation.kind === 'base' ? {} : activation.range;\n}\n\nfunction numericRange(range: MediaRange): NumericRange {\n return {\n min: range.min ?? Number.NEGATIVE_INFINITY,\n max: range.max ?? Number.POSITIVE_INFINITY,\n };\n}\n\nfunction rangesCover(target: MediaRange, ranges: readonly MediaRange[]): boolean {\n const numericTarget = numericRange(target);\n const clipped = ranges\n .filter(range => mediaRangesIntersect(target, range))\n .map(range => {\n const numeric = numericRange(range);\n return {\n min: Math.max(numericTarget.min, numeric.min),\n max: Math.min(numericTarget.max, numeric.max),\n };\n })\n .sort((left, right) => left.min - right.min);\n const first = clipped[0];\n if (!first || first.min !== numericTarget.min) return false;\n\n let coveredUntil = first.max;\n for (const range of clipped.slice(1)) {\n if (range.min > coveredUntil) return false;\n coveredUntil = Math.max(coveredUntil, range.max);\n }\n return coveredUntil >= numericTarget.max;\n}\n\nfunction isConvertedLayoutDisplay(className: string): boolean {\n const descriptor = describeTailwindDisplay(className);\n return (\n descriptor !== undefined &&\n (descriptor.utility === 'flex' || descriptor.utility === 'inline-flex') &&\n !descriptor.important &&\n (descriptor.activation.kind === 'media' || descriptor.token === descriptor.utility)\n );\n}\n\nfunction restorationUnverified(input: LocatedFlexLayoutInput, reason: string): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'display-restoration-unverified',\n reason,\n suggestion: 'Provide one unambiguous visible display value or migrate this visibility family manually.',\n };\n}\n\nfunction contextUnverified(input: LocatedFlexLayoutInput): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'context-unverified',\n reason: 'Partially overlapping responsive layout and visibility displays have unverified cascade precedence.',\n suggestion: 'Migrate the coupled layout and visibility ranges together manually.',\n };\n}\n\nexport class DisplayCompositionPlanner {\n constructor(\n private readonly catalog = new BreakpointCatalog(),\n private readonly emitter = new VisibilityEmitter(),\n ) {}\n\n compose(request: DisplayCompositionRequest): DisplayCompositionResult {\n const layoutPlans = [...request.layoutPlans].sort((left, right) => this.compareInputs(left.input, right.input));\n if (request.visibilityPlan.status === 'unresolved') {\n return {\n status: 'unresolved',\n plans: [\n ...layoutPlans,\n ...[...request.visibilityPlan.plans].sort((left, right) => this.compareInputs(left.input, right.input)),\n ],\n };\n }\n\n const states = [...request.visibilityPlan.states].sort((left, right) => this.compareStates(left, right));\n const displayResolution = request.displayResolution;\n if (displayResolution.status === 'unverified') {\n return {\n status: 'unresolved',\n plans: [...layoutPlans, ...states.map(state => restorationUnverified(state.input, displayResolution.reason))],\n };\n }\n\n if (this.hasUnsafePartialOverlap(layoutPlans, states)) {\n return {\n status: 'unresolved',\n plans: [\n ...layoutPlans.map(plan =>\n plan.status === 'converted' && plan.input.directive === 'fxLayout' ? contextUnverified(plan.input) : plan,\n ),\n ...states.map(state => contextUnverified(state.input)),\n ],\n };\n }\n\n const composedLayouts = layoutPlans.map(plan => this.composeLayout(plan, states));\n const visibilityClassNames = [\n ...new Set(states.flatMap(state => this.emitter.emit(state, displayResolution.utility))),\n ];\n const visibilityPlans = states.map((state, index): PlannedConversion => ({\n status: 'converted',\n input: state.input,\n classNames: index === 0 ? visibilityClassNames : [],\n }));\n const plans = [...composedLayouts, ...visibilityPlans];\n return {\n status: plans.every(plan => plan.status === 'converted') ? 'converted' : 'unresolved',\n plans,\n };\n }\n\n private hasUnsafePartialOverlap(\n layoutPlans: readonly PlannedConversion[],\n states: readonly VisibilityState[],\n ): boolean {\n const baseIsHidden = states.some(state => state.activation.kind === 'base' && state.intent === 'hidden');\n if (baseIsHidden) return false;\n\n const hiddenRanges = states.flatMap(state =>\n state.intent === 'hidden' && state.activation.kind === 'media' ? [state.activation.definition.range] : [],\n );\n if (!hiddenRanges.length) return false;\n\n return layoutPlans.some(plan => {\n if (plan.status !== 'converted' || plan.input.directive !== 'fxLayout') return false;\n return plan.classNames.some(className => {\n if (!isConvertedLayoutDisplay(className)) return false;\n const descriptor = describeTailwindDisplay(className);\n if (!descriptor || descriptor.activation.kind !== 'media') return false;\n const target = descriptor.activation.range;\n return hiddenRanges.some(range => mediaRangesIntersect(target, range)) && !rangesCover(target, hiddenRanges);\n });\n });\n }\n\n private composeLayout(plan: PlannedConversion, states: readonly VisibilityState[]): PlannedConversion {\n if (plan.status !== 'converted' || plan.input.directive !== 'fxLayout') return plan;\n return {\n ...plan,\n classNames: plan.classNames.filter(className => !this.visibilityOwnsHiddenActivation(className, states)),\n };\n }\n\n private visibilityOwnsHiddenActivation(className: string, states: readonly VisibilityState[]): boolean {\n if (!isConvertedLayoutDisplay(className)) return false;\n const descriptor = describeTailwindDisplay(className);\n if (!descriptor) return false;\n const target = mediaRange(descriptor.activation);\n const baseStates = states.filter(state => state.activation.kind === 'base');\n const responsiveStates = states.filter(\n (state): state is VisibilityState & { readonly activation: { readonly kind: 'media' } } =>\n state.activation.kind === 'media',\n );\n const baseIsHidden = baseStates.length > 0 && baseStates.every(state => state.intent === 'hidden');\n if (baseIsHidden) {\n return !responsiveStates.some(\n state => state.intent === 'shown' && mediaRangesIntersect(target, state.activation.definition.range),\n );\n }\n\n return rangesCover(\n target,\n responsiveStates.filter(state => state.intent === 'hidden').map(state => state.activation.definition.range),\n );\n }\n\n private compareStates(left: VisibilityState, right: VisibilityState): number {\n if (left.activation.kind === 'base' && right.activation.kind !== 'base') return -1;\n if (left.activation.kind !== 'base' && right.activation.kind === 'base') return 1;\n if (left.activation.kind === 'media' && right.activation.kind === 'media') {\n if (left.activation.definition.priority !== right.activation.definition.priority) {\n return right.activation.definition.priority - left.activation.definition.priority;\n }\n const aliasOrder = compareText(left.activation.definition.alias, right.activation.definition.alias);\n if (aliasOrder) return aliasOrder;\n }\n return compareText(left.input.id, right.input.id);\n }\n\n private compareInputs(left: LocatedFlexLayoutInput, right: LocatedFlexLayoutInput): number {\n const leftIsBase = left.breakpoint === undefined;\n const rightIsBase = right.breakpoint === undefined;\n if (leftIsBase && !rightIsBase) return -1;\n if (!leftIsBase && rightIsBase) return 1;\n\n const leftPriority = this.breakpointPriority(left.breakpoint);\n const rightPriority = this.breakpointPriority(right.breakpoint);\n if (leftPriority !== rightPriority) return rightPriority - leftPriority;\n\n const aliasOrder = compareText(left.breakpoint ?? '', right.breakpoint ?? '');\n return aliasOrder || compareText(left.id, right.id);\n }\n\n private breakpointPriority(alias: string | undefined): number {\n if (alias === undefined) return Number.POSITIVE_INFINITY;\n const classification = this.catalog.classify(alias);\n return classification.kind === 'verified' ? classification.definition.priority : Number.NEGATIVE_INFINITY;\n }\n}\n","import type { LocatedFlexLayoutInput } from '../../../analyzer/flex-layout-attribute.analyzer';\nimport type { VisibilityIntent } from './visibility.model';\n\nconst invariantMessage = 'Visibility value parser requires a literal fxShow or fxHide input.';\n\nexport function parseVisibilityValue(input: LocatedFlexLayoutInput): VisibilityIntent {\n if (input.binding !== 'literal' || (input.directive !== 'fxShow' && input.directive !== 'fxHide')) {\n throw new Error(invariantMessage);\n }\n\n const shown = input.value !== 'false';\n return input.directive === 'fxHide' ? (shown ? 'hidden' : 'shown') : shown ? 'shown' : 'hidden';\n}\n","import type { LocatedFlexLayoutInput } from '../../../analyzer/flex-layout-attribute.analyzer';\nimport {\n BreakpointCatalog,\n mediaRangesIntersect,\n type BreakpointClassification,\n} from '../../../breakpoint/breakpoint-catalog';\nimport type { PlannedConversion } from '../../conversion-adapter';\nimport type { VisibilityState } from './visibility.model';\nimport { parseVisibilityValue } from './visibility-value.parser';\n\nexport type VisibilityFamilyPlan =\n | { readonly status: 'converted'; readonly states: readonly VisibilityState[] }\n | { readonly status: 'unresolved'; readonly plans: readonly PlannedConversion[] };\n\ntype ClassifiedMember =\n | { readonly input: LocatedFlexLayoutInput; readonly state: VisibilityState }\n | { readonly input: LocatedFlexLayoutInput; readonly plan: PlannedConversion };\n\ntype ClassifiedState = Extract<ClassifiedMember, { readonly state: VisibilityState }>;\n\nfunction dynamicBinding(input: LocatedFlexLayoutInput): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'dynamic-binding',\n reason: 'Angular property bindings may depend on runtime state.',\n suggestion: 'Replace the binding manually or make it a literal before migration.',\n };\n}\n\nfunction unresolvedBreakpoint(\n input: LocatedFlexLayoutInput,\n classification: Exclude<BreakpointClassification, { readonly kind: 'verified' }>,\n): PlannedConversion {\n if (classification.kind === 'custom') {\n return {\n status: 'review',\n input,\n code: 'custom-breakpoint',\n reason: `The breakpoint alias ${classification.alias} may be registered by the project.`,\n suggestion: 'Provide its media query or migrate this responsive input manually.',\n };\n }\n\n const kind = classification.kind === 'print' ? 'print' : 'optional';\n return {\n status: 'review',\n input,\n code: 'breakpoint-unverified',\n reason: `Exact media-query output for the ${kind} breakpoint alias ${classification.alias} is not implemented.`,\n suggestion: 'Keep the responsive directive until exact breakpoint support is available.',\n };\n}\n\nfunction contextUnverified(input: LocatedFlexLayoutInput): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'context-unverified',\n reason: 'Another member of this visibility family is unresolved.',\n suggestion: 'Migrate the complete visibility family together manually.',\n };\n}\n\nfunction responsivePrecedenceUnverified(input: LocatedFlexLayoutInput): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'responsive-precedence-unverified',\n reason: 'The visibility family contains conflicting base or overlapping responsive states.',\n suggestion: 'Simplify the conflicting declarations or migrate this visibility family manually.',\n };\n}\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n\nexport class VisibilityStatePlanner {\n constructor(private readonly catalog = new BreakpointCatalog()) {}\n\n plan(inputs: readonly LocatedFlexLayoutInput[]): VisibilityFamilyPlan {\n const members = inputs\n .map(input => this.classify(input))\n .sort((left, right) => this.compare(left.input, right.input));\n\n if (!members.every((member): member is ClassifiedState => 'state' in member)) {\n return {\n status: 'unresolved',\n plans: members.map(member => ('plan' in member ? member.plan : contextUnverified(member.input))),\n };\n }\n\n const states = members.map(member => member.state);\n if (this.hasConflictingStates(states)) {\n return {\n status: 'unresolved',\n plans: states.map(state => responsivePrecedenceUnverified(state.input)),\n };\n }\n\n return { status: 'converted', states };\n }\n\n private classify(input: LocatedFlexLayoutInput): ClassifiedMember {\n if (input.binding !== 'literal') return { input, plan: dynamicBinding(input) };\n\n if (input.breakpoint === undefined) {\n return {\n input,\n state: { input, intent: parseVisibilityValue(input), activation: { kind: 'base' } },\n };\n }\n\n const classification = this.catalog.classify(input.breakpoint);\n if (classification.kind !== 'verified') {\n return { input, plan: unresolvedBreakpoint(input, classification) };\n }\n\n return {\n input,\n state: {\n input,\n intent: parseVisibilityValue(input),\n activation: { kind: 'media', definition: classification.definition },\n },\n };\n }\n\n private hasConflictingStates(states: readonly VisibilityState[]): boolean {\n const baseStates = states.filter(state => state.activation.kind === 'base');\n if (baseStates.some(state => state.intent !== baseStates[0]?.intent)) return true;\n\n const responsiveStates = states.filter(\n (state): state is VisibilityState & { readonly activation: { readonly kind: 'media' } } =>\n state.activation.kind === 'media',\n );\n return responsiveStates.some((left, leftIndex) =>\n responsiveStates\n .slice(leftIndex + 1)\n .some(\n right =>\n left.intent !== right.intent &&\n mediaRangesIntersect(left.activation.definition.range, right.activation.definition.range),\n ),\n );\n }\n\n private compare(left: LocatedFlexLayoutInput, right: LocatedFlexLayoutInput): number {\n const leftIsBase = left.breakpoint === undefined;\n const rightIsBase = right.breakpoint === undefined;\n if (leftIsBase && !rightIsBase) return -1;\n if (!leftIsBase && rightIsBase) return 1;\n\n const leftPriority = this.breakpointPriority(left.breakpoint);\n const rightPriority = this.breakpointPriority(right.breakpoint);\n if (leftPriority !== rightPriority) return rightPriority - leftPriority;\n\n const aliasOrder = compareText(left.breakpoint ?? '', right.breakpoint ?? '');\n return aliasOrder || compareText(left.id, right.id);\n }\n\n private breakpointPriority(alias: string | undefined): number {\n if (alias === undefined) return Number.POSITIVE_INFINITY;\n const classification = this.catalog.classify(alias);\n return classification.kind === 'verified' ? classification.definition.priority : Number.NEGATIVE_INFINITY;\n }\n}\n","const cssWhitespace = /[\\t\\n\\f\\r ]/u;\nconst hexDigit = /[\\da-f]/iu;\n\nexport interface LiteralStyleDeclaration {\n readonly property: string;\n readonly value: string;\n}\n\nexport type LiteralStyleParseResult =\n | { readonly status: 'parsed'; readonly declarations: readonly LiteralStyleDeclaration[] }\n | { readonly status: 'unverified'; readonly reason: string };\n\nfunction splitDeclarations(value: string): readonly string[] | undefined {\n const declarations: string[] = [];\n let current = '';\n let quote: '\"' | \"'\" | undefined;\n let parentheses = 0;\n let brackets = 0;\n let braces = 0;\n\n for (let index = 0; index < value.length; index += 1) {\n const character = value[index];\n const next = value[index + 1];\n if (character === undefined) continue;\n\n if (quote) {\n current += character;\n if (character === '\\\\') {\n if (next === undefined) return undefined;\n current += next;\n index += 1;\n } else if (character === quote) {\n quote = undefined;\n }\n continue;\n }\n\n if (character === '/' && next === '*') {\n const commentEnd = value.indexOf('*/', index + 2);\n if (commentEnd < 0) return undefined;\n current += ' ';\n index = commentEnd + 1;\n continue;\n }\n if (character === '\"' || character === \"'\") {\n quote = character;\n current += character;\n continue;\n }\n if (character === '\\\\') {\n if (next === undefined || next === '\\n' || next === '\\r' || next === '\\f') return undefined;\n current += character + next;\n index += 1;\n continue;\n }\n\n if (character === '(') parentheses += 1;\n else if (character === ')') {\n if (parentheses === 0) return undefined;\n parentheses -= 1;\n } else if (character === '[') brackets += 1;\n else if (character === ']') {\n if (brackets === 0) return undefined;\n brackets -= 1;\n } else if (character === '{') braces += 1;\n else if (character === '}') {\n if (braces === 0) return undefined;\n braces -= 1;\n }\n\n if (character === ';' && parentheses === 0 && brackets === 0 && braces === 0) {\n declarations.push(current);\n current = '';\n } else {\n current += character;\n }\n }\n\n if (quote || parentheses !== 0 || brackets !== 0 || braces !== 0) return undefined;\n declarations.push(current);\n return declarations;\n}\n\nfunction declarationColon(declaration: string): number | undefined {\n let quote: '\"' | \"'\" | undefined;\n let parentheses = 0;\n let brackets = 0;\n let braces = 0;\n\n for (let index = 0; index < declaration.length; index += 1) {\n const character = declaration[index];\n if (character === undefined) continue;\n if (quote) {\n if (character === '\\\\') index += 1;\n else if (character === quote) quote = undefined;\n continue;\n }\n if (character === '\"' || character === \"'\") {\n quote = character;\n continue;\n }\n if (character === '\\\\') {\n index += 1;\n continue;\n }\n if (character === '(') parentheses += 1;\n else if (character === ')') parentheses -= 1;\n else if (character === '[') brackets += 1;\n else if (character === ']') brackets -= 1;\n else if (character === '{') braces += 1;\n else if (character === '}') braces -= 1;\n else if (character === ':' && parentheses === 0 && brackets === 0 && braces === 0) return index;\n }\n return undefined;\n}\n\nfunction decodeIdentifier(value: string): string | undefined {\n const trimmed = value.trim();\n if (!trimmed) return undefined;\n\n let decoded = '';\n for (let index = 0; index < trimmed.length; index += 1) {\n const character = trimmed[index];\n if (character === undefined) continue;\n if (cssWhitespace.test(character)) return undefined;\n if (character !== '\\\\') {\n decoded += character;\n continue;\n }\n\n const next = trimmed[index + 1];\n if (next === undefined || next === '\\n' || next === '\\r' || next === '\\f') return undefined;\n let hex = '';\n let cursor = index + 1;\n while (hex.length < 6 && cursor < trimmed.length && hexDigit.test(trimmed[cursor] ?? '')) {\n hex += trimmed[cursor];\n cursor += 1;\n }\n if (hex) {\n const codePoint = Number.parseInt(hex, 16);\n decoded +=\n codePoint === 0 || codePoint > 0x10ffff || (codePoint >= 0xd800 && codePoint <= 0xdfff)\n ? '\\uFFFD'\n : String.fromCodePoint(codePoint);\n if (cssWhitespace.test(trimmed[cursor] ?? '')) {\n if (trimmed[cursor] === '\\r' && trimmed[cursor + 1] === '\\n') cursor += 1;\n cursor += 1;\n }\n index = cursor - 1;\n continue;\n }\n\n decoded += next;\n index += 1;\n }\n return decoded;\n}\n\nexport function literalStyleMayControlDisplay(value: string): boolean {\n const result = parseLiteralStyleDeclarations(value);\n if (result.status === 'unverified') return true;\n\n return result.declarations.some(declaration => declaration.property.toLowerCase() === 'display');\n}\n\nexport function parseLiteralStyleDeclarations(value: string): LiteralStyleParseResult {\n const segments = splitDeclarations(value);\n if (!segments) {\n return { status: 'unverified', reason: 'The literal style has malformed or unbalanced delimiters.' };\n }\n\n const declarations: LiteralStyleDeclaration[] = [];\n\n for (const segment of segments) {\n if (!segment.trim()) continue;\n const colon = declarationColon(segment);\n if (colon === undefined) {\n return { status: 'unverified', reason: 'A literal style declaration is missing its property separator.' };\n }\n const property = decodeIdentifier(segment.slice(0, colon));\n if (!property) {\n return { status: 'unverified', reason: 'A literal style declaration has an ambiguous property name.' };\n }\n declarations.push({ property, value: segment.slice(colon + 1).trim() });\n }\n\n return { status: 'parsed', declarations };\n}\n","import type { PlannedConversion } from '../../conversion-adapter';\nimport type { LocatedFlexLayoutInput } from '../../../analyzer/flex-layout-attribute.analyzer';\nimport { mediaRangesIntersect } from '../../../breakpoint/breakpoint-catalog';\nimport type { TemplateAttribute } from '../../../template/template.model';\nimport { templateAttributeKeys } from '../../../template/template-attribute';\nimport {\n describeTailwindDisplay,\n type TailwindActivation,\n type TailwindDisplayUtility,\n} from '../tailwind-class-conflict';\nimport type { VisibilityActivation, VisibilityState } from './visibility.model';\nimport { literalStyleMayControlDisplay } from './literal-style-display';\n\nexport type VisibleDisplayResolution =\n | { readonly status: 'resolved'; readonly utility?: string }\n | { readonly status: 'unverified'; readonly reason: string };\n\nexport interface VisibleDisplayRequest {\n readonly states: readonly VisibilityState[];\n readonly layoutPlans: readonly PlannedConversion[];\n readonly existingClassNames: readonly string[];\n readonly attributes: readonly TemplateAttribute[];\n readonly responsiveStyleInputs?: readonly LocatedFlexLayoutInput[];\n}\n\nconst restorationUtilities = new Set([\n 'inline',\n 'block',\n 'inline-block',\n 'flow-root',\n 'flex',\n 'inline-flex',\n 'grid',\n 'inline-grid',\n 'contents',\n 'table',\n 'inline-table',\n 'table-caption',\n 'table-cell',\n 'table-column',\n 'table-column-group',\n 'table-footer-group',\n 'table-header-group',\n 'table-row-group',\n 'table-row',\n 'list-item',\n]);\n\nconst unverifiedStyleReason = 'A literal or bound style may control the element display value.';\nconst unverifiedClassReason = 'Generated visibility classes cannot be merged safely with a bound class value.';\nconst unverifiedDisplayReason = 'The visible display value cannot be proven from one unambiguous source.';\n\nfunction controlsDisplay(attribute: TemplateAttribute): boolean {\n const keys = templateAttributeKeys(attribute);\n if (attribute.binding === 'literal') {\n return keys.has('style') && literalStyleMayControlDisplay(attribute.value);\n }\n\n return [...keys].some(\n key => key === 'style' || key === 'ngstyle' || key === 'style.display' || key.startsWith('style.display.'),\n );\n}\n\nfunction controlsClasses(attribute: TemplateAttribute): boolean {\n if (attribute.binding !== 'property') return false;\n return [...templateAttributeKeys(attribute)].some(\n key => key === 'class' || key === 'ngclass' || key.startsWith('class.') || key.startsWith('ngclass.'),\n );\n}\n\nfunction sameActivation(left: TailwindActivation, right: VisibilityActivation): boolean {\n if (left.kind !== right.kind) return false;\n if (left.kind === 'base' || right.kind === 'base') return true;\n return left.range.min === right.definition.range.min && left.range.max === right.definition.range.max;\n}\n\nfunction isPlainBase(descriptor: TailwindDisplayUtility): boolean {\n return descriptor.activation.kind === 'base' && !descriptor.important && descriptor.token === descriptor.utility;\n}\n\nfunction layoutDisplays(plans: readonly PlannedConversion[]): readonly TailwindDisplayUtility[] {\n return plans\n .filter(\n (plan): plan is Extract<PlannedConversion, { readonly status: 'converted' }> =>\n plan.status === 'converted' && plan.input.directive === 'fxLayout',\n )\n .flatMap(plan => plan.classNames.map(describeTailwindDisplay).filter(descriptor => descriptor !== undefined))\n .filter(\n descriptor =>\n (descriptor.utility === 'flex' || descriptor.utility === 'inline-flex') &&\n !descriptor.important &&\n (descriptor.activation.kind === 'media' || descriptor.token === descriptor.utility),\n );\n}\n\nfunction matchingLayoutUtility(\n displays: readonly TailwindDisplayUtility[],\n state: VisibilityState,\n): string | null | undefined {\n if (state.activation.kind === 'media') {\n const stateRange = state.activation.definition.range;\n const hasOverlappingLayout = displays.some(\n display =>\n display.activation.kind === 'media' &&\n !sameActivation(display.activation, state.activation) &&\n mediaRangesIntersect(display.activation.range, stateRange),\n );\n if (hasOverlappingLayout) return null;\n }\n\n const exact = displays.filter(display => sameActivation(display.activation, state.activation));\n const applicable = exact.length > 0 ? exact : displays.filter(display => display.activation.kind === 'base');\n if (applicable.length === 0) return undefined;\n const utilities = [...new Set(applicable.map(display => display.utility))];\n return utilities.length === 1 ? utilities[0] : null;\n}\n\nfunction existingRestorationUtility(descriptors: readonly TailwindDisplayUtility[]): string | undefined {\n if (descriptors.length !== 1) return undefined;\n const descriptor = descriptors[0];\n if (!descriptor || !isPlainBase(descriptor) || !restorationUtilities.has(descriptor.utility)) return undefined;\n return descriptor.utility;\n}\n\nexport class VisibleDisplayResolver {\n resolve(request: VisibleDisplayRequest): VisibleDisplayResolution {\n if (request.responsiveStyleInputs?.length || request.attributes.some(controlsDisplay)) {\n return { status: 'unverified', reason: unverifiedStyleReason };\n }\n\n const baseIsHidden = request.states.some(state => state.activation.kind === 'base' && state.intent === 'hidden');\n const shownOverrides = baseIsHidden\n ? request.states.filter(state => state.activation.kind === 'media' && state.intent === 'shown')\n : [];\n const displayDescriptors = request.existingClassNames\n .map(describeTailwindDisplay)\n .filter(descriptor => descriptor !== undefined);\n const hasEffectiveShownRange = !baseIsHidden || request.states.some(state => state.intent === 'shown');\n const classOutputRequired =\n request.states.some(state => state.intent === 'hidden') ||\n (hasEffectiveShownRange && displayDescriptors.some(descriptor => descriptor.utility === 'hidden'));\n\n if (classOutputRequired && request.attributes.some(controlsClasses)) {\n return { status: 'unverified', reason: unverifiedClassReason };\n }\n\n if (displayDescriptors.some(descriptor => descriptor.utility === 'hidden')) {\n return hasEffectiveShownRange\n ? { status: 'unverified', reason: unverifiedDisplayReason }\n : { status: 'resolved', utility: undefined };\n }\n\n if (shownOverrides.length === 0) return { status: 'resolved', utility: undefined };\n\n const displays = layoutDisplays(request.layoutPlans);\n const existingUtility = existingRestorationUtility(displayDescriptors);\n const utilities = shownOverrides.map(state => {\n const layoutUtility = matchingLayoutUtility(displays, state);\n return layoutUtility === undefined ? existingUtility : layoutUtility;\n });\n const distinctUtilities = [...new Set(utilities)];\n const utility = distinctUtilities[0];\n if (distinctUtilities.length !== 1 || typeof utility !== 'string') {\n return { status: 'unverified', reason: unverifiedDisplayReason };\n }\n\n return { status: 'resolved', utility };\n }\n}\n","import type { TemplateAttribute, TemplateElement } from '../template/template.model';\nimport type { SourceEdit } from './source-edit';\n\nconst htmlSourceWhitespace = /[\\t\\n\\f\\r ]/u;\nconst htmlReferencePrefix = /&(?:#|[a-z\\d])/iu;\n\n/**\n * Tailwind scans template bytes without first decoding HTML. A generated class\n * token is therefore safe only when the same bytes survive Angular's HTML\n * parsing and can be placed in both quote styles without entity escaping.\n */\nexport function isByteExactHtmlClassToken(token: string): boolean {\n return (\n token.length > 0 &&\n ![...token].some(character => htmlSourceWhitespace.test(character)) &&\n !/[\"'<]/u.test(token) &&\n !htmlReferencePrefix.test(token)\n );\n}\n\nfunction appendedRawValue(rawValue: string, missingClassNames: readonly string[]): string {\n const separator = rawValue.length > 0 && !htmlSourceWhitespace.test(rawValue.at(-1) ?? '') ? ' ' : '';\n return `${rawValue}${separator}${missingClassNames.join(' ')}`;\n}\n\nexport function appendLiteralClassNames(\n source: string,\n element: TemplateElement,\n classAttribute: TemplateAttribute | undefined,\n generatedClassNames: readonly string[],\n inputId: string,\n): SourceEdit | undefined {\n const uniqueGenerated = [...new Set(generatedClassNames)];\n // Deduplicate only against byte-identical source candidates. An entity-decoded\n // equivalent has the same Angular token but remains invisible to Tailwind's\n // raw source scanner, so the generated spelling must still be appended.\n const existingRawClassNames = classAttribute?.rawValue.split(/[\\t\\n\\f\\r ]+/u).filter(Boolean) ?? [];\n const missingClassNames = uniqueGenerated.filter(className => !existingRawClassNames.includes(className));\n if (missingClassNames.length === 0) return undefined;\n\n if (!missingClassNames.every(isByteExactHtmlClassToken)) {\n throw new Error('Generated class names must be byte-exact HTML source tokens before editing.');\n }\n\n if (classAttribute !== undefined) {\n if (classAttribute.valueSource === undefined) {\n return {\n range: classAttribute.source,\n text: `${classAttribute.rawName}=\"${missingClassNames.join(' ')}\"`,\n inputId,\n };\n }\n\n const value = appendedRawValue(classAttribute.rawValue, missingClassNames);\n const delimiter = source[classAttribute.valueSource.start - 1];\n if (delimiter === '\"' || delimiter === \"'\") {\n return { range: classAttribute.valueSource, text: value, inputId };\n }\n\n return {\n range: classAttribute.source,\n text: `${classAttribute.rawName}=\"${value}\"`,\n inputId,\n };\n }\n\n const startTag = source.slice(element.startTag.start, element.startTag.end);\n const selfClosing = startTag.endsWith('/>');\n const insertionOffset = element.startTag.end - (selfClosing ? 2 : 1);\n const hasClosingWhitespace = htmlSourceWhitespace.test(source[insertionOffset - 1] ?? '');\n const classAttributeText = `class=\"${missingClassNames.join(' ')}\"`;\n return {\n range: { start: insertionOffset, end: insertionOffset },\n text: selfClosing && hasClosingWhitespace ? `${classAttributeText} ` : ` ${classAttributeText}`,\n inputId,\n };\n}\n","import type { LiteralStyleDeclaration } from '../visibility/literal-style-display';\nimport { isByteExactHtmlClassToken } from '../../../edit/html-attribute-value';\n\nconst ordinaryProperty = /^-?[a-z][a-z\\d-]*$/iu;\nconst customProperty = /^--[a-z\\d_-]+$/iu;\n\nfunction containsControl(value: string): boolean {\n return [...value].some(character => {\n const codePoint = character.codePointAt(0);\n return codePoint !== undefined && (codePoint < 0x20 || codePoint === 0x7f);\n });\n}\n\nfunction isEncodable(declaration: LiteralStyleDeclaration): boolean {\n const propertyIsValid = ordinaryProperty.test(declaration.property) || customProperty.test(declaration.property);\n return (\n propertyIsValid &&\n declaration.value.length > 0 &&\n !containsControl(declaration.value) &&\n !/[\\\\[\\]{}]/u.test(declaration.value)\n );\n}\n\nexport class TailwindArbitraryPropertyEncoder {\n encode(declaration: LiteralStyleDeclaration): string {\n if (!isEncodable(declaration)) {\n throw new Error('The style declaration cannot be encoded as an exact Tailwind arbitrary property.');\n }\n\n const value = declaration.value.replaceAll('_', '\\\\_').replaceAll(' ', '_');\n const candidate = `[${declaration.property}:${value}]`;\n if (!isByteExactHtmlClassToken(candidate)) {\n throw new Error('The style declaration cannot be encoded as a byte-exact HTML source candidate.');\n }\n return candidate;\n }\n}\n","import type { LocatedFlexLayoutInput } from '../../../analyzer/flex-layout-attribute.analyzer';\nimport { BreakpointCatalog } from '../../../breakpoint/breakpoint-catalog';\nimport type { LiteralStyleDeclaration, ResponsiveStyleValueResult } from './responsive-style.model';\nimport { TailwindArbitraryPropertyEncoder } from './tailwind-arbitrary-property.encoder';\nimport { cssPropertiesOverlap } from './css-property-ownership';\nimport { analyzeTailwindArbitrarySyntax } from '../tailwind-arbitrary-syntax';\n\nconst interpolation = /\\{\\{[\\s\\S]*\\}\\}/u;\nconst dashedOrdinaryProperty = /^-?[a-z][a-z\\d-]*$/iu;\nconst rendererProperty = /^[a-z][a-z\\d]*$/u;\nconst customProperty = /^--[a-z\\d_-]+$/iu;\nconst unitSuffixes = new Set(['px', '%', 'em', 'rem', 'vw', 'vh', 'vmin', 'vmax', 'deg', 's', 'ms']);\nconst unitlessNumber = /^[+-]?(?:(?:\\d+(?:\\.\\d*)?)|(?:\\.\\d+))(?:e[+-]?\\d+)?$/iu;\nconst sanitizerSensitiveFunction = /(?:^|[^a-z\\d_-])(?:url|expression|image|(?:-webkit-)?image-set)\\s*\\(/iu;\nconst tailwindBuildFunction = /(?:^|[^a-z\\d_-])(?:--alpha|--theme|--spacing|theme)\\s*\\(/iu;\nconst urlScheme = /(?:https?|data|blob|file|javascript):/iu;\n\ninterface NormalizedProperty {\n readonly property: string;\n readonly unit?: string;\n}\n\nexport const responsiveStyleExactKeyAliasReason =\n \"Distinct exact ngStyle keys alias the same browser CSS property, so Angular's activation-history-dependent removal order cannot be represented exactly.\";\n\nfunction normalizeProperty(property: string): NormalizedProperty | undefined {\n if (property.startsWith('--')) {\n return customProperty.test(property) ? { property } : undefined;\n }\n\n const parts = property.split('.');\n if (parts.length > 2) return undefined;\n const sourceName = parts[0] ?? '';\n const name = sourceName.includes('-')\n ? dashedOrdinaryProperty.test(sourceName)\n ? sourceName.toLowerCase()\n : undefined\n : rendererProperty.test(sourceName)\n ? sourceName\n : undefined;\n if (name === undefined) return undefined;\n\n const unit = parts[1];\n if (unit === undefined) return { property: name };\n const normalizedUnit = unit.toLowerCase();\n return unitSuffixes.has(normalizedUnit) ? { property: name, unit: normalizedUnit } : undefined;\n}\n\nfunction transformUpstreamRawList(value: string): ResponsiveStyleValueResult {\n const rawDeclarations = String(value)\n .trim()\n .split(';')\n .map(item => item.trim())\n .filter(item => item !== '');\n const declarationsByExactProperty = new Map<string, LiteralStyleDeclaration>();\n\n for (const rawDeclaration of rawDeclarations) {\n const [rawKey, ...rawValues] = rawDeclaration.split(':');\n if (rawValues.length === 0) {\n return {\n status: 'unverified',\n reason: 'Upstream semicolon splitting produced a style entry without a property separator.',\n };\n }\n\n const property = (rawKey ?? '').replace(/['\"]/gu, '').trim();\n const transformedValue = rawValues.join(':').replace(/['\"]/gu, '').trim().replace(/;/u, '');\n if (!property || !transformedValue) {\n return {\n status: 'unverified',\n reason: 'Upstream raw-string transformation produced an empty style key or value.',\n };\n }\n // Flex-Layout reduces its raw string into a plain object first. Updating an\n // exact key keeps that key's original insertion position, while a\n // differently-cased key is applied later as a distinct renderer entry.\n declarationsByExactProperty.set(property, { property, value: transformedValue });\n }\n\n return { status: 'parsed', value: { declarations: [...declarationsByExactProperty.values()] } };\n}\n\nfunction declarationsHaveExactKeyAliases(declarations: readonly LiteralStyleDeclaration[]): boolean {\n const exactKeyByAppliedProperty = new Map<string, string>();\n\n for (const declaration of declarations) {\n const normalized = normalizeProperty(declaration.property);\n if (normalized === undefined) continue;\n\n const previous = exactKeyByAppliedProperty.get(normalized.property);\n if (previous !== undefined && previous !== declaration.property) return true;\n exactKeyByAppliedProperty.set(normalized.property, declaration.property);\n }\n\n return false;\n}\n\nexport function responsiveStyleValuesHaveExactKeyAliases(values: readonly string[]): boolean {\n const declarations: LiteralStyleDeclaration[] = [];\n for (const value of values) {\n const transformed = transformUpstreamRawList(value);\n if (transformed.status === 'parsed') declarations.push(...transformed.value.declarations);\n }\n return declarationsHaveExactKeyAliases(declarations);\n}\n\nfunction normalizeDeclaration(\n declaration: LiteralStyleDeclaration,\n encoder: TailwindArbitraryPropertyEncoder,\n): LiteralStyleDeclaration | undefined {\n const normalized = normalizeProperty(declaration.property);\n if (!normalized || !declaration.value) return undefined;\n\n if (\n sanitizerSensitiveFunction.test(declaration.value) ||\n tailwindBuildFunction.test(declaration.value) ||\n urlScheme.test(declaration.value)\n ) {\n return undefined;\n }\n\n const value =\n normalized.unit === undefined\n ? declaration.value\n : unitlessNumber.test(declaration.value)\n ? `${declaration.value}${normalized.unit}`\n : undefined;\n if (value === undefined) return undefined;\n\n const result = { property: normalized.property, value };\n try {\n const candidate = encoder.encode(result);\n const arbitrary = analyzeTailwindArbitrarySyntax(candidate);\n if (arbitrary === undefined || arbitrary.important) return undefined;\n } catch {\n return undefined;\n }\n return result;\n}\n\nexport function parseLiteralResponsiveStyleValue(value: string): ResponsiveStyleValueResult {\n const transformed = transformUpstreamRawList(value);\n if (transformed.status === 'unverified') return transformed;\n if (declarationsHaveExactKeyAliases(transformed.value.declarations)) {\n return {\n status: 'unverified',\n reason: responsiveStyleExactKeyAliasReason,\n };\n }\n\n const declarationsByProperty = new Map<string, LiteralStyleDeclaration>();\n const encoder = new TailwindArbitraryPropertyEncoder();\n\n for (const declaration of transformed.value.declarations) {\n const normalized = normalizeDeclaration(declaration, encoder);\n if (!normalized) {\n const importantCandidate = (() => {\n try {\n return analyzeTailwindArbitrarySyntax(encoder.encode(declaration))?.important === true;\n } catch {\n return false;\n }\n })();\n return {\n status: 'unverified',\n reason: importantCandidate\n ? `The declaration for ${JSON.stringify(declaration.property)} contains priority text that Angular NgStyle does not apply.`\n : `The declaration for ${JSON.stringify(declaration.property)} cannot be sanitized and encoded exactly.`,\n };\n }\n declarationsByProperty.set(normalized.property, normalized);\n }\n\n const declarations = [...declarationsByProperty.values()];\n for (const [index, declaration] of declarations.entries()) {\n const overlapping = declarations\n .slice(index + 1)\n .find(candidate => cssPropertiesOverlap(declaration.property, candidate.property));\n if (overlapping !== undefined) {\n return {\n status: 'unverified',\n reason: `The properties ${JSON.stringify(declaration.property)} and ${JSON.stringify(overlapping.property)} have overlapping CSS property ownership.`,\n };\n }\n }\n\n return { status: 'parsed', value: { declarations } };\n}\n\nexport function parseResponsiveStyleValue(input: LocatedFlexLayoutInput): ResponsiveStyleValueResult {\n if (input.binding !== 'literal') {\n return { status: 'unverified', reason: 'Responsive style property bindings may depend on runtime state.' };\n }\n if (input.directive !== 'ngStyle') {\n return { status: 'unverified', reason: 'Deprecated responsive style aliases are not converted.' };\n }\n if (input.breakpoint === undefined || new BreakpointCatalog().classify(input.breakpoint).kind !== 'verified') {\n return { status: 'unverified', reason: 'The responsive style breakpoint is not a verified viewport alias.' };\n }\n if (interpolation.test(input.value)) {\n return { status: 'unverified', reason: 'Responsive style interpolation may depend on runtime state.' };\n }\n\n return parseLiteralResponsiveStyleValue(input.value);\n}\n","import type { LocatedFlexLayoutInput } from '../../../analyzer/flex-layout-attribute.analyzer';\nimport {\n BreakpointCatalog,\n mediaRangesIntersect,\n type BreakpointClassification,\n} from '../../../breakpoint/breakpoint-catalog';\nimport type { PlannedConversion } from '../../conversion-adapter';\nimport type {\n ExtendedFamilyPlan,\n ExtendedFamilyPlanRequest,\n ExtendedResponsiveKind,\n ExtendedResponsiveState,\n} from './responsive-class.model';\nimport {\n responsiveStyleExactKeyAliasReason,\n responsiveStyleValuesHaveExactKeyAliases,\n} from './responsive-style-value.parser';\n\ntype ClassifiedMember<T> =\n | { readonly input: LocatedFlexLayoutInput; readonly state: ExtendedResponsiveState<T> }\n | { readonly input: LocatedFlexLayoutInput; readonly plan: PlannedConversion };\n\ntype ClassifiedState<T> = Extract<ClassifiedMember<T>, { readonly state: ExtendedResponsiveState<T> }>;\n\nfunction dynamicBinding(input: LocatedFlexLayoutInput): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'dynamic-binding',\n reason: 'Angular property bindings and interpolation may depend on runtime state.',\n suggestion: 'Replace the binding manually or make it a literal before migration.',\n };\n}\n\nfunction deprecatedAlias(input: LocatedFlexLayoutInput, kind: ExtendedResponsiveKind): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'semantic-unsupported',\n reason: `Deprecated responsive ${kind} aliases have version-dependent behavior.`,\n suggestion: `Keep the deprecated alias or migrate the complete responsive ${kind} family manually.`,\n };\n}\n\nfunction unresolvedBreakpoint(\n input: LocatedFlexLayoutInput,\n classification: Exclude<BreakpointClassification, { readonly kind: 'verified' }>,\n): PlannedConversion {\n if (classification.kind === 'custom') {\n return {\n status: 'review',\n input,\n code: 'custom-breakpoint',\n reason: `The breakpoint alias ${classification.alias} may be registered by the project.`,\n suggestion: 'Provide its media query or migrate this responsive family manually.',\n };\n }\n\n const kind = classification.kind === 'print' ? 'print' : 'optional';\n return {\n status: 'review',\n input,\n code: 'breakpoint-unverified',\n reason: `Exact media-query output for the ${kind} breakpoint alias ${classification.alias} is not implemented.`,\n suggestion: 'Keep the responsive directive until exact breakpoint support is available.',\n };\n}\n\nfunction unverifiedValue(\n input: LocatedFlexLayoutInput,\n kind: ExtendedResponsiveKind,\n token: string | undefined,\n reason: string,\n): PlannedConversion {\n if (kind === 'style') {\n return {\n status: 'review',\n input,\n code: 'style-value-unverified',\n reason,\n suggestion: 'Keep the complete responsive style family or replace unsafe declarations before migration.',\n };\n }\n\n return {\n status: 'review',\n input,\n code: 'tailwind-candidate-unverified',\n reason:\n token === undefined\n ? reason\n : `The first unverified token is ${JSON.stringify(token)}. It may be an application or plugin class. ${reason}`,\n suggestion: 'Keep the complete responsive class family or replace unverified classes before migration.',\n };\n}\n\nfunction contextUnverified(input: LocatedFlexLayoutInput): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'context-unverified',\n reason: 'Another member of this responsive family is unresolved.',\n suggestion: 'Migrate the complete responsive family together manually.',\n };\n}\n\nfunction responsivePrecedenceUnverified(input: LocatedFlexLayoutInput): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'responsive-precedence-unverified',\n reason: 'The responsive family contains different values in intersecting activation ranges.',\n suggestion: 'Make intersecting values identical or migrate the complete responsive family manually.',\n };\n}\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n\nexport class ExtendedFamilyPlanner {\n constructor(private readonly catalog = new BreakpointCatalog()) {}\n\n plan<T>(request: ExtendedFamilyPlanRequest<T>): ExtendedFamilyPlan<T> {\n const members = request.inputs\n .map(input => this.classify(input, request.kind, request.valueParser))\n .sort((left, right) => this.compare(left.input, right.input));\n\n if (!members.every((member): member is ClassifiedState<T> => 'state' in member)) {\n return {\n status: 'unresolved',\n plans: members.map(member => ('plan' in member ? member.plan : contextUnverified(member.input))),\n };\n }\n\n const states = members.map(member => member.state);\n if (request.kind === 'style' && responsiveStyleValuesHaveExactKeyAliases(states.map(state => state.input.value))) {\n return {\n status: 'unresolved',\n plans: states.map(state =>\n unverifiedValue(state.input, request.kind, undefined, responsiveStyleExactKeyAliasReason),\n ),\n };\n }\n if (this.hasConflictingStates(states, request.equals)) {\n return {\n status: 'unresolved',\n plans: states.map(state => responsivePrecedenceUnverified(state.input)),\n };\n }\n\n return { status: 'converted', states };\n }\n\n private classify<T>(\n input: LocatedFlexLayoutInput,\n kind: ExtendedResponsiveKind,\n valueParser: ExtendedFamilyPlanRequest<T>['valueParser'],\n ): ClassifiedMember<T> {\n if (input.binding !== 'literal' || /\\{\\{[\\s\\S]*\\}\\}/u.test(input.value)) {\n return { input, plan: dynamicBinding(input) };\n }\n const expectedDirective = kind === 'class' ? 'ngClass' : 'ngStyle';\n if (input.directive !== expectedDirective) return { input, plan: deprecatedAlias(input, kind) };\n if (input.breakpoint === undefined) return { input, plan: deprecatedAlias(input, kind) };\n\n const breakpoint = this.catalog.classify(input.breakpoint);\n if (breakpoint.kind !== 'verified') return { input, plan: unresolvedBreakpoint(input, breakpoint) };\n\n const parsed = valueParser(input);\n if (parsed.status === 'unverified') {\n return { input, plan: unverifiedValue(input, kind, parsed.token, parsed.reason) };\n }\n\n return {\n input,\n state: {\n input,\n activation: { kind: 'media', definition: breakpoint.definition },\n value: parsed.value,\n },\n };\n }\n\n private hasConflictingStates<T>(\n states: readonly ExtendedResponsiveState<T>[],\n equals: (left: T, right: T) => boolean,\n ): boolean {\n return states.some((left, leftIndex) =>\n states\n .slice(leftIndex + 1)\n .some(\n right =>\n !equals(left.value, right.value) &&\n mediaRangesIntersect(left.activation.definition.range, right.activation.definition.range),\n ),\n );\n }\n\n private compare(left: LocatedFlexLayoutInput, right: LocatedFlexLayoutInput): number {\n const leftPriority = this.breakpointPriority(left.breakpoint);\n const rightPriority = this.breakpointPriority(right.breakpoint);\n if (leftPriority !== rightPriority) return rightPriority - leftPriority;\n\n const aliasOrder = compareText(left.breakpoint ?? '', right.breakpoint ?? '');\n return aliasOrder || compareText(left.id, right.id);\n }\n\n private breakpointPriority(alias: string | undefined): number {\n if (alias === undefined) return Number.NEGATIVE_INFINITY;\n const classification = this.catalog.classify(alias);\n return classification.kind === 'verified' ? classification.definition.priority : Number.NEGATIVE_INFINITY;\n }\n}\n","import { describeTailwindUtility, type TailwindUtilityDescriptor } from '../tailwind-class-conflict';\nimport { hasValidTailwindArbitrarySyntax } from '../tailwind-arbitrary-syntax';\nimport { isByteExactHtmlClassToken } from '../../../edit/html-attribute-value';\nimport {\n isConservativelyAdmittedBorderWidth,\n isConservativelyAdmittedTextLength,\n} from './tailwind-arbitrary-value-ownership';\n\nexport type TailwindCandidateClassification =\n | { readonly status: 'verified'; readonly descriptor: TailwindUtilityDescriptor }\n | { readonly status: 'unverified'; readonly reason: string };\n\ntype CssProperties = readonly string[] | ((value: string) => readonly string[] | undefined);\n\ninterface NamespaceRule {\n readonly namespace: string;\n readonly cssProperties: CssProperties;\n readonly negative?: boolean;\n readonly accepts: (value: string) => boolean;\n readonly acceptsNegative?: (value: string) => boolean;\n}\n\nconst exactTokenRegistry = Object.freeze([\n ['inline', ['display']],\n ['block', ['display']],\n ['inline-block', ['display']],\n ['flow-root', ['display']],\n ['flex', ['display']],\n ['inline-flex', ['display']],\n ['grid', ['display']],\n ['inline-grid', ['display']],\n ['contents', ['display']],\n ['table', ['display']],\n ['inline-table', ['display']],\n ['list-item', ['display']],\n ['hidden', ['display']],\n ['flex-row', ['flex-direction']],\n ['flex-row-reverse', ['flex-direction']],\n ['flex-col', ['flex-direction']],\n ['flex-col-reverse', ['flex-direction']],\n ['flex-wrap', ['flex-wrap']],\n ['flex-wrap-reverse', ['flex-wrap']],\n ['flex-nowrap', ['flex-wrap']],\n ['static', ['position']],\n ['fixed', ['position']],\n ['absolute', ['position']],\n ['relative', ['position']],\n ['sticky', ['position']],\n ['border', ['border-style', 'border-width']],\n ['shadow', ['--tw-shadow', 'box-shadow']],\n ['transition', ['transition-property', 'transition-timing-function', 'transition-duration']],\n ['visible', ['visibility']],\n ['invisible', ['visibility']],\n ['collapse', ['visibility']],\n [\n 'sr-only',\n ['position', 'width', 'height', 'padding', 'margin', 'overflow', 'clip-path', 'white-space', 'border-width'],\n ],\n ['not-sr-only', ['position', 'width', 'height', 'padding', 'margin', 'overflow', 'clip-path', 'white-space']],\n] as const);\n\nconst defaultColorNames = Object.freeze([\n 'inherit',\n 'current',\n 'transparent',\n 'black',\n 'white',\n 'red',\n 'orange',\n 'amber',\n 'yellow',\n 'lime',\n 'green',\n 'emerald',\n 'teal',\n 'cyan',\n 'sky',\n 'blue',\n 'indigo',\n 'violet',\n 'purple',\n 'fuchsia',\n 'pink',\n 'rose',\n 'slate',\n 'gray',\n 'zinc',\n 'neutral',\n 'stone',\n] as const);\nconst defaultColorShades = Object.freeze(['50', '100', '200', '300', '400', '500', '600', '700', '800', '900', '950']);\nconst textSizes = Object.freeze([\n 'xs',\n 'sm',\n 'base',\n 'lg',\n 'xl',\n '2xl',\n '3xl',\n '4xl',\n '5xl',\n '6xl',\n '7xl',\n '8xl',\n '9xl',\n]);\n\nfunction isNumber(value: string): boolean {\n return /^(?:0|[1-9]\\d*)(?:\\.\\d+)?$/u.test(value);\n}\n\nfunction isInteger(value: string): boolean {\n return /^(?:0|[1-9]\\d*)$/u.test(value);\n}\n\nfunction isPercentage(value: string): boolean {\n if (!isNumber(value)) return false;\n const number = Number(value);\n return number >= 0 && number <= 100;\n}\n\nfunction hasValidArbitrarySyntax(value: string): boolean {\n return hasValidTailwindArbitrarySyntax(value);\n}\n\nfunction hasCompilerMeaningfulArbitraryValue(value: string): boolean {\n if (!hasValidArbitrarySyntax(value)) return false;\n\n const payload = value\n .slice(1, -1)\n .replace(/\\/\\*[\\s\\S]*?\\*\\//gu, '')\n .replace(/^[a-z][a-z-]*:/iu, '')\n .replace(/[\\s_()[\\]{}'\"`]/gu, '');\n return payload.length > 0;\n}\n\nfunction isCssVariableValue(value: string): boolean {\n return /^\\(--[A-Za-z_][A-Za-z0-9_-]*\\)$/u.test(value);\n}\n\nfunction isArbitraryOrVariable(value: string): boolean {\n return hasCompilerMeaningfulArbitraryValue(value) || isCssVariableValue(value);\n}\n\nfunction isFraction(value: string): boolean {\n const [numerator, denominator, remainder] = value.split('/');\n return remainder === undefined && isInteger(numerator ?? '') && /^[1-9]\\d*$/u.test(denominator ?? '');\n}\n\nfunction isSpacing(value: string): boolean {\n return isNumber(value) || value === 'px' || isArbitraryOrVariable(value);\n}\n\nfunction isMargin(value: string): boolean {\n return isSpacing(value) || value === 'auto';\n}\n\nfunction isFractionalSpacing(value: string): boolean {\n return isSpacing(value) || isFraction(value) || value === 'full';\n}\n\nfunction isInset(value: string): boolean {\n return isFractionalSpacing(value) || value === 'auto';\n}\n\nfunction isDimension(value: string): boolean {\n return (\n isFractionalSpacing(value) ||\n value === 'auto' ||\n ['screen', 'dvh', 'dvw', 'lvh', 'lvw', 'svh', 'svw', 'min', 'max', 'fit'].includes(value)\n );\n}\n\nfunction isWidth(value: string): boolean {\n return isDimension(value) || /^(?:3xs|2xs|xs|sm|md|lg|xl|[2-7]xl)$/u.test(value);\n}\n\nfunction isArbitraryColor(value: string): boolean {\n if (!hasCompilerMeaningfulArbitraryValue(value)) return false;\n const color = value.slice(1, -1);\n return /^(?:color:|#|(?:rgb|rgba|hsl|hsla|hwb|lab|lch|oklab|oklch|color|light-dark|color-mix|var)\\()/u.test(color);\n}\n\nfunction isBackgroundImage(value: string): boolean {\n if (!hasCompilerMeaningfulArbitraryValue(value)) return false;\n const image = value.slice(1, -1);\n return /^(?:image:|url\\(|(?:linear|radial|conic)-gradient\\()/u.test(image);\n}\n\nfunction isColor(value: string): boolean {\n const [color, opacity, remainder] = value.split('/');\n if (remainder !== undefined) return false;\n\n const isDefault =\n ['inherit', 'current', 'transparent', 'black', 'white'].includes(color ?? '') ||\n (defaultColorNames.includes((color?.split('-')[0] ?? '') as (typeof defaultColorNames)[number]) &&\n defaultColorShades.includes((color?.split('-')[1] ?? '') as (typeof defaultColorShades)[number]) &&\n color?.split('-').length === 2);\n if (!isDefault && !isArbitraryColor(color ?? '') && !isCssVariableValue(color ?? '')) return false;\n return opacity === undefined || isPercentage(opacity) || isArbitraryOrVariable(opacity);\n}\n\nfunction isBackgroundColor(value: string): boolean {\n const [color] = value.split('/');\n if (isCssVariableValue(color ?? '')) return false;\n if (/^\\[var\\(/u.test(color ?? '')) return false;\n return isColor(value);\n}\n\nfunction textCssProperties(value: string): readonly string[] | undefined {\n const [size, lineHeight, remainder] = value.split('/');\n const hasVerifiedLineHeight =\n remainder === undefined && (lineHeight === undefined || isNumber(lineHeight) || isArbitraryOrVariable(lineHeight));\n if (textSizes.includes((size ?? '') as (typeof textSizes)[number])) {\n return hasVerifiedLineHeight ? ['font-size', 'line-height'] : undefined;\n }\n const arbitrarySize = size ?? '';\n const hasUnambiguousArbitrarySize =\n hasCompilerMeaningfulArbitraryValue(arbitrarySize) && isConservativelyAdmittedTextLength(arbitrarySize);\n if (hasUnambiguousArbitrarySize) {\n if (!hasVerifiedLineHeight) return undefined;\n return lineHeight === undefined ? ['font-size'] : ['font-size', 'line-height'];\n }\n if (hasCompilerMeaningfulArbitraryValue(value) && /^\\[color:[\\s\\S]+\\]$/u.test(value)) return ['color'];\n if (isColor(value)) return ['color'];\n return undefined;\n}\n\nfunction acceptsText(value: string): boolean {\n return textCssProperties(value) !== undefined;\n}\n\nfunction borderCssProperties(value: string): readonly string[] | undefined {\n if (isInteger(value) || (hasCompilerMeaningfulArbitraryValue(value) && isConservativelyAdmittedBorderWidth(value))) {\n return ['border-style', 'border-width'];\n }\n if (oneOf(['solid', 'dashed', 'dotted', 'double', 'hidden', 'none'])(value)) {\n return ['--tw-border-style', 'border-style'];\n }\n if (isColor(value) || isCssVariableValue(value) || /^\\[(?:color:|var\\()/u.test(value)) {\n return ['border-color'];\n }\n return undefined;\n}\n\nfunction transitionCssProperties(value: string): readonly string[] {\n return value === 'none'\n ? ['transition-property']\n : ['transition-property', 'transition-timing-function', 'transition-duration'];\n}\n\nfunction scaleCssProperties(value: string): readonly string[] | undefined {\n if (isInteger(value)) return ['--tw-scale-x', '--tw-scale-y', '--tw-scale-z', 'scale'];\n return isArbitraryOrVariable(value) ? ['scale'] : undefined;\n}\n\nfunction oneOf(values: readonly string[]): (value: string) => boolean {\n return value => values.includes(value);\n}\n\nconst namespaceRegistry: readonly NamespaceRule[] = Object.freeze([\n {\n namespace: 'items',\n cssProperties: ['align-items'],\n accepts: oneOf(['start', 'end', 'center', 'baseline', 'stretch']),\n },\n { namespace: 'gap', cssProperties: ['gap'], accepts: value => isNumber(value) || isArbitraryOrVariable(value) },\n {\n namespace: 'gap-x',\n cssProperties: ['column-gap'],\n accepts: value => isNumber(value) || isArbitraryOrVariable(value),\n },\n { namespace: 'gap-y', cssProperties: ['row-gap'], accepts: value => isNumber(value) || isArbitraryOrVariable(value) },\n { namespace: 'm', cssProperties: ['margin'], negative: true, accepts: isMargin, acceptsNegative: isSpacing },\n { namespace: 'mx', cssProperties: ['margin-inline'], negative: true, accepts: isMargin, acceptsNegative: isSpacing },\n { namespace: 'my', cssProperties: ['margin-block'], negative: true, accepts: isMargin, acceptsNegative: isSpacing },\n { namespace: 'mt', cssProperties: ['margin-top'], negative: true, accepts: isMargin, acceptsNegative: isSpacing },\n { namespace: 'mr', cssProperties: ['margin-right'], negative: true, accepts: isMargin, acceptsNegative: isSpacing },\n { namespace: 'mb', cssProperties: ['margin-bottom'], negative: true, accepts: isMargin, acceptsNegative: isSpacing },\n { namespace: 'ml', cssProperties: ['margin-left'], negative: true, accepts: isMargin, acceptsNegative: isSpacing },\n {\n namespace: 'ms',\n cssProperties: ['margin-inline-start'],\n negative: true,\n accepts: isMargin,\n acceptsNegative: isSpacing,\n },\n {\n namespace: 'me',\n cssProperties: ['margin-inline-end'],\n negative: true,\n accepts: isMargin,\n acceptsNegative: isSpacing,\n },\n {\n namespace: 'p',\n cssProperties: ['padding'],\n accepts: value => isNumber(value) || value === 'px' || isArbitraryOrVariable(value),\n },\n {\n namespace: 'px',\n cssProperties: ['padding-inline'],\n accepts: value => isNumber(value) || value === 'px' || isArbitraryOrVariable(value),\n },\n {\n namespace: 'py',\n cssProperties: ['padding-block'],\n accepts: value => isNumber(value) || value === 'px' || isArbitraryOrVariable(value),\n },\n {\n namespace: 'pt',\n cssProperties: ['padding-top'],\n accepts: value => isNumber(value) || value === 'px' || isArbitraryOrVariable(value),\n },\n {\n namespace: 'pr',\n cssProperties: ['padding-right'],\n accepts: value => isNumber(value) || value === 'px' || isArbitraryOrVariable(value),\n },\n {\n namespace: 'pb',\n cssProperties: ['padding-bottom'],\n accepts: value => isNumber(value) || value === 'px' || isArbitraryOrVariable(value),\n },\n {\n namespace: 'pl',\n cssProperties: ['padding-left'],\n accepts: value => isNumber(value) || value === 'px' || isArbitraryOrVariable(value),\n },\n {\n namespace: 'ps',\n cssProperties: ['padding-inline-start'],\n accepts: value => isNumber(value) || value === 'px' || isArbitraryOrVariable(value),\n },\n {\n namespace: 'pe',\n cssProperties: ['padding-inline-end'],\n accepts: value => isNumber(value) || value === 'px' || isArbitraryOrVariable(value),\n },\n { namespace: 'w', cssProperties: ['width'], accepts: isWidth },\n { namespace: 'h', cssProperties: ['height'], accepts: isDimension },\n { namespace: 'min-w', cssProperties: ['min-width'], accepts: isWidth },\n { namespace: 'min-h', cssProperties: ['min-height'], accepts: isDimension },\n { namespace: 'max-w', cssProperties: ['max-width'], accepts: value => value !== 'auto' && isWidth(value) },\n { namespace: 'max-h', cssProperties: ['max-height'], accepts: value => value !== 'auto' && isDimension(value) },\n { namespace: 'text', cssProperties: textCssProperties, accepts: acceptsText },\n { namespace: 'bg', cssProperties: ['background-color'], accepts: isBackgroundColor },\n { namespace: 'bg', cssProperties: ['background-image'], accepts: isBackgroundImage },\n {\n namespace: 'border',\n cssProperties: borderCssProperties,\n accepts: value => borderCssProperties(value) !== undefined,\n },\n {\n namespace: 'rounded',\n cssProperties: ['border-radius'],\n accepts: value =>\n oneOf(['none', 'xs', 'sm', 'md', 'lg', 'xl', '2xl', '3xl', '4xl', 'full'])(value) || isArbitraryOrVariable(value),\n },\n {\n namespace: 'shadow',\n cssProperties: ['--tw-shadow', 'box-shadow'],\n accepts: value => oneOf(['2xs', 'xs', 'sm', 'md', 'lg', 'xl', '2xl', 'none'])(value) || isCssVariableValue(value),\n },\n {\n namespace: 'opacity',\n cssProperties: ['opacity'],\n accepts: value => isPercentage(value) || isArbitraryOrVariable(value),\n },\n {\n namespace: 'overflow',\n cssProperties: ['overflow'],\n accepts: oneOf(['auto', 'hidden', 'clip', 'visible', 'scroll']),\n },\n {\n namespace: 'inset',\n cssProperties: ['inset'],\n negative: true,\n accepts: isInset,\n acceptsNegative: isFractionalSpacing,\n },\n {\n namespace: 'inset-x',\n cssProperties: ['inset-inline'],\n negative: true,\n accepts: isInset,\n acceptsNegative: isFractionalSpacing,\n },\n {\n namespace: 'inset-y',\n cssProperties: ['inset-block'],\n negative: true,\n accepts: isInset,\n acceptsNegative: isFractionalSpacing,\n },\n { namespace: 'top', cssProperties: ['top'], negative: true, accepts: isInset, acceptsNegative: isFractionalSpacing },\n {\n namespace: 'right',\n cssProperties: ['right'],\n negative: true,\n accepts: isInset,\n acceptsNegative: isFractionalSpacing,\n },\n {\n namespace: 'bottom',\n cssProperties: ['bottom'],\n negative: true,\n accepts: isInset,\n acceptsNegative: isFractionalSpacing,\n },\n {\n namespace: 'left',\n cssProperties: ['left'],\n negative: true,\n accepts: isInset,\n acceptsNegative: isFractionalSpacing,\n },\n {\n namespace: 'rotate',\n cssProperties: ['rotate'],\n negative: true,\n accepts: value => isInteger(value) || isArbitraryOrVariable(value),\n },\n {\n namespace: 'scale',\n cssProperties: scaleCssProperties,\n accepts: value => scaleCssProperties(value) !== undefined,\n },\n {\n namespace: 'translate',\n cssProperties: ['--tw-translate-x', '--tw-translate-y', 'translate'],\n negative: true,\n accepts: isFractionalSpacing,\n },\n {\n namespace: 'transition',\n cssProperties: transitionCssProperties,\n accepts: oneOf(['all', 'colors', 'opacity', 'shadow', 'transform', 'none']),\n },\n {\n namespace: 'grid-cols',\n cssProperties: ['grid-template-columns'],\n accepts: value => /^[1-9]\\d*$/u.test(value) || oneOf(['none', 'subgrid'])(value) || isArbitraryOrVariable(value),\n },\n { namespace: 'table', cssProperties: ['table-layout'], accepts: oneOf(['auto', 'fixed']) },\n {\n namespace: 'list',\n cssProperties: value => [['disc', 'decimal', 'none'].includes(value) ? 'list-style-type' : 'list-style-position'],\n accepts: oneOf(['disc', 'decimal', 'none', 'inside', 'outside']),\n },\n {\n namespace: 'object',\n cssProperties: value => [\n ['contain', 'cover', 'fill', 'none', 'scale-down'].includes(value) ? 'object-fit' : 'object-position',\n ],\n accepts: oneOf([\n 'contain',\n 'cover',\n 'fill',\n 'none',\n 'scale-down',\n 'bottom',\n 'center',\n 'left',\n 'left-bottom',\n 'left-top',\n 'right',\n 'right-bottom',\n 'right-top',\n 'top',\n ]),\n },\n {\n namespace: 'cursor',\n cssProperties: ['cursor'],\n accepts: oneOf([\n 'auto',\n 'default',\n 'pointer',\n 'wait',\n 'text',\n 'move',\n 'help',\n 'not-allowed',\n 'none',\n 'context-menu',\n 'progress',\n 'cell',\n 'crosshair',\n 'vertical-text',\n 'alias',\n 'copy',\n 'no-drop',\n 'grab',\n 'grabbing',\n 'all-scroll',\n 'col-resize',\n 'row-resize',\n 'n-resize',\n 'e-resize',\n 's-resize',\n 'w-resize',\n 'ne-resize',\n 'nw-resize',\n 'se-resize',\n 'sw-resize',\n 'ew-resize',\n 'ns-resize',\n 'nesw-resize',\n 'nwse-resize',\n 'zoom-in',\n 'zoom-out',\n ]),\n },\n { namespace: 'pointer-events', cssProperties: ['pointer-events'], accepts: oneOf(['auto', 'none']) },\n]);\n\nconst exactVariantRegistry = Object.freeze([\n 'hover',\n 'focus',\n 'focus-within',\n 'focus-visible',\n 'active',\n 'visited',\n 'target',\n 'first',\n 'last',\n 'only',\n 'odd',\n 'even',\n 'disabled',\n 'enabled',\n 'checked',\n 'indeterminate',\n 'required',\n 'valid',\n 'invalid',\n 'dark',\n 'motion-safe',\n 'motion-reduce',\n 'contrast-more',\n 'contrast-less',\n 'portrait',\n 'landscape',\n 'print',\n 'sm',\n 'md',\n 'lg',\n 'xl',\n '2xl',\n] as const);\n\nfunction variantIsVerified(variant: string): boolean {\n return exactVariantRegistry.includes(variant as (typeof exactVariantRegistry)[number]);\n}\n\nfunction parseArbitraryProperty(utility: string): string | undefined {\n if (!hasValidArbitrarySyntax(utility)) return undefined;\n const inner = utility.slice(1, -1);\n const separator = inner.indexOf(':');\n if (separator <= 0) return undefined;\n\n const property = inner.slice(0, separator);\n const value = inner.slice(separator + 1);\n if (!/^(?:--[A-Za-z_][A-Za-z0-9_-]*|[A-Za-z][A-Za-z0-9-]*)$/u.test(property)) return undefined;\n if (value.trim().length === 0) return undefined;\n return property;\n}\n\nfunction registryCssProperties(utility: string): readonly string[] | undefined {\n const exact = exactTokenRegistry.find(([token]) => token === utility);\n if (exact !== undefined) return exact[1];\n\n const negative = utility.startsWith('-');\n const value = negative ? utility.slice(1) : utility;\n for (const rule of namespaceRegistry) {\n const separator = `${rule.namespace}-`;\n if (!value.startsWith(separator)) continue;\n const suffix = value.slice(separator.length);\n if (suffix.length === 0) continue;\n if (negative) {\n if (rule.negative !== true || !(rule.acceptsNegative ?? rule.accepts)(suffix)) continue;\n } else if (!rule.accepts(suffix)) continue;\n return typeof rule.cssProperties === 'function' ? rule.cssProperties(suffix) : rule.cssProperties;\n }\n\n return undefined;\n}\n\nexport class TailwindCandidateClassifier {\n classify(token: string): TailwindCandidateClassification {\n if (!isByteExactHtmlClassToken(token)) {\n return {\n status: 'unverified',\n reason: 'The decoded candidate cannot be emitted as the same raw HTML source token.',\n };\n }\n\n if (token.includes('\\\\')) {\n return { status: 'unverified', reason: 'Source escapes make the Tailwind candidate ambiguous.' };\n }\n\n const descriptor = describeTailwindUtility(token);\n if (descriptor === undefined) {\n return { status: 'unverified', reason: 'The Tailwind candidate has malformed variant or bracket structure.' };\n }\n if (descriptor.hasGeneratedMediaVariant) {\n return {\n status: 'unverified',\n reason: 'Generated exact-media variants cannot be supplied as source candidates.',\n };\n }\n if (!descriptor.variants.every(variantIsVerified)) {\n return {\n status: 'unverified',\n reason: 'The Tailwind candidate contains an unverified or target-changing variant.',\n };\n }\n\n const arbitraryProperty = parseArbitraryProperty(descriptor.utility);\n const cssProperties =\n arbitraryProperty === undefined ? registryCssProperties(descriptor.utility) : [arbitraryProperty];\n if (cssProperties === undefined || cssProperties.length === 0) {\n return { status: 'unverified', reason: 'The utility is not in the compiler-proven built-in registry.' };\n }\n\n return { status: 'verified', descriptor: { ...descriptor, cssProperties } };\n }\n}\n","import type { LocatedFlexLayoutInput } from '../../../analyzer/flex-layout-attribute.analyzer';\nimport { BreakpointCatalog, mediaRangesIntersect, type MediaRange } from '../../../breakpoint/breakpoint-catalog';\nimport type { PlannedConversion } from '../../conversion-adapter';\nimport {\n describeTailwindDisplay,\n describeTailwindUtility,\n type TailwindActivation,\n type TailwindDisplayUtility,\n type TailwindUtilityDescriptor,\n} from '../tailwind-class-conflict';\nimport { parseLiteralStyleDeclarations } from '../visibility/literal-style-display';\nimport type { VisibilityState } from '../visibility/visibility.model';\nimport type { VisibilityFamilyPlan } from '../visibility/visibility-state.planner';\nimport type { VisibleDisplayResolution } from '../visibility/visible-display.resolver';\nimport { TailwindCandidateClassifier } from './tailwind-candidate-classifier';\nimport { cssPropertiesOverlap } from './css-property-ownership';\n\nconst extendedClassDirectives = new Set<LocatedFlexLayoutInput['directive']>(['class', 'ngClass']);\nconst extendedStyleDirectives = new Set<LocatedFlexLayoutInput['directive']>(['style', 'ngStyle']);\nconst extendedDirectives = new Set<LocatedFlexLayoutInput['directive']>([\n ...extendedClassDirectives,\n ...extendedStyleDirectives,\n]);\nconst visibleDisplayUtilities = new Set([\n 'inline',\n 'block',\n 'inline-block',\n 'flow-root',\n 'flex',\n 'inline-flex',\n 'grid',\n 'inline-grid',\n 'contents',\n 'table',\n 'inline-table',\n 'table-caption',\n 'table-cell',\n 'table-column',\n 'table-column-group',\n 'table-footer-group',\n 'table-header-group',\n 'table-row-group',\n 'table-row',\n 'list-item',\n]);\n\ninterface NumericRange {\n readonly min: number;\n readonly max: number;\n}\n\nexport interface ExtendedDisplayComposition {\n readonly strategyPlans: readonly PlannedConversion[];\n readonly visibilityPlan: VisibilityFamilyPlan;\n}\n\nfunction activationRange(activation: TailwindActivation): MediaRange {\n return activation.kind === 'base' ? {} : activation.range;\n}\n\nfunction stateRange(state: VisibilityState): MediaRange {\n return state.activation.kind === 'base' ? {} : state.activation.definition.range;\n}\n\nfunction shownVisibilityRanges(states: readonly VisibilityState[]): readonly MediaRange[] {\n const ranges = states.filter(state => state.intent === 'shown').map(stateRange);\n return states.some(state => state.activation.kind === 'base') ? ranges : [{}, ...ranges];\n}\n\nfunction numericRange(range: MediaRange): NumericRange {\n return {\n min: range.min ?? Number.NEGATIVE_INFINITY,\n max: range.max ?? Number.POSITIVE_INFINITY,\n };\n}\n\nfunction rangesCover(target: MediaRange, ranges: readonly MediaRange[]): boolean {\n const numericTarget = numericRange(target);\n const clipped = ranges\n .filter(range => mediaRangesIntersect(target, range))\n .map(range => {\n const numeric = numericRange(range);\n return {\n min: Math.max(numericTarget.min, numeric.min),\n max: Math.min(numericTarget.max, numeric.max),\n };\n })\n .sort((left, right) => left.min - right.min);\n const first = clipped[0];\n if (!first || first.min !== numericTarget.min) return false;\n\n let coveredUntil = first.max;\n for (const range of clipped.slice(1)) {\n if (range.min > coveredUntil) return false;\n coveredUntil = Math.max(coveredUntil, range.max);\n }\n return coveredUntil >= numericTarget.max;\n}\n\nfunction displayIntent(descriptor: TailwindDisplayUtility): 'hidden' | 'shown' | 'unverified' {\n if (descriptor.utility === 'hidden') return 'hidden';\n if (visibleDisplayUtilities.has(descriptor.utility)) return 'shown';\n\n const arbitraryValue = descriptor.utility.match(/^\\[display:([^\\]]+)\\]$/u)?.[1];\n if (arbitraryValue === 'none') return 'hidden';\n return arbitraryValue !== undefined && visibleDisplayUtilities.has(arbitraryValue) ? 'shown' : 'unverified';\n}\n\nfunction describeDisplayOwnership(token: string): TailwindUtilityDescriptor | undefined {\n const descriptor = describeTailwindUtility(token);\n return descriptor?.cssProperties.some(property => cssPropertiesOverlap(property, 'display')) ? descriptor : undefined;\n}\n\nfunction ownsOnlyDisplay(descriptor: TailwindUtilityDescriptor): boolean {\n return descriptor.cssProperties.length === 1 && descriptor.cssProperties[0]?.toLowerCase() === 'display';\n}\n\nfunction contextUnverified(input: LocatedFlexLayoutInput, reason: string): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'context-unverified',\n reason,\n suggestion: 'Migrate the coupled responsive families together manually.',\n };\n}\n\nexport class ExtendedDisplayCompositionPlanner {\n constructor(\n private readonly breakpointCatalog = new BreakpointCatalog(),\n private readonly classifier = new TailwindCandidateClassifier(),\n ) {}\n\n composeWithLayout(plans: readonly PlannedConversion[]): readonly PlannedConversion[] {\n const extendedComposed = this.composeExtendedFamilies(plans);\n const layoutPlans = extendedComposed.filter(plan => plan.input.directive === 'fxLayout');\n const layoutRanges = layoutPlans\n .filter(\n (plan): plan is Extract<PlannedConversion, { readonly status: 'converted' }> => plan.status === 'converted',\n )\n .flatMap(plan =>\n plan.classNames.flatMap(className => {\n const descriptor = describeTailwindDisplay(className);\n return descriptor !== undefined &&\n !descriptor.important &&\n (descriptor.utility === 'flex' || descriptor.utility === 'inline-flex')\n ? [activationRange(descriptor.activation)]\n : [];\n }),\n );\n const unresolvedLayout = layoutPlans.some(plan => plan.status !== 'converted');\n const unresolvedExtendedDisplay = extendedComposed.some(\n plan =>\n extendedDirectives.has(plan.input.directive) &&\n plan.status !== 'converted' &&\n this.inputMayControlDisplay(plan.input),\n );\n\n const affectedFamilies = new Set<'extended-class' | 'extended-style'>();\n let layoutOverlapIsUnsafe = false;\n const composed = extendedComposed.map(plan => {\n if (plan.status !== 'converted' || !extendedDirectives.has(plan.input.directive)) return plan;\n\n const displayDescriptors = plan.classNames\n .map(describeDisplayOwnership)\n .filter(descriptor => descriptor !== undefined);\n if (displayDescriptors.length === 0) return plan;\n\n const family = extendedClassDirectives.has(plan.input.directive) ? 'extended-class' : 'extended-style';\n if (unresolvedLayout) affectedFamilies.add(family);\n for (const descriptor of displayDescriptors) {\n const target = activationRange(descriptor.activation);\n if (!ownsOnlyDisplay(descriptor) && layoutRanges.some(range => mediaRangesIntersect(target, range))) {\n layoutOverlapIsUnsafe = true;\n affectedFamilies.add(family);\n continue;\n }\n if (family === 'extended-style' && layoutRanges.some(range => mediaRangesIntersect(target, range))) {\n layoutOverlapIsUnsafe = true;\n affectedFamilies.add(family);\n continue;\n }\n if (descriptor.important && layoutRanges.some(range => mediaRangesIntersect(target, range))) {\n layoutOverlapIsUnsafe = true;\n affectedFamilies.add(family);\n continue;\n }\n if (rangesCover(target, layoutRanges)) continue;\n if (layoutRanges.some(range => mediaRangesIntersect(target, range))) {\n layoutOverlapIsUnsafe = true;\n affectedFamilies.add(family);\n }\n }\n if (affectedFamilies.has(family)) return plan;\n\n return {\n ...plan,\n classNames: plan.classNames.filter(className => {\n const descriptor = describeTailwindDisplay(className);\n return (\n descriptor === undefined ||\n descriptor.important ||\n !rangesCover(activationRange(descriptor.activation), layoutRanges)\n );\n }),\n };\n });\n\n if (!affectedFamilies.size && !unresolvedExtendedDisplay && !layoutOverlapIsUnsafe) return composed;\n\n return composed.map(plan => {\n const family = this.extendedFamily(plan.input.directive);\n if (plan.status === 'converted' && family !== undefined && affectedFamilies.has(family)) {\n return contextUnverified(\n plan.input,\n 'The responsive layout and extended display ranges do not have one provable ownership order.',\n );\n }\n if (\n plan.status === 'converted' &&\n plan.input.directive === 'fxLayout' &&\n (unresolvedExtendedDisplay || layoutOverlapIsUnsafe)\n ) {\n return contextUnverified(\n plan.input,\n 'An unresolved or partially overlapping responsive class/style family may control display.',\n );\n }\n return plan;\n });\n }\n\n compose(plans: readonly PlannedConversion[], visibilityPlan: VisibilityFamilyPlan): ExtendedDisplayComposition {\n const layoutComposed = this.composeWithLayout(plans);\n const extendedDisplayFamilies = new Set<'extended-class' | 'extended-style'>();\n for (const plan of layoutComposed) {\n if (plan.status !== 'converted') continue;\n if (plan.classNames.some(className => describeDisplayOwnership(className) !== undefined)) {\n const family = this.extendedFamily(plan.input.directive);\n if (family !== undefined) extendedDisplayFamilies.add(family);\n }\n }\n\n if (visibilityPlan.status === 'unresolved') {\n if (!extendedDisplayFamilies.size) return { strategyPlans: layoutComposed, visibilityPlan };\n return {\n strategyPlans: layoutComposed.map(plan => {\n const family = this.extendedFamily(plan.input.directive);\n return plan.status === 'converted' && family !== undefined && extendedDisplayFamilies.has(family)\n ? contextUnverified(plan.input, 'The visibility family is unresolved and may override display.')\n : plan;\n }),\n visibilityPlan,\n };\n }\n\n const states = visibilityPlan.states;\n const baseIsHidden = states.some(state => state.activation.kind === 'base' && state.intent === 'hidden');\n const responsiveHiddenRanges = states.flatMap(state =>\n state.intent === 'hidden' && state.activation.kind === 'media' ? [state.activation.definition.range] : [],\n );\n const shownRanges = states.filter(state => state.intent === 'shown').map(stateRange);\n const visibilityRanges = states.map(stateRange);\n const unsafeFamilies = new Set<'extended-class' | 'extended-style'>();\n\n const strategyPlans = layoutComposed.map(plan => {\n if (plan.status !== 'converted') return plan;\n const family = this.extendedFamily(plan.input.directive);\n if (family === undefined) return plan;\n\n const retainedDisplayOwners = (plan.retainedClassNames ?? [])\n .map(describeDisplayOwnership)\n .filter(owner => owner !== undefined);\n if (\n retainedDisplayOwners.some(owner =>\n visibilityRanges.some(range => mediaRangesIntersect(activationRange(owner.activation), range)),\n )\n ) {\n unsafeFamilies.add(family);\n }\n\n const classNames = plan.classNames.filter(className => {\n const owner = describeDisplayOwnership(className);\n if (owner === undefined) return true;\n const target = activationRange(owner.activation);\n if (family === 'extended-style' && visibilityRanges.some(range => mediaRangesIntersect(target, range))) {\n unsafeFamilies.add(family);\n return true;\n }\n if (!ownsOnlyDisplay(owner)) {\n if (visibilityRanges.some(range => mediaRangesIntersect(target, range))) unsafeFamilies.add(family);\n return true;\n }\n const descriptor = describeTailwindDisplay(className);\n if (descriptor === undefined) return true;\n if (descriptor.important && visibilityRanges.some(range => mediaRangesIntersect(target, range))) {\n unsafeFamilies.add(family);\n return true;\n }\n if (this.visibilityOwnsHiddenRange(target, states)) return false;\n\n const partiallyHidden =\n !baseIsHidden &&\n responsiveHiddenRanges.some(range => mediaRangesIntersect(target, range)) &&\n !rangesCover(target, responsiveHiddenRanges);\n const shownOverridesHiddenCandidate =\n displayIntent(descriptor) !== 'shown' && shownRanges.some(range => mediaRangesIntersect(target, range));\n if (partiallyHidden || shownOverridesHiddenCandidate) unsafeFamilies.add(family);\n return true;\n });\n return classNames.length === plan.classNames.length ? plan : { ...plan, classNames };\n });\n\n if (!unsafeFamilies.size) return { strategyPlans, visibilityPlan };\n\n return {\n strategyPlans: strategyPlans.map(plan => {\n const family = this.extendedFamily(plan.input.directive);\n return plan.status === 'converted' && family !== undefined && unsafeFamilies.has(family)\n ? contextUnverified(\n plan.input,\n 'The responsive class/style display range and visibility range only partially agree on ownership.',\n )\n : plan;\n }),\n visibilityPlan: {\n status: 'unresolved',\n plans: states.map(state =>\n contextUnverified(\n state.input,\n 'The responsive class/style display range and visibility range only partially agree on ownership.',\n ),\n ),\n },\n };\n }\n\n resolveVisibleDisplay(\n current: VisibleDisplayResolution,\n plans: readonly PlannedConversion[],\n visibilityPlan: VisibilityFamilyPlan,\n ): VisibleDisplayResolution {\n if (visibilityPlan.status === 'unresolved') return current;\n\n const descriptors = plans\n .filter(\n (plan): plan is Extract<PlannedConversion, { readonly status: 'converted' }> =>\n plan.status === 'converted' && extendedDirectives.has(plan.input.directive),\n )\n .flatMap(plan => {\n const family = this.extendedFamily(plan.input.directive);\n if (family === undefined) return [];\n return plan.classNames\n .map(describeTailwindDisplay)\n .filter(descriptor => descriptor !== undefined)\n .map(descriptor => ({ descriptor, family }));\n })\n .filter(\n ({ descriptor, family }) =>\n family === 'extended-style' ||\n descriptor.important ||\n !this.visibilityOwnsHiddenRange(activationRange(descriptor.activation), visibilityPlan.states),\n );\n if (!descriptors.length) return current;\n\n const shownRanges = shownVisibilityRanges(visibilityPlan.states);\n if (\n descriptors.some(\n ({ descriptor }) =>\n displayIntent(descriptor) !== 'shown' &&\n shownRanges.some(range => mediaRangesIntersect(activationRange(descriptor.activation), range)),\n )\n ) {\n return {\n status: 'unverified',\n reason: 'A responsive class/style hidden utility overlaps a visibility state that must be shown.',\n };\n }\n\n if (\n descriptors.some(({ descriptor }) =>\n shownRanges.some(range => mediaRangesIntersect(activationRange(descriptor.activation), range)),\n )\n ) {\n return {\n status: 'unverified',\n reason:\n 'Flex-Layout captures the original display during initialization, before responsive ownership is stable.',\n };\n }\n return current;\n }\n\n inputMayControlDisplay(input: LocatedFlexLayoutInput): boolean {\n if (extendedClassDirectives.has(input.directive)) {\n if (input.binding !== 'literal') return true;\n const tokens = input.value.split(/[\\t\\n\\f\\r ]+/u).filter(Boolean);\n return tokens.some(token => {\n const classification = this.classifier.classify(token);\n return (\n classification.status === 'unverified' ||\n classification.descriptor.cssProperties.some(property => cssPropertiesOverlap(property, 'display'))\n );\n });\n }\n\n if (!extendedStyleDirectives.has(input.directive)) return false;\n if (input.binding !== 'literal') return true;\n const parsed = parseLiteralStyleDeclarations(input.value);\n return (\n parsed.status === 'unverified' ||\n parsed.declarations.some(declaration => cssPropertiesOverlap(declaration.property, 'display'))\n );\n }\n\n private composeExtendedFamilies(plans: readonly PlannedConversion[]): readonly PlannedConversion[] {\n const convertedDisplayRanges = (\n directives: ReadonlySet<LocatedFlexLayoutInput['directive']>,\n ): readonly MediaRange[] =>\n plans\n .filter(\n (plan): plan is Extract<PlannedConversion, { readonly status: 'converted' }> =>\n plan.status === 'converted' && directives.has(plan.input.directive),\n )\n .flatMap(plan =>\n plan.classNames.flatMap(className => {\n const descriptor = describeTailwindDisplay(className);\n return descriptor === undefined ? [] : [activationRange(descriptor.activation)];\n }),\n );\n const classRanges = convertedDisplayRanges(extendedClassDirectives);\n const styleRanges = convertedDisplayRanges(extendedStyleDirectives);\n const importantClassRanges = plans\n .filter(\n (plan): plan is Extract<PlannedConversion, { readonly status: 'converted' }> =>\n plan.status === 'converted' && extendedClassDirectives.has(plan.input.directive),\n )\n .flatMap(plan =>\n plan.classNames.flatMap(className => {\n const descriptor = describeTailwindDisplay(className);\n return descriptor?.important ? [activationRange(descriptor.activation)] : [];\n }),\n );\n const unresolvedRanges = (directives: ReadonlySet<LocatedFlexLayoutInput['directive']>): readonly MediaRange[] =>\n plans.flatMap(plan => {\n if (\n plan.status === 'converted' ||\n !directives.has(plan.input.directive) ||\n !this.inputMayControlDisplay(plan.input)\n ) {\n return [];\n }\n if (plan.input.breakpoint === undefined) return [{}];\n const classification = this.breakpointCatalog.classify(plan.input.breakpoint);\n return classification.kind === 'verified' ? [classification.definition.range] : [{}];\n });\n const unresolvedClassRanges = unresolvedRanges(extendedClassDirectives);\n const unresolvedStyleRanges = unresolvedRanges(extendedStyleDirectives);\n const classPartiallyOverlapsStyle = classRanges.some(\n target => styleRanges.some(range => mediaRangesIntersect(target, range)) && !rangesCover(target, styleRanges),\n );\n const affectedFamilies = new Set<'extended-class' | 'extended-style'>();\n const importantClassOverlapsStyle = importantClassRanges.some(target =>\n styleRanges.some(range => mediaRangesIntersect(target, range)),\n );\n if (classPartiallyOverlapsStyle || importantClassOverlapsStyle) {\n affectedFamilies.add('extended-class');\n affectedFamilies.add('extended-style');\n }\n if (styleRanges.some(target => unresolvedClassRanges.some(range => mediaRangesIntersect(target, range)))) {\n affectedFamilies.add('extended-style');\n }\n if (classRanges.some(target => unresolvedStyleRanges.some(range => mediaRangesIntersect(target, range)))) {\n affectedFamilies.add('extended-class');\n }\n\n return plans.map(plan => {\n const family = this.extendedFamily(plan.input.directive);\n if (plan.status !== 'converted' || family === undefined) return plan;\n if (affectedFamilies.has(family)) {\n return contextUnverified(\n plan.input,\n 'Responsive class and style display ownership cannot be proven for every overlapping activation range.',\n );\n }\n if (family === 'extended-style') return plan;\n return {\n ...plan,\n classNames: plan.classNames.filter(className => {\n const descriptor = describeTailwindDisplay(className);\n return (\n descriptor === undefined ||\n descriptor.important ||\n !rangesCover(activationRange(descriptor.activation), styleRanges)\n );\n }),\n };\n });\n }\n\n private visibilityOwnsHiddenRange(target: MediaRange, states: readonly VisibilityState[]): boolean {\n const baseStates = states.filter(state => state.activation.kind === 'base');\n const responsiveStates = states.filter(\n (state): state is VisibilityState & { readonly activation: { readonly kind: 'media' } } =>\n state.activation.kind === 'media',\n );\n const baseIsHidden = baseStates.length > 0 && baseStates.every(state => state.intent === 'hidden');\n if (baseIsHidden) {\n return !responsiveStates.some(\n state => state.intent === 'shown' && mediaRangesIntersect(target, state.activation.definition.range),\n );\n }\n return rangesCover(\n target,\n responsiveStates.filter(state => state.intent === 'hidden').map(state => state.activation.definition.range),\n );\n }\n\n private extendedFamily(\n directive: LocatedFlexLayoutInput['directive'],\n ): 'extended-class' | 'extended-style' | undefined {\n if (extendedClassDirectives.has(directive)) return 'extended-class';\n if (extendedStyleDirectives.has(directive)) return 'extended-style';\n return undefined;\n }\n}\n","import { ResponsiveVariantEmitter } from '../responsive-variant.emitter';\nimport { describeTailwindUtility } from '../tailwind-class-conflict';\nimport type { ExtendedResponsiveState, ResponsiveClassValue } from './responsive-class.model';\nimport type { ResponsiveStyleValue } from './responsive-style.model';\nimport { TailwindArbitraryPropertyEncoder } from './tailwind-arbitrary-property.encoder';\nimport { TailwindCandidateClassifier } from './tailwind-candidate-classifier';\n\nexport class ExtendedResponsiveEmitter {\n constructor(\n private readonly responsiveEmitter = new ResponsiveVariantEmitter(),\n private readonly styleEncoder = new TailwindArbitraryPropertyEncoder(),\n private readonly classifier = new TailwindCandidateClassifier(),\n ) {}\n\n emitClass(state: ExtendedResponsiveState<ResponsiveClassValue>): readonly string[] {\n const emitted: string[] = [];\n const seen = new Set<string>();\n\n for (const token of state.value.tokens) {\n if (seen.has(token)) continue;\n seen.add(token);\n\n const classification = this.classifier.classify(token);\n if (classification.status !== 'verified' || classification.descriptor.cssProperties.length === 0) {\n throw new Error('Cannot emit an unverified or ungrouped Tailwind class candidate.');\n }\n emitted.push(this.responsiveEmitter.emitCandidate(state.activation.definition, token));\n }\n\n return emitted;\n }\n\n emitStyle(state: ExtendedResponsiveState<ResponsiveStyleValue>): readonly string[] {\n const emitted: string[] = [];\n const seen = new Set<string>();\n\n for (const declaration of state.value.declarations) {\n const candidate = this.styleEncoder.encode(declaration);\n if (seen.has(candidate)) continue;\n seen.add(candidate);\n\n const descriptor = describeTailwindUtility(candidate);\n if (descriptor === undefined || descriptor.cssProperties.length === 0) {\n throw new Error('Cannot emit an ungrouped Tailwind arbitrary-property candidate.');\n }\n emitted.push(this.responsiveEmitter.emitCandidate(state.activation.definition, candidate));\n }\n\n return emitted;\n }\n}\n","import type { LocatedFlexLayoutInput } from '../../../analyzer/flex-layout-attribute.analyzer';\nimport { BreakpointCatalog } from '../../../breakpoint/breakpoint-catalog';\nimport type { ResponsiveClassValueResult } from './responsive-class.model';\nimport type { TailwindCandidateClassifier } from './tailwind-candidate-classifier';\n\nconst angularNgClassWhitespace = /\\s+/u;\nconst interpolation = /\\{\\{[\\s\\S]*\\}\\}/u;\n\nexport function parseLiteralResponsiveClassValue(\n value: string,\n classifier: TailwindCandidateClassifier,\n): ResponsiveClassValueResult {\n if (interpolation.test(value)) {\n return { status: 'unverified', reason: 'Responsive class interpolation may depend on runtime state.' };\n }\n\n const tokens = [...new Set(value.split(angularNgClassWhitespace).filter(token => token.length > 0))];\n for (const token of tokens) {\n const classification = classifier.classify(token);\n if (classification.status === 'unverified') {\n return {\n status: 'unverified',\n token,\n reason: `The class token ${JSON.stringify(token)} is not a compiler-proven built-in Tailwind utility and may be an application or plugin class. ${classification.reason}`,\n };\n }\n }\n\n return { status: 'parsed', value: { tokens } };\n}\n\nexport function parseResponsiveClassValue(\n input: LocatedFlexLayoutInput,\n classifier: TailwindCandidateClassifier,\n): ResponsiveClassValueResult {\n if (input.binding !== 'literal') {\n return { status: 'unverified', reason: 'Responsive class property bindings may depend on runtime state.' };\n }\n if (input.directive !== 'ngClass') {\n return { status: 'unverified', reason: 'Deprecated responsive class aliases are not converted.' };\n }\n if (input.breakpoint === undefined || new BreakpointCatalog().classify(input.breakpoint).kind !== 'verified') {\n return { status: 'unverified', reason: 'The responsive class breakpoint is not a verified viewport alias.' };\n }\n return parseLiteralResponsiveClassValue(input.value, classifier);\n}\n","import type { LocatedFlexLayoutInput } from '../../../analyzer/flex-layout-attribute.analyzer';\nimport type { TemplateAttribute } from '../../../template/template.model';\nimport { templateAttributeKeys } from '../../../template/template-attribute';\nimport type { PlannedConversion } from '../../conversion-adapter';\nimport {\n describeTailwindUtility,\n findTailwindClassConflicts,\n type TailwindUtilityDescriptor,\n} from '../tailwind-class-conflict';\nimport { parseLiteralStyleDeclarations } from '../visibility/literal-style-display';\nimport { ExtendedResponsiveEmitter } from './extended-responsive.emitter';\nimport type { ExtendedFamilyPlan, ExtendedResponsiveState, ResponsiveClassValue } from './responsive-class.model';\nimport type { ResponsiveStyleValue } from './responsive-style.model';\nimport { TailwindCandidateClassifier } from './tailwind-candidate-classifier';\nimport { cssPropertiesOverlap } from './css-property-ownership';\nimport { parseLiteralResponsiveClassValue } from './responsive-class-value.parser';\nimport {\n parseLiteralResponsiveStyleValue,\n responsiveStyleExactKeyAliasReason,\n responsiveStyleValuesHaveExactKeyAliases,\n} from './responsive-style-value.parser';\n\ninterface ExtendedResponsiveRequestBase {\n readonly existingClassNames: readonly string[];\n readonly attributes: readonly TemplateAttribute[];\n}\n\nexport type ExtendedResponsivePlanRequest =\n | (ExtendedResponsiveRequestBase & {\n readonly kind: 'class';\n readonly familyPlan: ExtendedFamilyPlan<ResponsiveClassValue>;\n })\n | (ExtendedResponsiveRequestBase & {\n readonly kind: 'style';\n readonly familyPlan: ExtendedFamilyPlan<ResponsiveStyleValue>;\n });\n\nexport type ExtendedResponsivePlan =\n | { readonly status: 'converted'; readonly plans: readonly PlannedConversion[] }\n | { readonly status: 'unresolved'; readonly plans: readonly PlannedConversion[] };\n\ntype OwnedTailwindUtilityDescriptor = TailwindUtilityDescriptor;\n\ninterface EmittedCandidate {\n readonly token: string;\n readonly descriptor: OwnedTailwindUtilityDescriptor;\n readonly input: LocatedFlexLayoutInput;\n}\n\ntype AnyExtendedState = ExtendedResponsiveState<ResponsiveClassValue> | ExtendedResponsiveState<ResponsiveStyleValue>;\n\ntype EmissionResult =\n | { readonly status: 'emitted'; readonly candidates: readonly EmittedCandidate[] }\n | {\n readonly status: 'unverified';\n readonly input: LocatedFlexLayoutInput;\n readonly code: 'tailwind-candidate-unverified' | 'style-value-unverified';\n readonly reason: string;\n };\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n\nfunction boundClassAuthority(attribute: TemplateAttribute): boolean {\n if (attribute.binding !== 'property') return false;\n if (attribute.bindingTarget === 'class') return true;\n\n return [...templateAttributeKeys(attribute)].some(\n key =>\n key === 'class' ||\n key === 'ngclass' ||\n key === 'attr.class' ||\n key.startsWith('class.') ||\n key.startsWith('ngclass.') ||\n key.startsWith('attr.class.'),\n );\n}\n\nfunction boundStyleAuthority(attribute: TemplateAttribute): boolean {\n if (attribute.binding !== 'property') return false;\n if (attribute.bindingTarget === 'style') return true;\n\n return [...templateAttributeKeys(attribute)].some(\n key =>\n key === 'style' ||\n key === 'ngstyle' ||\n key === 'attr.style' ||\n key.startsWith('style.') ||\n key.startsWith('ngstyle.') ||\n key.startsWith('attr.style.'),\n );\n}\n\nfunction literalStyleAuthority(attribute: TemplateAttribute): boolean {\n return attribute.binding === 'literal' && templateAttributeKeys(attribute).has('style');\n}\n\nfunction unsuffixedAuthority(\n attributes: readonly TemplateAttribute[],\n key: 'ngclass' | 'ngstyle',\n): TemplateAttribute | undefined {\n return attributes.find(attribute => templateAttributeKeys(attribute).has(key));\n}\n\nfunction equalClassValues(left: ResponsiveClassValue, right: ResponsiveClassValue): boolean {\n return (\n left.tokens.length === right.tokens.length && left.tokens.every((token, index) => token === right.tokens[index])\n );\n}\n\nfunction hasPropertyOwnership(\n descriptor: TailwindUtilityDescriptor | undefined,\n): descriptor is OwnedTailwindUtilityDescriptor {\n return descriptor !== undefined && descriptor.cssProperties.length > 0;\n}\n\nfunction sameCssProperties(left: readonly string[], right: readonly string[]): boolean {\n return left.length === right.length && left.every((property, index) => property === right[index]);\n}\n\nfunction diagnostic(\n input: LocatedFlexLayoutInput,\n code: 'bound-class' | 'class-conflict' | 'tailwind-candidate-unverified' | 'style-value-unverified',\n reason: string,\n suggestion: string,\n): PlannedConversion {\n return { status: 'review', input, code, reason, suggestion };\n}\n\nexport class ExtendedResponsivePlanner {\n constructor(\n private readonly emitter = new ExtendedResponsiveEmitter(),\n private readonly classifier = new TailwindCandidateClassifier(),\n ) {}\n\n plan(request: ExtendedResponsivePlanRequest): ExtendedResponsivePlan {\n if (request.familyPlan.status === 'unresolved') {\n return { status: 'unresolved', plans: request.familyPlan.plans };\n }\n\n let states: readonly AnyExtendedState[];\n let emission: EmissionResult;\n if (request.kind === 'class') {\n const classStates = this.canonicalStates(request.familyPlan.states);\n states = classStates;\n const fallback = this.classFallback(classStates, request.attributes);\n if (fallback !== undefined) return fallback;\n emission = this.emitClass(classStates);\n } else {\n const styleStates = this.canonicalStates(request.familyPlan.states);\n states = styleStates;\n if (responsiveStyleValuesHaveExactKeyAliases(styleStates.map(state => state.input.value))) {\n return {\n status: 'unresolved',\n plans: styleStates.map(state =>\n diagnostic(\n state.input,\n 'style-value-unverified',\n responsiveStyleExactKeyAliasReason,\n 'Keep the complete responsive style family or normalize its exact property key before migration.',\n ),\n ),\n };\n }\n const fallback = this.styleFallback(styleStates, request.attributes);\n if (fallback !== undefined) return fallback;\n emission = this.emitStyle(styleStates);\n }\n if (emission.status === 'unverified') {\n return {\n status: 'unresolved',\n plans: states.map(state =>\n diagnostic(\n state.input,\n emission.code,\n emission.reason,\n 'Keep the complete responsive family or replace the unverified value before migration.',\n ),\n ),\n };\n }\n\n const candidates = emission.candidates;\n const generatedClassNames = [...new Set(candidates.map(candidate => candidate.token))];\n if (generatedClassNames.length > 0 && request.attributes.some(boundClassAuthority)) {\n return this.unresolved(\n states,\n 'bound-class',\n 'Generated responsive classes cannot be merged safely with a bound class value.',\n 'Merge the generated classes into the class binding manually.',\n );\n }\n\n if (request.kind === 'style' && generatedClassNames.length > 0) {\n if (request.attributes.some(boundStyleAuthority)) {\n return this.unresolved(\n states,\n 'class-conflict',\n 'A bound style authority may control a property generated by this responsive style family.',\n 'Remove or reconcile the bound style before migrating this family.',\n );\n }\n\n const generatedProperties = new Set(\n request.familyPlan.states.flatMap(state => state.value.declarations.map(declaration => declaration.property)),\n );\n if (this.literalStyleConflicts(request.attributes, generatedProperties)) {\n return this.unresolved(\n states,\n 'class-conflict',\n 'A literal fallback style may control a property generated by this responsive style family.',\n 'Remove or reconcile the overlapping fallback declaration before migrating this family.',\n );\n }\n }\n\n if (findTailwindClassConflicts(request.existingClassNames, generatedClassNames).size > 0) {\n return this.unresolved(\n states,\n 'class-conflict',\n 'An existing Tailwind utility controls a CSS property generated by this responsive family.',\n 'Remove or reconcile the conflicting utility before migrating this family.',\n );\n }\n\n const existing = new Set(request.existingClassNames);\n const classNames = generatedClassNames.filter(className => !existing.has(className));\n const plans = states.map((state, index): PlannedConversion => ({\n status: 'converted',\n input: state.input,\n classNames: index === 0 ? classNames : [],\n }));\n return { status: 'converted', plans };\n }\n\n private canonicalStates<T>(states: readonly ExtendedResponsiveState<T>[]): readonly ExtendedResponsiveState<T>[] {\n return [...states].sort((left, right) => {\n const priority = right.activation.definition.priority - left.activation.definition.priority;\n if (priority) return priority;\n const alias = compareText(left.activation.definition.alias, right.activation.definition.alias);\n return alias || compareText(left.input.id, right.input.id);\n });\n }\n\n private emitClass(states: readonly ExtendedResponsiveState<ResponsiveClassValue>[]): EmissionResult {\n const candidates: EmittedCandidate[] = [];\n\n for (const state of states) {\n const uniqueTokens = [...new Set(state.value.tokens)];\n const descriptors: OwnedTailwindUtilityDescriptor[] = [];\n for (const token of uniqueTokens) {\n const classification = this.classifier.classify(token);\n if (classification.status !== 'verified' || !hasPropertyOwnership(classification.descriptor)) {\n return {\n status: 'unverified',\n input: state.input,\n code: 'tailwind-candidate-unverified',\n reason: `The class token ${JSON.stringify(token)} is not a verified Tailwind candidate with stable property ownership.`,\n };\n }\n descriptors.push(classification.descriptor);\n }\n\n const classNames = this.emitter.emitClass({ ...state, value: { tokens: uniqueTokens } });\n for (const [index, token] of classNames.entries()) {\n const sourceDescriptor = descriptors[index];\n const generatedDescriptor = describeTailwindUtility(token);\n if (\n sourceDescriptor === undefined ||\n !hasPropertyOwnership(generatedDescriptor) ||\n !sameCssProperties(generatedDescriptor.cssProperties, sourceDescriptor.cssProperties)\n ) {\n return {\n status: 'unverified',\n input: state.input,\n code: 'tailwind-candidate-unverified',\n reason: 'Responsive class emission lost its verified property descriptor.',\n };\n }\n candidates.push({ token, descriptor: generatedDescriptor, input: state.input });\n }\n }\n\n return { status: 'emitted', candidates };\n }\n\n private classFallback(\n states: readonly ExtendedResponsiveState<ResponsiveClassValue>[],\n attributes: readonly TemplateAttribute[],\n ): ExtendedResponsivePlan | undefined {\n const fallback = unsuffixedAuthority(attributes, 'ngclass');\n if (fallback === undefined) return undefined;\n if (fallback.binding !== 'literal') {\n return this.unresolved(\n states,\n 'bound-class',\n 'A bound unsuffixed ngClass value is the runtime fallback for this responsive family.',\n 'Make the complete ngClass family literal or migrate its replacement behavior manually.',\n );\n }\n\n const parsed = parseLiteralResponsiveClassValue(fallback.value, this.classifier);\n if (parsed.status === 'unverified') {\n return {\n status: 'unresolved',\n plans: states.map(state =>\n diagnostic(\n state.input,\n 'tailwind-candidate-unverified',\n `The unsuffixed ngClass fallback cannot be translated exactly. ${parsed.reason}`,\n 'Keep the complete ngClass family or replace the fallback with proven Tailwind candidates.',\n ),\n ),\n };\n }\n if (parsed.value.tokens.length === 0) return undefined;\n if (states.every(state => equalClassValues(state.value, parsed.value))) {\n return this.convertedWithoutOutput(states, parsed.value.tokens);\n }\n return this.unresolved(\n states,\n 'class-conflict',\n 'The literal unsuffixed ngClass fallback is replaced, not merged, when a responsive value activates.',\n 'Migrate the complete ngClass fallback and responsive replacement family manually.',\n );\n }\n\n private styleFallback(\n states: readonly ExtendedResponsiveState<ResponsiveStyleValue>[],\n attributes: readonly TemplateAttribute[],\n ): ExtendedResponsivePlan | undefined {\n const fallback = unsuffixedAuthority(attributes, 'ngstyle');\n if (fallback === undefined) return undefined;\n if (fallback.binding !== 'literal') {\n return this.unresolved(\n states,\n 'class-conflict',\n 'A bound unsuffixed ngStyle value is the runtime fallback for this responsive family.',\n 'Make the complete ngStyle family literal or migrate its replacement behavior manually.',\n );\n }\n\n const parsed = parseLiteralResponsiveStyleValue(fallback.value);\n if (parsed.status === 'unverified') {\n return {\n status: 'unresolved',\n plans: states.map(state =>\n diagnostic(\n state.input,\n 'style-value-unverified',\n `The unsuffixed ngStyle fallback cannot be translated exactly. ${parsed.reason}`,\n 'Keep the complete ngStyle family or replace the fallback with an exact literal style map.',\n ),\n ),\n };\n }\n if (parsed.value.declarations.length === 0 && fallback.value.length === 0) return undefined;\n return this.unresolved(\n states,\n 'class-conflict',\n 'The literal unsuffixed ngStyle raw-string fallback is replaced at runtime and cannot remain after Flex-Layout is removed.',\n 'Translate and remove the complete ngStyle fallback together with its responsive replacement family.',\n );\n }\n\n private convertedWithoutOutput(\n states: readonly AnyExtendedState[],\n retainedClassNames: readonly string[] = [],\n ): ExtendedResponsivePlan {\n return {\n status: 'converted',\n plans: states.map((state, index) => ({\n status: 'converted',\n input: state.input,\n classNames: [],\n ...(index === 0 && retainedClassNames.length > 0 ? { retainedClassNames } : {}),\n })),\n };\n }\n\n private emitStyle(states: readonly ExtendedResponsiveState<ResponsiveStyleValue>[]): EmissionResult {\n const candidates: EmittedCandidate[] = [];\n\n for (const state of states) {\n for (const token of this.emitter.emitStyle(state)) {\n const descriptor = describeTailwindUtility(token);\n if (!hasPropertyOwnership(descriptor)) {\n return {\n status: 'unverified',\n input: state.input,\n code: 'style-value-unverified',\n reason: 'Responsive style emission lost its verified property descriptor.',\n };\n }\n candidates.push({ token, descriptor, input: state.input });\n }\n }\n\n return { status: 'emitted', candidates };\n }\n\n private literalStyleConflicts(\n attributes: readonly TemplateAttribute[],\n generatedProperties: ReadonlySet<string>,\n ): boolean {\n return attributes.filter(literalStyleAuthority).some(attribute => {\n const parsed = parseLiteralStyleDeclarations(attribute.value);\n if (parsed.status === 'unverified') return true;\n\n return parsed.declarations.some(declaration =>\n [...generatedProperties].some(property => cssPropertiesOverlap(declaration.property, property)),\n );\n });\n }\n\n private unresolved(\n states: readonly AnyExtendedState[],\n code: 'bound-class' | 'class-conflict',\n reason: string,\n suggestion: string,\n ): ExtendedResponsivePlan {\n return {\n status: 'unresolved',\n plans: states.map(state => diagnostic(state.input, code, reason, suggestion)),\n };\n }\n}\n","import type { LocatedFlexLayoutInput } from '../../../analyzer/flex-layout-attribute.analyzer';\nimport { BreakpointCatalog, mediaRangesIntersect, type MediaRange } from '../../../breakpoint/breakpoint-catalog';\nimport type { PlannedConversion } from '../../conversion-adapter';\nimport { describeTailwindUtility, type TailwindActivation } from '../tailwind-class-conflict';\nimport { parseLiteralStyleDeclarations } from '../visibility/literal-style-display';\nimport { cssPropertiesOverlap, cssPropertyOwnershipCovers } from './css-property-ownership';\nimport { TailwindCandidateClassifier } from './tailwind-candidate-classifier';\n\nconst extendedClassDirectives = new Set<LocatedFlexLayoutInput['directive']>(['class', 'ngClass']);\nconst extendedStyleDirectives = new Set<LocatedFlexLayoutInput['directive']>(['style', 'ngStyle']);\nconst extendedDirectives = new Set<LocatedFlexLayoutInput['directive']>([\n ...extendedClassDirectives,\n ...extendedStyleDirectives,\n]);\nconst inlineWriterDirectives = new Set<LocatedFlexLayoutInput['directive']>([\n 'style',\n 'ngStyle',\n 'fxLayout',\n 'fxLayoutAlign',\n 'fxFlex',\n 'fxGrow',\n 'fxShrink',\n 'fxFlexAlign',\n 'fxFlexFill',\n 'fxFill',\n 'fxFlexOffset',\n 'fxFlexOrder',\n 'fxShow',\n 'fxHide',\n]);\n\nexport type GeneratedPropertyAuthority = 'source-class' | 'source-inline' | 'semantic-replacement';\n\nexport function generatedPropertyAuthority(directive: LocatedFlexLayoutInput['directive']): GeneratedPropertyAuthority {\n if (extendedClassDirectives.has(directive)) return 'source-class';\n return inlineWriterDirectives.has(directive) ? 'source-inline' : 'semantic-replacement';\n}\n\ninterface NumericRange {\n readonly min: number;\n readonly max: number;\n}\n\ninterface GeneratedCandidate {\n readonly plan: Extract<PlannedConversion, { readonly status: 'converted' }>;\n readonly token: string;\n readonly properties: readonly string[];\n readonly range: MediaRange;\n readonly important: boolean;\n readonly family: string;\n readonly authority: GeneratedPropertyAuthority;\n readonly suppressible: boolean;\n}\n\nfunction activationRange(activation: TailwindActivation): MediaRange {\n return activation.kind === 'base' ? {} : activation.range;\n}\n\nfunction propertySetsOverlap(left: readonly string[], right: readonly string[]): boolean {\n return left.some(leftProperty => right.some(rightProperty => cssPropertiesOverlap(leftProperty, rightProperty)));\n}\n\nfunction numericRange(range: MediaRange): NumericRange {\n return {\n min: range.min ?? Number.NEGATIVE_INFINITY,\n max: range.max ?? Number.POSITIVE_INFINITY,\n };\n}\n\nfunction rangesCover(target: MediaRange, ranges: readonly MediaRange[]): boolean {\n const numericTarget = numericRange(target);\n const clipped = ranges\n .filter(range => mediaRangesIntersect(target, range))\n .map(range => {\n const numeric = numericRange(range);\n return {\n min: Math.max(numericTarget.min, numeric.min),\n max: Math.min(numericTarget.max, numeric.max),\n };\n })\n .sort((left, right) => left.min - right.min);\n const first = clipped[0];\n if (!first || first.min !== numericTarget.min) return false;\n\n let coveredUntil = first.max;\n for (const range of clipped.slice(1)) {\n if (range.min > coveredUntil) return false;\n coveredUntil = Math.max(coveredUntil, range.max);\n }\n return coveredUntil >= numericTarget.max;\n}\n\nfunction contextUnverified(input: LocatedFlexLayoutInput): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'context-unverified',\n reason: 'Generated responsive families have overlapping CSS ownership without one provable precedence.',\n suggestion: 'Migrate the coupled responsive families together manually.',\n };\n}\n\nexport class GeneratedPropertyCompositionPlanner {\n constructor(\n private readonly breakpointCatalog = new BreakpointCatalog(),\n private readonly classifier = new TailwindCandidateClassifier(),\n ) {}\n\n compose(plans: readonly PlannedConversion[]): readonly PlannedConversion[] {\n const candidates = this.generatedCandidates(plans);\n const unsafeFamilies = new Set<string>();\n const suppressedTokensByPlan = new Map<string, Set<string>>();\n\n this.closeUnresolvedAuthorities(plans, candidates, unsafeFamilies);\n\n for (const candidate of candidates.filter(candidate => candidate.authority === 'source-class')) {\n const writers = candidates.filter(\n writer =>\n writer.authority !== 'source-class' &&\n writer.family !== candidate.family &&\n mediaRangesIntersect(writer.range, candidate.range) &&\n propertySetsOverlap(writer.properties, candidate.properties),\n );\n if (!writers.length) continue;\n\n if (writers.some(writer => writer.authority === 'semantic-replacement')) {\n unsafeFamilies.add(candidate.family);\n for (const writer of writers) unsafeFamilies.add(writer.family);\n continue;\n }\n\n const ownerFamilies = new Set(writers.map(owner => owner.family));\n const ownershipIsProven =\n !candidate.important &&\n ownerFamilies.size === 1 &&\n candidate.properties.every(property =>\n rangesCover(\n candidate.range,\n writers\n .filter(owner =>\n owner.properties.some(ownerProperty => cssPropertyOwnershipCovers(ownerProperty, property)),\n )\n .map(owner => owner.range),\n ),\n );\n if (ownershipIsProven) {\n if (!candidate.suppressible) {\n unsafeFamilies.add(candidate.family);\n for (const owner of writers) unsafeFamilies.add(owner.family);\n continue;\n }\n const suppressed = suppressedTokensByPlan.get(candidate.plan.input.id) ?? new Set<string>();\n suppressed.add(candidate.token);\n suppressedTokensByPlan.set(candidate.plan.input.id, suppressed);\n continue;\n }\n\n unsafeFamilies.add(candidate.family);\n for (const owner of writers) unsafeFamilies.add(owner.family);\n }\n\n this.closeCompetingWriters(candidates, unsafeFamilies);\n\n return plans.map(plan => {\n if (plan.status !== 'converted') return plan;\n if (unsafeFamilies.has(this.planFamily(plan.input.directive))) return contextUnverified(plan.input);\n const suppressed = suppressedTokensByPlan.get(plan.input.id);\n return suppressed?.size ? { ...plan, classNames: plan.classNames.filter(token => !suppressed.has(token)) } : plan;\n });\n }\n\n private generatedCandidates(plans: readonly PlannedConversion[]): readonly GeneratedCandidate[] {\n return plans\n .filter(\n (plan): plan is Extract<PlannedConversion, { readonly status: 'converted' }> => plan.status === 'converted',\n )\n .flatMap(plan => {\n const family = this.planFamily(plan.input.directive);\n const authority = generatedPropertyAuthority(plan.input.directive);\n const describe = (token: string, suppressible: boolean): readonly GeneratedCandidate[] => {\n const descriptor = describeTailwindUtility(token);\n return descriptor === undefined || descriptor.cssProperties.length === 0\n ? []\n : [\n {\n plan,\n token,\n properties: descriptor.cssProperties,\n range: activationRange(descriptor.activation),\n important: descriptor.important,\n family,\n authority,\n suppressible,\n } satisfies GeneratedCandidate,\n ];\n };\n return [\n ...plan.classNames.flatMap(token => describe(token, true)),\n ...(plan.retainedClassNames ?? []).flatMap(token => describe(token, false)),\n ];\n });\n }\n\n private closeUnresolvedAuthorities(\n plans: readonly PlannedConversion[],\n candidates: readonly GeneratedCandidate[],\n unsafeFamilies: Set<string>,\n ): void {\n for (const unresolved of plans.filter(\n plan => plan.status !== 'converted' && extendedDirectives.has(plan.input.directive),\n )) {\n const properties = this.unresolvedProperties(unresolved.input);\n const range = this.inputRange(unresolved.input);\n for (const candidate of candidates) {\n if (\n mediaRangesIntersect(range, candidate.range) &&\n (properties === undefined || propertySetsOverlap(properties, candidate.properties))\n ) {\n unsafeFamilies.add(candidate.family);\n }\n }\n }\n }\n\n private closeCompetingWriters(candidates: readonly GeneratedCandidate[], unsafeFamilies: Set<string>): void {\n const writers = candidates.filter(candidate => candidate.authority !== 'source-class');\n for (let leftIndex = 0; leftIndex < writers.length; leftIndex += 1) {\n const left = writers[leftIndex];\n if (left === undefined) continue;\n for (const right of writers.slice(leftIndex + 1)) {\n if (\n left.family === right.family ||\n (!left.family.startsWith('extended-') && !right.family.startsWith('extended-')) ||\n !mediaRangesIntersect(left.range, right.range) ||\n !propertySetsOverlap(left.properties, right.properties) ||\n (left.authority === 'source-inline' && right.authority === 'source-inline' && left.token === right.token)\n ) {\n continue;\n }\n unsafeFamilies.add(left.family);\n unsafeFamilies.add(right.family);\n }\n }\n }\n\n private planFamily(directive: LocatedFlexLayoutInput['directive']): string {\n if (['fxFlex', 'fxGrow', 'fxShrink'].includes(directive)) return 'flex-item';\n if (directive === 'fxFlexFill' || directive === 'fxFill') return 'flex-fill';\n if (extendedClassDirectives.has(directive)) return 'extended-class';\n if (extendedStyleDirectives.has(directive)) return 'extended-style';\n return directive;\n }\n\n private inputRange(input: LocatedFlexLayoutInput): MediaRange {\n if (input.breakpoint === undefined) return {};\n const classification = this.breakpointCatalog.classify(input.breakpoint);\n return classification.kind === 'verified' ? classification.definition.range : {};\n }\n\n private unresolvedProperties(input: LocatedFlexLayoutInput): readonly string[] | undefined {\n if (input.binding !== 'literal') return undefined;\n if (extendedClassDirectives.has(input.directive)) {\n const classifications = input.value\n .split(/[\\t\\n\\f\\r ]+/u)\n .filter(Boolean)\n .map(token => this.classifier.classify(token));\n if (classifications.some(classification => classification.status === 'unverified')) return undefined;\n return classifications.flatMap(classification =>\n classification.status === 'verified' ? classification.descriptor.cssProperties : [],\n );\n }\n if (!extendedStyleDirectives.has(input.directive)) return [];\n const parsed = parseLiteralStyleDeclarations(input.value);\n return parsed.status === 'parsed' ? parsed.declarations.map(declaration => declaration.property) : undefined;\n }\n}\n","import type { LocatedFlexLayoutInput } from '../../analyzer/flex-layout-attribute.analyzer';\nimport type { ConversionAdapter, ConversionContext, PlannedConversion } from '../conversion-adapter';\nimport { planLayoutGap } from './directives/layout-gap.strategy';\nimport { planFlexItem } from './directives/flex-item.strategy';\nimport { planFlexOffset } from './directives/flex-offset.strategy';\nimport type { TailwindStrategyResult } from './tailwind-semantic.model';\nimport { planLayoutAlign } from './directives/layout-align.strategy';\nimport { planIndependentDirective } from './independent-directive.registry';\nimport type { TemplateAttribute } from '../../template/template.model';\nimport { templateAttributeKeys } from '../../template/template-attribute';\nimport { planLayout } from './directives/layout.strategy';\nimport { describeTailwindDisplay, findTailwindClassConflicts } from './tailwind-class-conflict';\nimport { BreakpointCatalog } from '../../breakpoint/breakpoint-catalog';\nimport { ResponsiveVariantEmitter } from './responsive-variant.emitter';\nimport { planResponsiveClasses } from './responsive-plan';\nimport { ResponsiveFamilyPlanner } from './responsive-family.planner';\nimport { DisplayCompositionPlanner } from './visibility/display-composition.planner';\nimport { VisibilityStatePlanner } from './visibility/visibility-state.planner';\nimport { VisibleDisplayResolver } from './visibility/visible-display.resolver';\nimport { ExtendedFamilyPlanner } from './extended/extended-family.planner';\nimport { ExtendedDisplayCompositionPlanner } from './extended/extended-display-composition.planner';\nimport { ExtendedResponsivePlanner } from './extended/extended-responsive.planner';\nimport { parseResponsiveClassValue } from './extended/responsive-class-value.parser';\nimport type { ResponsiveClassValue } from './extended/responsive-class.model';\nimport { parseResponsiveStyleValue } from './extended/responsive-style-value.parser';\nimport type { ResponsiveStyleValue } from './extended/responsive-style.model';\nimport { TailwindCandidateClassifier } from './extended/tailwind-candidate-classifier';\nimport { GeneratedPropertyCompositionPlanner } from './extended/generated-property-composition.planner';\n\nconst flexItemDirectives = new Set<LocatedFlexLayoutInput['directive']>(['fxFlex', 'fxGrow', 'fxShrink']);\nconst visibilityDirectives = new Set<LocatedFlexLayoutInput['directive']>(['fxShow', 'fxHide']);\nconst responsiveDisplayAuthorityDirectives = new Set<LocatedFlexLayoutInput['directive']>([\n 'class',\n 'ngClass',\n 'style',\n 'ngStyle',\n]);\nconst responsiveStyleAuthorityDirectives = new Set<LocatedFlexLayoutInput['directive']>(['style', 'ngStyle']);\nconst extendedClassDirectives = new Set<LocatedFlexLayoutInput['directive']>(['class', 'ngClass']);\nconst extendedStyleDirectives = new Set<LocatedFlexLayoutInput['directive']>(['style', 'ngStyle']);\nconst extendedDirectives = new Set<LocatedFlexLayoutInput['directive']>([\n ...extendedClassDirectives,\n ...extendedStyleDirectives,\n]);\n\nconst supportedDirectives = new Set<LocatedFlexLayoutInput['directive']>([\n 'fxFlex',\n 'fxGrow',\n 'fxShrink',\n 'fxFlexAlign',\n 'fxFlexFill',\n 'fxFill',\n 'fxFlexOffset',\n 'fxFlexOrder',\n 'fxLayout',\n 'fxLayoutAlign',\n 'fxLayoutGap',\n]);\n\nfunction toPlannedConversion(input: LocatedFlexLayoutInput, result: TailwindStrategyResult): PlannedConversion {\n if (result.status === 'converted') return { status: 'converted', input, classNames: result.classNames };\n if (result.status === 'invalid') {\n return {\n status: 'invalid',\n input,\n code: result.code,\n reason: `${input.value} is not a supported ${input.directive} value.`,\n suggestion: 'Correct the value or migrate this directive manually.',\n };\n }\n return { ...result, input };\n}\n\nfunction toResponsivePlannedConversion(\n input: LocatedFlexLayoutInput,\n result: TailwindStrategyResult,\n catalog: BreakpointCatalog,\n emitter: ResponsiveVariantEmitter,\n): PlannedConversion {\n return toPlannedConversion(\n input,\n result.status === 'converted' ? planResponsiveClasses(input, result.classNames, catalog, emitter) : result,\n );\n}\n\nfunction staticLayoutContext(attributes: readonly TemplateAttribute[]): string | undefined {\n const layouts = attributes.filter(\n attribute => attribute.name === 'fxLayout' || attribute.name.startsWith('fxLayout.'),\n );\n if (!layouts.length) return 'row';\n if (layouts.length !== 1) return undefined;\n const layout = layouts[0];\n return layout?.name === 'fxLayout' && layout.binding === 'literal' ? layout.value : undefined;\n}\n\nfunction isBoundClassAttribute(attribute: TemplateAttribute): boolean {\n if (attribute.binding !== 'property') return false;\n return [...templateAttributeKeys(attribute)].some(\n key => key === 'class' || key === 'ngclass' || key.startsWith('class.') || key.startsWith('ngclass.'),\n );\n}\n\nfunction contextUnverified(input: LocatedFlexLayoutInput, reason: string): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'context-unverified',\n reason,\n suggestion: 'Migrate the complete layout and visibility context together manually.',\n };\n}\n\nfunction compatibleVisibilityClasses(\n plan: Extract<PlannedConversion, { readonly status: 'converted' }>,\n existingClassNames: readonly string[],\n): readonly string[] {\n if (!visibilityDirectives.has(plan.input.directive)) return existingClassNames;\n\n const generatedDisplays = plan.classNames.map(describeTailwindDisplay).filter(descriptor => descriptor !== undefined);\n const hasBaseHidden = generatedDisplays.some(\n descriptor => descriptor.activation.kind === 'base' && descriptor.utility === 'hidden',\n );\n\n return existingClassNames.filter(className => {\n const existing = describeTailwindDisplay(className);\n if (\n !existing ||\n existing.activation.kind !== 'base' ||\n existing.important ||\n existing.token !== existing.utility ||\n existing.utility === 'hidden'\n ) {\n return true;\n }\n\n const suppliesResponsiveVisibility = hasBaseHidden\n ? generatedDisplays.some(\n generated => generated.activation.kind === 'media' && generated.utility === existing.utility,\n )\n : generatedDisplays.length > 0 && generatedDisplays.every(generated => generated.activation.kind === 'media');\n return !suppliesResponsiveVisibility;\n });\n}\n\nfunction equalClassValues(left: ResponsiveClassValue, right: ResponsiveClassValue): boolean {\n return (\n left.tokens.length === right.tokens.length && left.tokens.every((token, index) => token === right.tokens[index])\n );\n}\n\nfunction equalStyleValues(left: ResponsiveStyleValue, right: ResponsiveStyleValue): boolean {\n return (\n left.declarations.length === right.declarations.length &&\n left.declarations.every(\n (declaration, index) =>\n declaration.property === right.declarations[index]?.property &&\n declaration.value === right.declarations[index]?.value,\n )\n );\n}\n\nexport class TailwindAdapter implements ConversionAdapter {\n readonly name = 'tailwind' as const;\n private readonly breakpointCatalog = new BreakpointCatalog();\n private readonly responsiveEmitter = new ResponsiveVariantEmitter();\n private readonly responsiveFamilyPlanner = new ResponsiveFamilyPlanner(\n this.breakpointCatalog,\n this.responsiveEmitter,\n );\n private readonly visibilityStatePlanner = new VisibilityStatePlanner(this.breakpointCatalog);\n private readonly visibleDisplayResolver = new VisibleDisplayResolver();\n private readonly displayCompositionPlanner = new DisplayCompositionPlanner(this.breakpointCatalog);\n private readonly extendedFamilyPlanner = new ExtendedFamilyPlanner(this.breakpointCatalog);\n private readonly extendedResponsivePlanner = new ExtendedResponsivePlanner();\n private readonly tailwindCandidateClassifier = new TailwindCandidateClassifier();\n private readonly extendedDisplayCompositionPlanner = new ExtendedDisplayCompositionPlanner(\n this.breakpointCatalog,\n this.tailwindCandidateClassifier,\n );\n private readonly generatedPropertyCompositionPlanner = new GeneratedPropertyCompositionPlanner(\n this.breakpointCatalog,\n this.tailwindCandidateClassifier,\n );\n\n resolveClassConflicts(\n plans: readonly PlannedConversion[],\n existingClassNames: readonly string[],\n ): readonly PlannedConversion[] {\n const convertedPlans = plans.filter(\n (plan): plan is Extract<PlannedConversion, { readonly status: 'converted' }> => plan.status === 'converted',\n );\n const sharedConflictingTokens = findTailwindClassConflicts(\n existingClassNames,\n convertedPlans.flatMap(plan => plan.classNames),\n );\n const conflictingFamilies = new Set(\n convertedPlans\n .filter(plan => {\n if (!visibilityDirectives.has(plan.input.directive)) {\n return plan.classNames.some(className => sharedConflictingTokens.has(className));\n }\n const conflictingTokens = findTailwindClassConflicts(\n compatibleVisibilityClasses(plan, existingClassNames),\n plan.classNames,\n );\n return plan.classNames.some(className => conflictingTokens.has(className));\n })\n .map(plan => this.directiveFamily(plan.input.directive)),\n );\n return plans.map(plan =>\n plan.status === 'converted' && conflictingFamilies.has(this.directiveFamily(plan.input.directive))\n ? {\n status: 'review',\n input: plan.input,\n code: 'class-conflict',\n reason: 'An existing Tailwind utility controls a CSS property generated by this conversion.',\n suggestion: 'Remove or reconcile the conflicting utility before migrating this directive.',\n }\n : plan,\n );\n }\n\n closePlanDependencies(\n plans: readonly PlannedConversion[],\n context: ConversionContext,\n plansByInputId: ReadonlyMap<string, PlannedConversion>,\n ): readonly PlannedConversion[] {\n const inputs = plans.map(plan => plan.input);\n const closeResponsiveDependencies = (current: readonly PlannedConversion[]): readonly PlannedConversion[] => {\n const currentPlans = new Map(current.map(plan => [plan.input.id, plan]));\n return this.responsiveFamilyPlanner.closeDependencies(\n inputs,\n { ...context, inputs },\n (input, itemContext) =>\n currentPlans.get(input.id) ?? plansByInputId.get(input.id) ?? this.planSemantic(input, itemContext),\n );\n };\n\n let closed = closeResponsiveDependencies(plans);\n closed = this.closeDisplayDependencies(closed);\n closed = closeResponsiveDependencies(closed);\n return this.closeDisplayDependencies(closed);\n }\n\n private directiveFamily(directive: LocatedFlexLayoutInput['directive']): string {\n if (flexItemDirectives.has(directive)) return 'flex-item';\n if (directive === 'fxFlexFill' || directive === 'fxFill') return 'flex-fill';\n if (visibilityDirectives.has(directive)) return 'visibility';\n if (extendedClassDirectives.has(directive)) return 'extended-class';\n if (extendedStyleDirectives.has(directive)) return 'extended-style';\n return directive;\n }\n\n planElement(inputs: readonly LocatedFlexLayoutInput[], context: ConversionContext): readonly PlannedConversion[] {\n const visibilityInputs = inputs.filter(input => visibilityDirectives.has(input.directive));\n const strategyInputs = inputs.filter(input => !visibilityDirectives.has(input.directive));\n const plannedStrategies = this.responsiveFamilyPlanner.plan(\n strategyInputs,\n { ...context, inputs },\n (input, itemContext) => this.planSemantic(input, itemContext),\n (family, familyInputs, itemContext) => this.planExtendedFamily(family, familyInputs, itemContext),\n );\n const initialStrategyPlans = this.generatedPropertyCompositionPlanner.compose(plannedStrategies);\n if (!visibilityInputs.length) {\n return this.extendedDisplayCompositionPlanner.composeWithLayout(initialStrategyPlans);\n }\n\n const initialVisibilityPlan = this.visibilityStatePlanner.plan(visibilityInputs);\n const extendedComposition = this.extendedDisplayCompositionPlanner.compose(\n initialStrategyPlans,\n initialVisibilityPlan,\n );\n const strategyPlans = extendedComposition.strategyPlans;\n const visibilityPlan = extendedComposition.visibilityPlan;\n const layoutPlans = strategyPlans.filter(plan => plan.input.directive === 'fxLayout');\n const plansByStrategyInputId = new Map(strategyPlans.map(plan => [plan.input.id, plan]));\n const responsiveStyleInputs = strategyInputs.filter(\n input =>\n responsiveStyleAuthorityDirectives.has(input.directive) &&\n plansByStrategyInputId.get(input.id)?.status !== 'converted' &&\n this.extendedDisplayCompositionPlanner.inputMayControlDisplay(input),\n );\n const baseDisplayResolution =\n visibilityPlan.status === 'converted'\n ? this.visibleDisplayResolver.resolve({\n states: visibilityPlan.states,\n layoutPlans,\n existingClassNames: context.existingClassNames ?? [],\n attributes: (context.attributeEvidence ?? context.element.attributes).filter(\n attribute => !isBoundClassAttribute(attribute),\n ),\n responsiveStyleInputs,\n })\n : { status: 'resolved' as const, utility: undefined };\n const displayResolution = this.extendedDisplayCompositionPlanner.resolveVisibleDisplay(\n baseDisplayResolution,\n strategyPlans,\n visibilityPlan,\n );\n const composed = this.displayCompositionPlanner.compose({\n visibilityPlan,\n displayResolution,\n layoutPlans,\n });\n const plansById = new Map(\n [...strategyPlans.filter(plan => plan.input.directive !== 'fxLayout'), ...composed.plans].map(plan => [\n plan.input.id,\n plan,\n ]),\n );\n return inputs.map(input => plansById.get(input.id) ?? this.planSemantic(input, context));\n }\n\n plan(input: LocatedFlexLayoutInput, context: ConversionContext): PlannedConversion {\n if (visibilityDirectives.has(input.directive)) {\n const family = this.visibilityStatePlanner.plan([input]);\n if (family.status === 'unresolved')\n return family.plans[0] ?? contextUnverified(input, 'Visibility is unresolved.');\n return contextUnverified(input, 'Visibility requires complete element-family context before conversion.');\n }\n\n if (extendedDirectives.has(input.directive)) {\n const family = extendedClassDirectives.has(input.directive) ? 'extended-class' : 'extended-style';\n const plans = this.planExtendedFamily(family, [input], { ...context, inputs: [input] });\n const intrinsic = plans[0];\n if (intrinsic?.status !== 'converted') {\n return intrinsic ?? contextUnverified(input, 'The responsive extended family is unresolved.');\n }\n return contextUnverified(\n input,\n 'Responsive class and style conversion requires complete element-family context.',\n );\n }\n\n const semantic = this.planSemantic(input, context);\n if (semantic.status !== 'converted') return semantic;\n return toResponsivePlannedConversion(\n input,\n { status: 'converted', classNames: semantic.classNames },\n this.breakpointCatalog,\n this.responsiveEmitter,\n );\n }\n\n private planSemantic(input: LocatedFlexLayoutInput, context: ConversionContext): PlannedConversion {\n if (input.binding === 'property') {\n return toPlannedConversion(\n input,\n planResponsiveClasses(input, [], this.breakpointCatalog, this.responsiveEmitter),\n );\n }\n\n if (!supportedDirectives.has(input.directive)) {\n return {\n status: 'unsupported',\n input,\n code: 'target-unsupported',\n reason: `The Tailwind target does not support ${input.directive}.`,\n suggestion: 'Keep the directive and migrate it manually.',\n };\n }\n\n if (input.directive === 'fxLayoutGap') {\n const layoutValue = context.activeLayout ?? staticLayoutContext(context.element.attributes);\n const gap = planLayoutGap(input.value, layoutValue);\n return toPlannedConversion(input, gap);\n }\n\n if (flexItemDirectives.has(input.directive)) {\n const flexInputs = (context.inputs ?? [input]).filter(item => flexItemDirectives.has(item.directive));\n const sameBreakpoint = (item: LocatedFlexLayoutInput) => item.breakpoint === input.breakpoint;\n const atBreakpoint = (directive: LocatedFlexLayoutInput['directive']) =>\n flexInputs.filter(item => item.directive === directive && sameBreakpoint(item));\n const atBase = (directive: LocatedFlexLayoutInput['directive']) =>\n flexInputs.filter(item => item.directive === directive && item.breakpoint === undefined);\n const exactFlex = atBreakpoint('fxFlex');\n const baseFlex = atBase('fxFlex');\n const basis = exactFlex[0] ?? (input.breakpoint ? baseFlex[0] : undefined);\n const exactGrow = atBreakpoint('fxGrow');\n const exactShrink = atBreakpoint('fxShrink');\n const grow = exactGrow[0] ?? (input.breakpoint ? atBase('fxGrow')[0] : undefined);\n const shrink = exactShrink[0] ?? (input.breakpoint ? atBase('fxShrink')[0] : undefined);\n const duplicateMember = [exactFlex, exactGrow, exactShrink].some(items => items.length > 1);\n if (!basis || duplicateMember) {\n return {\n status: 'invalid',\n input,\n code: 'invalid-value',\n reason: basis\n ? 'Multiple flex sizing inputs define the same responsive state.'\n : `${input.directive} requires an active fxFlex value.`,\n suggestion: 'Keep one flex sizing value per breakpoint or migrate this group manually.',\n };\n }\n const flex = planFlexItem({\n basis: basis.value,\n grow: grow?.value,\n shrink: shrink?.value,\n layout: context.activeParentLayout ?? staticLayoutContext(context.parent?.attributes ?? []),\n });\n if (flex.status === 'converted') {\n return toPlannedConversion(input, flex);\n }\n if (flex.status === 'invalid') {\n return {\n status: 'invalid',\n input,\n code: flex.code,\n reason: `${input.value} is not a supported fxFlex value.`,\n suggestion: 'Correct the value or migrate this directive manually.',\n };\n }\n return { ...flex, input };\n }\n\n const independent = planIndependentDirective(input);\n if (independent) return toPlannedConversion(input, independent);\n if (input.directive === 'fxFlexOffset') {\n const layout = context.activeParentLayout ?? staticLayoutContext(context.parent?.attributes ?? []);\n return toPlannedConversion(input, planFlexOffset(input.value, layout));\n }\n if (input.directive === 'fxLayoutAlign') {\n const layout = context.activeLayout ?? staticLayoutContext(context.element.attributes);\n if (layout === undefined) {\n return {\n status: 'review',\n input,\n code: 'context-unverified',\n reason: 'Alignment sizing and direction depend on a dynamic or responsive layout.',\n suggestion: 'Make the layout static or migrate layout and alignment together manually.',\n };\n }\n const alignment = planLayoutAlign(input.value, layout);\n if (alignment.ok) {\n return toPlannedConversion(input, { status: 'converted', classNames: alignment.value.classNames });\n }\n return {\n status: 'invalid',\n input,\n code: 'invalid-value',\n reason: `${input.value} is not a supported fxLayoutAlign value.`,\n suggestion: 'Correct the value or migrate this directive manually.',\n };\n }\n\n if (input.directive === 'fxLayout') {\n const layout = planLayout(input.value);\n if (layout.ok) {\n return toPlannedConversion(input, { status: 'converted', classNames: layout.value.classNames });\n }\n }\n return {\n status: 'invalid',\n input,\n code: 'invalid-value',\n reason: `${input.value} is not a supported ${input.directive} value.`,\n suggestion: 'Correct the value or migrate this directive manually.',\n };\n }\n\n private planExtendedFamily(\n family: 'extended-class' | 'extended-style',\n inputs: readonly LocatedFlexLayoutInput[],\n context: ConversionContext,\n ): readonly PlannedConversion[] {\n if (family === 'extended-class') {\n const familyPlan = this.extendedFamilyPlanner.plan<ResponsiveClassValue>({\n kind: 'class',\n inputs,\n valueParser: input => parseResponsiveClassValue(input, this.tailwindCandidateClassifier),\n equals: equalClassValues,\n });\n return this.extendedResponsivePlanner.plan({\n kind: 'class',\n familyPlan,\n existingClassNames: [],\n attributes: context.attributeEvidence ?? context.element.attributes,\n }).plans;\n }\n\n const familyPlan = this.extendedFamilyPlanner.plan<ResponsiveStyleValue>({\n kind: 'style',\n inputs,\n valueParser: parseResponsiveStyleValue,\n equals: equalStyleValues,\n });\n return this.extendedResponsivePlanner.plan({\n kind: 'style',\n familyPlan,\n existingClassNames: [],\n attributes: context.attributeEvidence ?? context.element.attributes,\n }).plans;\n }\n\n private closeDisplayDependencies(plans: readonly PlannedConversion[]): readonly PlannedConversion[] {\n const layoutPlans = plans.filter(plan => plan.input.directive === 'fxLayout');\n const visibilityPlans = plans.filter(plan => visibilityDirectives.has(plan.input.directive));\n const authorityPlans = plans.filter(\n plan =>\n responsiveDisplayAuthorityDirectives.has(plan.input.directive) &&\n this.extendedDisplayCompositionPlanner.inputMayControlDisplay(plan.input),\n );\n const visibilityIsNoOp =\n visibilityPlans.length > 0 &&\n visibilityPlans.every(plan => plan.status === 'converted' && plan.classNames.length === 0);\n if ((!layoutPlans.length && !authorityPlans.length) || !visibilityPlans.length || visibilityIsNoOp) return plans;\n\n const displayContextIsUnresolved = [...layoutPlans, ...visibilityPlans, ...authorityPlans].some(\n plan => plan.status !== 'converted',\n );\n if (!displayContextIsUnresolved) return plans;\n return plans.map(plan =>\n plan.status === 'converted' &&\n (plan.input.directive === 'fxLayout' ||\n visibilityDirectives.has(plan.input.directive) ||\n (responsiveDisplayAuthorityDirectives.has(plan.input.directive) &&\n this.extendedDisplayCompositionPlanner.inputMayControlDisplay(plan.input)))\n ? contextUnverified(\n plan.input,\n 'The element display context contains an unresolved layout or visibility family.',\n )\n : plan,\n );\n }\n}\n","import { logger } from '../logger';\nimport type { ConversionAdapter } from './conversion-adapter';\nimport { TailwindAdapter } from './tailwind/tailwind.adapter';\n\nexport class AdapterFactory {\n static create(target: string): ConversionAdapter {\n logger.info(`Creating adapter [${target}]`);\n if (target === 'tailwind') return new TailwindAdapter();\n throw new Error(`Adapter [${target}] not found`);\n }\n}\n","import { stat } from 'node:fs/promises';\nimport * as path from 'node:path';\nimport type { ConversionAdapter } from '../adapter/conversion-adapter';\nimport { loadGitIgnore } from '../lib/gitignore.helper';\nimport { MigrationReportBuilder } from '../report/migration-report.builder';\nimport type { MigrationReport } from '../report/migration-report';\nimport type { FileMigrationResult } from './file-migration-result';\nimport { FileMigrator } from './file.migrator';\nimport { FolderMigrator } from './folder.migrator';\n\nexport interface MigrationOptions {\n readonly dryRun: boolean;\n}\n\nexport class Migrator {\n constructor(\n private readonly adapter: ConversionAdapter,\n private readonly inputPath: string,\n private readonly outputPath: string,\n private readonly now: () => number = Date.now,\n ) {}\n\n public async migrate(options: MigrationOptions = { dryRun: false }): Promise<MigrationReport> {\n if (this.adapter.name !== 'tailwind') {\n throw new Error(`Unsupported migration target: ${this.adapter.name}`);\n }\n\n const startedAt = this.now();\n const inputStat = await stat(this.inputPath);\n\n await loadGitIgnore(this.inputPath);\n\n let files: readonly FileMigrationResult[];\n if (inputStat.isFile()) {\n if (path.extname(this.inputPath).toLowerCase() !== '.html') {\n throw new Error(`Unsupported file type: ${this.inputPath}`);\n }\n if (path.extname(this.outputPath).toLowerCase() !== '.html') {\n throw new Error('Single-file output path must have a .html extension.');\n }\n files = [\n await new FileMigrator(this.adapter, this.inputPath, this.outputPath).migrate({ write: !options.dryRun }),\n ];\n } else if (inputStat.isDirectory()) {\n files = await new FolderMigrator(this.adapter, this.inputPath, this.outputPath).migrate({\n write: !options.dryRun,\n });\n } else {\n throw new Error(`Unsupported input type: ${this.inputPath}`);\n }\n\n return new MigrationReportBuilder().build(\n this.inputPath,\n this.outputPath,\n this.adapter.name,\n options.dryRun,\n this.now() - startedAt,\n files,\n );\n }\n}\n","import fs from 'fs-extra';\nimport ignore from 'ignore';\nimport { Ignore } from 'ignore';\nimport path from 'path';\nimport { logger } from '../logger';\n\nlet gitignoreCache: Ignore | undefined;\n\n/**\n * Loads the .gitignore file from the input folder and returns an instance of the ignore library.\n * @param inputFolder path to the input folder\n * @returns an instance of the ignore library\n */\nexport async function loadGitIgnore(inputFolder: string): Promise<void> {\n if (gitignoreCache) {\n return;\n }\n const gitignorePath = path.join(inputFolder, '.gitignore');\n\n gitignoreCache = ignore();\n\n if (await fs.pathExists(gitignorePath)) {\n const gitignoreContent = await fs.readFile(gitignorePath, 'utf-8');\n gitignoreCache.add(gitignoreContent);\n logger.debug(`Loaded .gitignore file from ${gitignorePath}`);\n }\n}\n\n/**\n * Checks if the given path should be ignored.\n * @param ig an instance of the ignore library\n * @param baseFolder the base folder\n * @param targetPath the path to check\n * @returns true if the path should be ignored, false otherwise\n */\nexport function shouldIgnore(baseFolder: string, targetPath: string): boolean {\n if (!gitignoreCache) {\n return false;\n }\n const relativePath = path.relative(baseFolder, targetPath);\n return gitignoreCache.ignores(relativePath);\n}\n","import path from 'node:path';\nimport type { ConversionResult } from '../analyzer/conversion-result';\nimport type { LocatedFlexLayoutInput } from '../analyzer/flex-layout-attribute.analyzer';\nimport type { FileMigrationResult } from '../migrator/file-migration-result';\nimport { compareCodeUnits } from '../util/compare-code-units';\nimport type { FileReport, MigrationReport, MigrationSummary, ReportResult } from './migration-report';\n\ntype PathApi = typeof path.posix;\n\nexport class MigrationReportBuilder {\n public build(\n inputRoot: string,\n outputRoot: string,\n target: 'tailwind',\n dryRun: boolean,\n durationMs: number,\n files: readonly FileMigrationResult[],\n ): MigrationReport {\n const pathApi = this.pathApi(inputRoot, ...files.map(file => file.inputPath));\n const singleFile = files.length === 1 && this.samePath(pathApi, inputRoot, files[0]?.inputPath ?? '');\n const fileReports = files\n .map(file => this.fileReport(pathApi, inputRoot, singleFile, file))\n .sort((left, right) => compareCodeUnits(left.path, right.path));\n const reportPaths = this.reportPaths(pathApi, inputRoot, outputRoot, singleFile);\n\n return {\n schemaVersion: 1,\n target,\n dryRun,\n input: reportPaths.input,\n output: reportPaths.output,\n durationMs: Math.trunc(durationMs),\n summary: this.summary(fileReports),\n files: fileReports,\n };\n }\n\n private pathApi(...values: readonly string[]): PathApi {\n if (values.some(value => /^[A-Za-z]:[\\\\/]/.test(value) || value.includes('\\\\'))) return path.win32;\n if (values.some(value => value.includes('/'))) return path.posix;\n return path;\n }\n\n private samePath(pathApi: PathApi, left: string, right: string): boolean {\n return pathApi.normalize(left) === pathApi.normalize(right);\n }\n\n private fileReport(pathApi: PathApi, inputRoot: string, singleFile: boolean, file: FileMigrationResult): FileReport {\n const relativePath = singleFile ? pathApi.basename(file.inputPath) : pathApi.relative(inputRoot, file.inputPath);\n return {\n path: this.forwardSlashes(pathApi, relativePath),\n changed: file.changed,\n results: file.results.map(result => this.result(result)),\n };\n }\n\n private result(result: ConversionResult): ReportResult {\n if (result.status === 'parse-error') {\n return {\n status: result.status,\n offset: result.source.start,\n code: result.code,\n reason: result.reason,\n };\n }\n\n const input = result.input as LocatedFlexLayoutInput;\n if (result.status === 'converted') {\n return {\n status: result.status,\n directive: input.directive,\n sourceName: input.sourceName,\n offset: input.source.start,\n };\n }\n\n return {\n status: result.status,\n directive: input.directive,\n sourceName: input.sourceName,\n offset: input.source.start,\n code: result.code,\n reason: result.reason,\n suggestion: result.suggestion,\n };\n }\n\n private reportPaths(\n pathApi: PathApi,\n inputRoot: string,\n outputRoot: string,\n singleFile: boolean,\n ): { readonly input: string; readonly output: string } {\n const base = singleFile ? pathApi.dirname(inputRoot) : inputRoot;\n const input = singleFile ? pathApi.basename(inputRoot) : '.';\n const relativeOutput = pathApi.relative(base, outputRoot);\n const output = pathApi.isAbsolute(relativeOutput) ? pathApi.basename(outputRoot) : relativeOutput || '.';\n\n return {\n input: this.forwardSlashes(pathApi, input),\n output: this.forwardSlashes(pathApi, output),\n };\n }\n\n private forwardSlashes(pathApi: PathApi, value: string): string {\n return value.split(pathApi.sep).join('/');\n }\n\n private summary(files: readonly FileReport[]): MigrationSummary {\n const resultCounts = {\n converted: 0,\n review: 0,\n unsupported: 0,\n invalid: 0,\n parseErrors: 0,\n };\n\n for (const result of files.flatMap(file => file.results)) {\n if (result.status === 'parse-error') resultCounts.parseErrors += 1;\n else resultCounts[result.status] += 1;\n }\n\n return {\n filesScanned: files.length,\n filesChanged: files.filter(file => file.changed).length,\n ...resultCounts,\n };\n }\n}\n","export function compareCodeUnits(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n","import { readFile } from 'node:fs/promises';\nimport type { ConversionAdapter } from '../adapter/conversion-adapter';\nimport type { ConversionResult } from '../analyzer/conversion-result';\nimport { TemplateAnalyzer } from '../analyzer/template.analyzer';\nimport { SourceEditor } from '../edit/source-editor';\nimport { AtomicFileWriter } from '../lib/atomic-file.writer';\nimport { ConversionPlanner } from '../planner/conversion-planner';\nimport { AngularTemplateParser } from '../template/angular-template.parser';\nimport { BaseMigrator } from './base.migrator';\nimport type { FileMigrationOptions, FileMigrationResult } from './file-migration-result';\n\nexport class FileMigrator extends BaseMigrator<FileMigrationResult> {\n constructor(\n private readonly adapter: ConversionAdapter,\n private readonly input: string,\n private readonly output: string,\n private readonly writer: AtomicFileWriter = new AtomicFileWriter(),\n ) {\n super();\n }\n\n public async migrate(options: FileMigrationOptions = { write: true }): Promise<FileMigrationResult> {\n const source = await readFile(this.input, 'utf8');\n const parsed = new AngularTemplateParser().parse(source, this.input);\n if (parsed.status === 'parse-error') {\n const results: readonly ConversionResult[] = parsed.diagnostics.map(diagnostic => ({\n status: 'parse-error',\n fileName: this.input,\n code: 'template-parse-error',\n reason: diagnostic.message,\n source: diagnostic.source,\n }));\n return this.result(false, results);\n }\n\n const inputs = new TemplateAnalyzer().analyze(this.input, parsed.elements);\n if (!inputs.length) {\n return this.result(false, []);\n }\n\n const plan = new ConversionPlanner().plan(source, parsed.elements, inputs, this.adapter);\n const edited = new SourceEditor().apply(source, plan.edits);\n if (edited.status === 'invalid') {\n throw new Error(\n `Invalid edit plan for ${this.input}: ${edited.diagnostics.map(item => item.message).join('; ')}`,\n );\n }\n\n const changed = edited.output !== source;\n if (changed && options.write) {\n await this.writer.write(this.output, edited.output);\n }\n\n return this.result(changed, plan.results);\n }\n\n private result(changed: boolean, results: readonly ConversionResult[]): FileMigrationResult {\n return {\n inputPath: this.input,\n outputPath: this.output,\n changed,\n results: [...results],\n };\n }\n}\n","import { FLEX_LAYOUT_DIRECTIVES, FlexLayoutDirective, isFlexLayoutDirective } from './flex-layout.catalog';\nimport type { SourceRange } from '../template/template.model';\n\nexport type BindingKind = 'literal' | 'property';\n\nexport interface FlexLayoutInput {\n sourceName: string;\n directive: FlexLayoutDirective;\n value: string;\n binding: BindingKind;\n breakpoint: string | undefined;\n}\n\nexport interface LocatedFlexLayoutInput extends FlexLayoutInput {\n readonly id: string;\n readonly fileName: string;\n readonly elementId: string;\n readonly source: SourceRange;\n readonly nameSource: SourceRange;\n readonly valueSource?: SourceRange;\n}\n\nconst responsiveOnlyDirectives = new Set<FlexLayoutDirective>(['class', 'ngClass', 'style', 'ngStyle']);\nconst directivesByLength = [...FLEX_LAYOUT_DIRECTIVES].sort((left, right) => right.length - left.length);\n\nexport function analyzeFlexLayoutAttribute(sourceName: string, value: string): FlexLayoutInput | undefined {\n const startsWithBracket = sourceName.startsWith('[');\n const endsWithBracket = sourceName.endsWith(']');\n\n if (startsWithBracket !== endsWithBracket) return undefined;\n\n const binding: BindingKind = startsWithBracket ? 'property' : 'literal';\n const normalizedName = startsWithBracket ? sourceName.slice(1, -1) : sourceName;\n const directive = directivesByLength.find(\n candidate => normalizedName === candidate || normalizedName.startsWith(`${candidate}.`),\n );\n\n if (!directive || !isFlexLayoutDirective(directive)) return undefined;\n\n const breakpoint = normalizedName === directive ? undefined : normalizedName.slice(directive.length + 1);\n if (responsiveOnlyDirectives.has(directive) && !breakpoint) return undefined;\n\n return {\n sourceName,\n value,\n directive,\n breakpoint,\n binding,\n };\n}\n","import type { TemplateElement } from '../template/template.model';\nimport { analyzeFlexLayoutAttribute, LocatedFlexLayoutInput } from './flex-layout-attribute.analyzer';\nimport { isKnownBreakpoint } from './flex-layout.catalog';\n\nfunction sourceNameFor(attribute: TemplateElement['attributes'][number]): string | undefined {\n if (attribute.binding === 'literal') return attribute.name;\n if (attribute.bindingTarget === 'property' || attribute.bindingTarget === 'two-way') return `[${attribute.name}]`;\n if (\n (attribute.bindingTarget === 'class' || attribute.bindingTarget === 'style') &&\n isKnownBreakpoint(attribute.name)\n ) {\n return `[${attribute.bindingTarget}.${attribute.name}]`;\n }\n return undefined;\n}\n\nexport class TemplateAnalyzer {\n analyze(fileName: string, elements: readonly TemplateElement[]): readonly LocatedFlexLayoutInput[] {\n const inputs: LocatedFlexLayoutInput[] = [];\n\n for (const element of elements) {\n for (const attribute of element.attributes) {\n const sourceName = sourceNameFor(attribute);\n if (!sourceName) continue;\n const input = analyzeFlexLayoutAttribute(sourceName, attribute.value);\n if (!input) continue;\n\n inputs.push({\n ...input,\n id: `${fileName}:${attribute.source.start}`,\n fileName,\n elementId: element.id,\n source: attribute.source,\n nameSource: attribute.nameSource,\n ...(attribute.valueSource ? { valueSource: attribute.valueSource } : {}),\n });\n }\n }\n\n return inputs.sort((left, right) => left.source.start - right.source.start);\n }\n}\n","import type { EditDiagnostic, EditResult, SourceEdit } from './source-edit';\nimport { compareCodeUnits } from '../util/compare-code-units';\n\nexport class SourceEditor {\n apply(source: string, edits: readonly SourceEdit[]): EditResult {\n const diagnostics = this.validate(source, edits);\n if (diagnostics.length) return { status: 'invalid', diagnostics };\n\n const orderedEdits = [...edits].sort(\n (left, right) => right.range.start - left.range.start || compareCodeUnits(right.inputId, left.inputId),\n );\n\n let output = source;\n for (const edit of orderedEdits) {\n output = output.slice(0, edit.range.start) + edit.text + output.slice(edit.range.end);\n }\n\n return { status: 'applied', output };\n }\n\n private validate(source: string, edits: readonly SourceEdit[]): EditDiagnostic[] {\n const invalidRanges = edits\n .filter(\n edit =>\n !Number.isInteger(edit.range.start) ||\n !Number.isInteger(edit.range.end) ||\n edit.range.start < 0 ||\n edit.range.end < edit.range.start ||\n edit.range.end > source.length,\n )\n .map(edit => ({\n code: 'invalid-range' as const,\n message: `Edit ${edit.inputId} has a range outside the source.`,\n inputIds: [edit.inputId],\n }));\n\n if (invalidRanges.length) return invalidRanges;\n\n const byStart = [...edits].sort(\n (left, right) => left.range.start - right.range.start || left.range.end - right.range.end,\n );\n\n for (let index = 0; index < byStart.length; index++) {\n const left = byStart[index];\n if (!left) continue;\n\n for (let nextIndex = index + 1; nextIndex < byStart.length; nextIndex++) {\n const right = byStart[nextIndex];\n if (!right || right.range.start > left.range.end) break;\n\n if (left.range.start < right.range.end && right.range.start < left.range.end) {\n const inputIds = [left.inputId, right.inputId].sort();\n return [\n {\n code: 'overlapping-edits',\n message: `Edits ${inputIds[0]} and ${inputIds[1]} overlap.`,\n inputIds,\n },\n ];\n }\n }\n }\n\n return [];\n }\n}\n","import { randomUUID } from 'node:crypto';\nimport { mkdir, open, rename, unlink } from 'node:fs/promises';\nimport { basename, dirname, join } from 'node:path';\n\nexport interface AtomicFileOperations {\n readonly mkdir: typeof mkdir;\n readonly open: typeof open;\n readonly rename: typeof rename;\n readonly unlink: typeof unlink;\n}\n\nconst defaultOperations: AtomicFileOperations = { mkdir, open, rename, unlink };\n\nexport class AtomicFileWriter {\n constructor(private readonly operations: AtomicFileOperations = defaultOperations) {}\n\n async write(targetPath: string, contents: string): Promise<void> {\n const directory = dirname(targetPath);\n const temporaryPath = join(directory, `.${basename(targetPath)}.${randomUUID()}.tmp`);\n\n await this.operations.mkdir(directory, { recursive: true });\n let temporaryFile: Awaited<ReturnType<typeof open>> | undefined;\n try {\n temporaryFile = await this.operations.open(temporaryPath, 'wx');\n await temporaryFile.writeFile(contents, 'utf8');\n await temporaryFile.sync();\n await temporaryFile.close();\n temporaryFile = undefined;\n await this.operations.rename(temporaryPath, targetPath);\n } catch (error) {\n await temporaryFile?.close().catch(() => undefined);\n await this.operations.unlink(temporaryPath).catch(() => undefined);\n throw error;\n }\n }\n}\n","import type { ConversionAdapter, ConversionContext, PlannedConversion } from '../adapter/conversion-adapter';\nimport type { ConversionResult } from '../analyzer/conversion-result';\nimport type { LocatedFlexLayoutInput } from '../analyzer/flex-layout-attribute.analyzer';\nimport type { SourceEdit } from '../edit/source-edit';\nimport { templateAttributeKeys } from '../template/template-attribute';\nimport type { SourceRange, TemplateElement } from '../template/template.model';\nimport { appendLiteralClassNames } from '../edit/html-attribute-value';\n\nexport interface FilePlan {\n readonly edits: readonly SourceEdit[];\n readonly results: readonly ConversionResult[];\n}\n\ninterface ElementConversions {\n readonly element: TemplateElement;\n readonly inputs: LocatedFlexLayoutInput[];\n readonly classPlans: Array<{\n readonly input: LocatedFlexLayoutInput;\n readonly classNames: readonly string[];\n }>;\n}\n\nconst directiveOrder = new Map(\n [\n 'fxLayout',\n 'fxLayoutGap',\n 'fxLayoutAlign',\n 'fxFlex',\n 'fxGrow',\n 'fxShrink',\n 'fxFlexAlign',\n 'fxFlexFill',\n 'fxFill',\n 'fxFlexOffset',\n 'fxFlexOrder',\n 'ngClass',\n 'class',\n 'ngStyle',\n 'style',\n 'fxShow',\n 'fxHide',\n ].map((directive, index) => [directive, index]),\n);\n\nfunction boundClassBlocked(input: LocatedFlexLayoutInput): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'bound-class',\n reason: 'Generated classes cannot be merged safely with a bound class value.',\n suggestion: 'Merge the generated classes into the binding manually.',\n };\n}\n\nfunction isBoundClassAttribute(attribute: TemplateElement['attributes'][number]): boolean {\n if (attribute.binding !== 'property') return false;\n return [...templateAttributeKeys(attribute)].some(\n key => key === 'class' || key === 'ngclass' || key.startsWith('class.') || key.startsWith('ngclass.'),\n );\n}\n\nfunction literalClassAttribute(element: TemplateElement) {\n return element.attributes.find(\n attribute => attribute.binding === 'literal' && templateAttributeKeys(attribute).has('class'),\n );\n}\n\nfunction removalRange(source: string, input: LocatedFlexLayoutInput): SourceRange {\n const start =\n input.source.start > 0 && /[\\t ]/.test(source[input.source.start - 1] ?? '')\n ? input.source.start - 1\n : input.source.start;\n return { start, end: input.source.end };\n}\n\nexport class ConversionPlanner {\n plan(\n source: string,\n elements: readonly TemplateElement[],\n inputs: readonly LocatedFlexLayoutInput[],\n adapter: ConversionAdapter,\n ): FilePlan {\n const elementById = new Map(elements.map(element => [element.id, element]));\n const inputsByElementId = new Map<string, LocatedFlexLayoutInput[]>();\n for (const input of inputs) {\n const elementInputs = inputsByElementId.get(input.elementId) ?? [];\n elementInputs.push(input);\n inputsByElementId.set(input.elementId, elementInputs);\n }\n const conversionsByElement = new Map<string, ElementConversions>();\n const results: ConversionResult[] = [];\n const plansByInputId = new Map<string, PlannedConversion>();\n const plansByElementId = new Map<string, readonly PlannedConversion[]>();\n const contextsByElementId = new Map<string, ConversionContext>();\n\n for (const element of elements) {\n const elementInputs = inputsByElementId.get(element.id) ?? [];\n if (!elementInputs.length) continue;\n const parent = element.parentId ? elementById.get(element.parentId) : undefined;\n const literalClass = literalClassAttribute(element);\n const existingClassNames = literalClass?.value.split(/\\s+/).filter(Boolean) ?? [];\n const context: ConversionContext = {\n element,\n inputs: elementInputs,\n existingClassNames,\n attributeEvidence: element.attributes,\n ...(parent\n ? { parent, parentInputs: inputsByElementId.get(parent.id) ?? [] }\n : { parentInputs: [] as readonly LocatedFlexLayoutInput[] }),\n };\n let plans =\n adapter.planElement?.(elementInputs, context) ?? elementInputs.map(input => adapter.plan(input, context));\n const hasBoundClass = element.attributes.some(isBoundClassAttribute);\n if (hasBoundClass) {\n plans = plans.map(plan =>\n plan.status === 'converted' && plan.classNames.length > 0 ? boundClassBlocked(plan.input) : plan,\n );\n }\n plans = adapter.resolveClassConflicts?.(plans, existingClassNames) ?? plans;\n contextsByElementId.set(element.id, context);\n plansByElementId.set(element.id, plans);\n for (const planned of plans) plansByInputId.set(planned.input.id, planned);\n }\n\n if (adapter.closePlanDependencies) {\n for (const element of elements) {\n const plans = plansByElementId.get(element.id);\n const context = contextsByElementId.get(element.id);\n if (!plans || !context) continue;\n const closedPlans = adapter.closePlanDependencies(plans, context, plansByInputId);\n for (const planned of closedPlans) plansByInputId.set(planned.input.id, planned);\n }\n }\n\n for (const input of inputs) {\n const element = elementById.get(input.elementId);\n if (!element) continue;\n const planned = plansByInputId.get(input.id);\n if (!planned) continue;\n\n if (planned.status !== 'converted') {\n results.push(planned);\n continue;\n }\n\n const conversion = conversionsByElement.get(element.id) ?? {\n element,\n inputs: [],\n classPlans: [],\n };\n conversion.inputs.push(input);\n conversion.classPlans.push({ input, classNames: planned.classNames });\n conversionsByElement.set(element.id, conversion);\n results.push({ status: 'converted', input });\n }\n\n const edits: SourceEdit[] = [];\n for (const conversion of conversionsByElement.values()) {\n const generatedClassNames = [...conversion.classPlans]\n .sort(\n (left, right) =>\n (directiveOrder.get(left.input.directive) ?? Number.MAX_SAFE_INTEGER) -\n (directiveOrder.get(right.input.directive) ?? Number.MAX_SAFE_INTEGER) ||\n (left.input.breakpoint ?? '').localeCompare(right.input.breakpoint ?? '') ||\n left.input.source.start - right.input.source.start,\n )\n .flatMap(plan => plan.classNames);\n edits.push(\n ...conversion.inputs.map(input => ({\n range: removalRange(source, input),\n text: '',\n inputId: input.id,\n })),\n );\n\n const classEdit = appendLiteralClassNames(\n source,\n conversion.element,\n literalClassAttribute(conversion.element),\n generatedClassNames,\n `${conversion.element.id}:classes`,\n );\n if (classEdit !== undefined) edits.push(classEdit);\n }\n\n return { edits, results };\n }\n}\n","import {\n BindingType,\n parseTemplate,\n TmplAstBoundAttribute,\n TmplAstElement,\n TmplAstRecursiveVisitor,\n TmplAstTextAttribute,\n tmplAstVisitAll,\n} from '@angular/compiler';\nimport { SourceRange, TemplateAttribute, TemplateElement, TemplateParseResult } from './template.model';\n\nfunction range(start: number, end: number): SourceRange {\n return { start, end };\n}\n\nfunction attributeNameRange(source: string, attribute: TmplAstTextAttribute | TmplAstBoundAttribute): SourceRange {\n const start = attribute.sourceSpan.start.offset;\n const rawAttribute = source.slice(start, attribute.sourceSpan.end.offset);\n const equalsIndex = rawAttribute.indexOf('=');\n const rawName = (equalsIndex === -1 ? rawAttribute : rawAttribute.slice(0, equalsIndex)).trimEnd();\n return range(start, start + rawName.length);\n}\n\nfunction normalizeAttribute(\n source: string,\n attribute: TmplAstTextAttribute | TmplAstBoundAttribute,\n binding: TemplateAttribute['binding'],\n): TemplateAttribute {\n const nameSource = attributeNameRange(source, attribute);\n const valueSource = attribute.valueSpan\n ? range(attribute.valueSpan.start.offset, attribute.valueSpan.end.offset)\n : undefined;\n const rawValue = valueSource ? source.slice(valueSource.start, valueSource.end) : '';\n\n return {\n name: attribute.name,\n rawName: source.slice(nameSource.start, nameSource.end),\n rawValue,\n value: attribute instanceof TmplAstTextAttribute ? attribute.value : rawValue,\n binding,\n ...(attribute instanceof TmplAstBoundAttribute ? { bindingTarget: boundTarget(attribute.type) } : {}),\n source: range(attribute.sourceSpan.start.offset, attribute.sourceSpan.end.offset),\n nameSource,\n ...(valueSource ? { valueSource } : {}),\n };\n}\n\nfunction boundTarget(type: BindingType): NonNullable<TemplateAttribute['bindingTarget']> {\n switch (type) {\n case BindingType.Attribute:\n return 'attribute';\n case BindingType.Class:\n return 'class';\n case BindingType.Style:\n return 'style';\n case BindingType.LegacyAnimation:\n case BindingType.Animation:\n return 'animation';\n case BindingType.TwoWay:\n return 'two-way';\n case BindingType.Property:\n default:\n return 'property';\n }\n}\n\nclass ElementCollector extends TmplAstRecursiveVisitor {\n readonly elements: TemplateElement[] = [];\n private readonly parents: string[] = [];\n\n constructor(private readonly source: string) {\n super();\n }\n\n override visitElement(element: TmplAstElement): void {\n const id = String(element.sourceSpan.start.offset);\n const attributes = [\n ...element.attributes.map(attribute => normalizeAttribute(this.source, attribute, 'literal')),\n ...element.inputs.map(attribute => normalizeAttribute(this.source, attribute, 'property')),\n ].sort((left, right) => left.source.start - right.source.start);\n\n this.elements.push({\n id,\n name: element.name,\n startTag: range(element.startSourceSpan.start.offset, element.startSourceSpan.end.offset),\n attributes,\n ...(this.parents.at(-1) ? { parentId: this.parents.at(-1) } : {}),\n });\n\n this.parents.push(id);\n super.visitElement(element);\n this.parents.pop();\n }\n}\n\nexport class AngularTemplateParser {\n parse(source: string, fileName: string): TemplateParseResult {\n const parsed = parseTemplate(source, fileName, {\n enableBlockSyntax: true,\n preserveLineEndings: true,\n preserveWhitespaces: true,\n });\n\n if (parsed.errors?.length) {\n return {\n status: 'parse-error',\n diagnostics: parsed.errors.map(error => ({\n message: error.msg,\n source: range(error.span.start.offset, error.span.end.offset),\n })),\n };\n }\n\n const collector = new ElementCollector(source);\n tmplAstVisitAll(collector, parsed.nodes);\n return { status: 'parsed', elements: collector.elements };\n }\n}\n","import type { ConversionResult } from '../analyzer/conversion-result';\n\nexport interface IMigrator<TResult = readonly ConversionResult[]> {\n migrate(): Promise<TResult>;\n}\n\nabstract class BaseMigrator<TResult = readonly ConversionResult[]> implements IMigrator<TResult> {\n /**\n * Migrates the file. This method should be implemented by the subclass.\n */\n public abstract migrate(): Promise<TResult>;\n}\n\nexport { BaseMigrator };\n","import { readdir, stat } from 'node:fs/promises';\nimport * as path from 'node:path';\nimport type { ConversionAdapter } from '../adapter/conversion-adapter';\nimport { shouldIgnore } from '../lib/gitignore.helper';\nimport { logger } from '../logger';\nimport { compareCodeUnits } from '../util/compare-code-units';\nimport { BaseMigrator } from './base.migrator';\nimport type { FileMigrationOptions, FileMigrationResult } from './file-migration-result';\nimport { FileMigrator } from './file.migrator';\n\ninterface FileEntry {\n readonly input: string;\n readonly relativePath: string;\n}\n\nexport class FolderMigrator extends BaseMigrator<readonly FileMigrationResult[]> {\n constructor(\n private readonly adapter: ConversionAdapter,\n private readonly inputFolder: string,\n private readonly outputFolder: string,\n ) {\n super();\n }\n\n public async migrate(options: FileMigrationOptions = { write: true }): Promise<readonly FileMigrationResult[]> {\n const files = await this.collectFiles(this.inputFolder, '');\n files.sort((left, right) => compareCodeUnits(path.normalize(left.input), path.normalize(right.input)));\n\n const results: FileMigrationResult[] = [];\n for (const file of files) {\n const output = path.join(this.outputFolder, file.relativePath);\n const fileMigrator = new FileMigrator(this.adapter, file.input, output);\n results.push(await fileMigrator.migrate(options));\n }\n\n return results;\n }\n\n private async collectFiles(directory: string, relativeDirectory: string): Promise<FileEntry[]> {\n const names = await readdir(directory);\n names.sort(compareCodeUnits);\n const files: FileEntry[] = [];\n\n for (const name of names) {\n const input = path.join(directory, name);\n logger.debug(`Processing ${input}`);\n if (shouldIgnore(this.inputFolder, input)) continue;\n\n const inputStat = await stat(input);\n if (inputStat.isDirectory()) {\n files.push(...(await this.collectFiles(input, path.join(relativeDirectory, name))));\n } else if (inputStat.isFile() && path.extname(name).toLowerCase() === '.html') {\n files.push({ input, relativePath: path.join(relativeDirectory, name) });\n }\n }\n\n return files;\n }\n}\n","import { AtomicFileWriter } from '../lib/atomic-file.writer';\nimport type { MigrationReport } from './migration-report';\n\ntype ReportFileWriter = Pick<AtomicFileWriter, 'write'>;\n\nexport class JsonReportWriter {\n constructor(private readonly writer: ReportFileWriter = new AtomicFileWriter()) {}\n\n public async write(path: string, report: MigrationReport): Promise<void> {\n const contents = `${JSON.stringify(report, null, 2)}\\n`;\n await this.writer.write(path, contents);\n }\n}\n","import type { MigrationReport, ReportResult } from './migration-report';\n\nexport interface TextOutput {\n write(text: string): void;\n readonly isTTY?: boolean;\n}\n\nexport class TerminalPresenter {\n public present(report: MigrationReport, output: TextOutput): void {\n const { summary } = report;\n const outcome = `${summary.filesScanned} files scanned, ${summary.filesChanged} ${\n report.dryRun ? 'would change' : 'changed'\n }`;\n const totals = `Converted ${summary.converted} | Review ${summary.review} | Unsupported ${summary.unsupported} | Invalid ${summary.invalid} | Parse errors ${summary.parseErrors}`;\n const diagnostics = report.files.flatMap(file =>\n file.results\n .filter((result): result is Exclude<ReportResult, { status: 'converted' }> => result.status !== 'converted')\n .map(result => `${file.path}:${result.offset} [${result.code}] ${result.reason}`),\n );\n\n output.write([report.dryRun ? `Dry run: ${outcome}` : outcome, totals, ...diagnostics, ''].join('\\n'));\n }\n}\n","type ErrorWithMessage = {\n message: string;\n};\n\n/**\n * Returns true if the error object has a message property. Otherwise false.\n * @param error error object or any other object\n * @returns true if the error object has a message property. Otherwise false.\n */\nfunction isErrorWithMessage(error: unknown): error is ErrorWithMessage {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'message' in error &&\n typeof (error as Record<string, unknown>).message === 'string'\n );\n}\n\n/**\n * Returns an error object with a message. If the error object is not an error, it will be converted to an error object.\n * @param maybeError error object or any other object\n * @returns error object\n */\nfunction toErrorWithMessage(maybeError: unknown): ErrorWithMessage {\n if (isErrorWithMessage(maybeError)) return maybeError;\n\n try {\n return new Error(JSON.stringify(maybeError));\n } catch {\n // fallback in case there's an error stringifying the maybeError\n // like with circular references for example.\n return new Error(String(maybeError));\n }\n}\n\n/**\n * Returns the error message from an error object. If the error object is not an error, it will be converted to an error object.\n * @param error error object or any other object\n * @returns error message\n */\nfunction getErrorMessage(error: unknown) {\n return toErrorWithMessage(error).message;\n}\n\nexport { getErrorMessage };\n","import type { MigrationReport } from '../report/migration-report';\n\nexport function resolveExitCode(report: MigrationReport, allowUnresolved: boolean): 0 | 1 | 2 {\n if (report.summary.parseErrors > 0) return 1;\n\n const hasUnresolved = report.summary.review > 0 || report.summary.unsupported > 0 || report.summary.invalid > 0;\n\n return hasUnresolved && !allowUnresolved ? 2 : 0;\n}\n","import path from 'node:path';\n\nexport function validateReportPath(reportPath: string): void {\n if (reportPath.trim().length === 0) {\n throw new Error('Report path must not be empty.');\n }\n\n if (path.extname(reportPath).toLowerCase() !== '.json') {\n throw new Error('Report path must have a .json extension.');\n }\n}\n","import { runCli } from './cli/run-cli';\nimport { getErrorMessage } from './util/error.util';\n\nasync function main(): Promise<void> {\n process.exitCode = await runCli(process.argv);\n}\n\nvoid main().catch((error: unknown) => {\n process.stderr.write(`Error: ${getErrorMessage(error)}\\n`);\n process.exitCode = 1;\n});\n"],"mappings":"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EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,oCAAoC,oBAAI,IAAI;AAAA,EAChD;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","names":["range","path","timestamp","values","main","property","arbitraryValue","closingByOpening","property","range","range","values","mediaRange","activation","numericRange","range","rangesCover","contextUnverified","contextUnverified","compareText","property","stateRange","customProperty","property","values","dynamicBinding","unresolvedBreakpoint","contextUnverified","responsivePrecedenceUnverified","compareText","textSizes","values","property","cssProperties","activation","numericRange","range","rangesCover","arbitraryValue","property","contextUnverified","interpolation","compareText","property","extendedClassDirectives","extendedStyleDirectives","extendedDirectives","activationRange","activation","numericRange","range","rangesCover","contextUnverified","candidate","property","extendedClassDirectives","extendedStyleDirectives","extendedDirectives","contextUnverified","equalClassValues","familyPlan","stat","path","ignore","path","values","path","isBoundClassAttribute","diagnostic","path","stat","path","path"]}
1
+ {"version":3,"sources":["../src/cli/run-cli.ts","../package.json","../src/logger.ts","../src/analyzer/flex-layout.catalog.ts","../src/util/sha-256.ts","../src/adapter/css/css-invariant.error.ts","../src/util/compare-code-units.ts","../src/adapter/css/css-rule-order.ts","../src/adapter/css/css-artifact.registry.ts","../src/adapter/css/css-breakpoint.context.ts","../src/adapter/css/flex/flex-align.css-renderer.ts","../src/adapter/css/flex/flex-fill.css-renderer.ts","../src/adapter/css/flex/flex-item.css-renderer.ts","../src/adapter/css/flex/flex-offset.css-renderer.ts","../src/adapter/css/flex/flex-order.css-renderer.ts","../src/adapter/css/flex/layout.css-renderer.ts","../src/adapter/css/flex/layout-align.css-renderer.ts","../src/adapter/css/flex/layout-gap.css-renderer.ts","../src/render/css/css.renderer.ts","../src/migrator/migration-application.error.ts","../src/edit/html-attribute-value.ts","../src/adapter/tailwind/extended/tailwind-arbitrary-property.encoder.ts","../src/breakpoint/breakpoint-catalog.ts","../src/adapter/tailwind/tailwind-arbitrary-syntax.ts","../src/semantic/css-property-ownership.ts","../src/adapter/tailwind/extended/tailwind-arbitrary-value-ownership.ts","../src/adapter/tailwind/tailwind-class-conflict.ts","../src/adapter/tailwind/extended/tailwind-candidate-classifier.ts","../src/evidence/tailwind-source-property.evidence.ts","../src/flex/flex-align.semantic.ts","../src/adapter/tailwind/directives/flex-align.strategy.ts","../src/flex/flex-fill.semantic.ts","../src/adapter/tailwind/directives/flex-fill.strategy.ts","../src/flex/css-length.ts","../src/flex/layout.semantic.ts","../src/flex/flex-item.semantic.ts","../src/adapter/tailwind/directives/flex-item.strategy.ts","../src/flex/flex-offset.semantic.ts","../src/adapter/tailwind/tailwind-value.parser.ts","../src/adapter/tailwind/directives/flex-offset.strategy.ts","../src/flex/flex-order.semantic.ts","../src/adapter/tailwind/directives/flex-order.strategy.ts","../src/flex/layout-align.semantic.ts","../src/adapter/tailwind/directives/layout.strategy.ts","../src/adapter/tailwind/directives/layout-align.strategy.ts","../src/flex/layout-gap.semantic.ts","../src/adapter/tailwind/directives/layout-gap.strategy.ts","../src/adapter/tailwind/responsive-variant.emitter.ts","../src/adapter/tailwind/extended/extended-responsive.emitter.ts","../src/adapter/tailwind/grid/tailwind-grid.renderer.ts","../src/adapter/tailwind/visibility/visibility.emitter.ts","../src/semantic/semantic-plan.ts","../src/render/tailwind/tailwind.renderer.ts","../src/render/render-session.ts","../src/adapter/adapter.factory.ts","../src/pipeline/analyze/analyze-project.stage.ts","../src/analyzer/flex-layout-attribute.analyzer.ts","../src/analyzer/template.analyzer.ts","../src/template/angular-template.parser.ts","../src/pipeline/analyzed-project.ts","../src/pipeline/project-manifest.ts","../src/transaction/transaction-unit.state.ts","../src/transaction/cleanup.unit.ts","../src/transaction/commit.unit.ts","../src/transaction/rollback.unit.ts","../src/transaction/staging.unit.ts","../src/transaction/transaction-signal.registrar.ts","../src/transaction/transaction-unit.session.ts","../src/transaction/migration-transaction.ts","../src/pipeline/applied-project.ts","../src/pipeline/apply/apply-project.stage.ts","../src/pipeline/discover/discover-project.stage.ts","../src/lib/gitignore.helper.ts","../src/pipeline/pipeline-stage.error.ts","../src/pipeline/migration-pipeline.ts","../src/report/migration-report.builder.ts","../src/pipeline/invocation-error-path.mapper.ts","../src/pipeline/migration-runner.ts","../src/template/template-attribute.ts","../src/image/srcset-value.ts","../src/image/responsive-image.planner.ts","../src/edit/source-editor.ts","../src/image/html-attribute.encoder.ts","../src/image/picture.renderer.ts","../src/grid/grid-value.parser.ts","../src/semantic/extended/responsive-style-value.parser.ts","../src/semantic/extended/extended-family.planner.ts","../src/semantic/literal-style-declaration.ts","../src/semantic/extended/responsive-class-value.parser.ts","../src/semantic/extended/extended-semantic.planner.ts","../src/semantic/semantic-family-composition.planner.ts","../src/semantic/responsive-family.planner.ts","../src/semantic/source-property-evidence.ts","../src/semantic/visibility/visibility-value.parser.ts","../src/semantic/visibility/visibility-state.planner.ts","../src/semantic/element-semantic.planner.ts","../src/planner/semantic-render.coordinator.ts","../src/planner/conversion-planner.ts","../src/pipeline/rendered-project.ts","../src/pipeline/render/render-project.stage.ts","../src/pipeline/validate/validate-project.stage.ts","../src/migrator/migration-plan.ts","../src/migrator/file-migration-result.ts","../src/migrator/migration-path.validator.ts","../src/migrator/stylesheet.planner.ts","../src/adapter/css/stylesheet/css-stylesheet.error.ts","../src/adapter/css/stylesheet/css-comment.scanner.ts","../src/adapter/css/stylesheet/owned-css-block.parser.ts","../src/adapter/css/stylesheet/css-artifact.validator.ts","../src/adapter/css/stylesheet/css-media.serializer.ts","../src/adapter/css/stylesheet/css-rule.serializer.ts","../src/adapter/css/stylesheet/owned-css-block.serializer.ts","../src/adapter/css/stylesheet/owned-stylesheet.merger.ts","../src/migrator/stylesheet-contents.ts","../src/pipeline/validated-project-plan.ts","../src/pipeline/validate/css-reference.collector.ts","../src/migrator/destination-template-source.ts","../src/pipeline/validate/template-proposal.validator.ts","../src/lib/atomic-file.writer.ts","../src/report/json-report.writer.ts","../src/report/terminal.presenter.ts","../src/util/error.util.ts","../src/cli/exit-policy.ts","../src/cli/report-path.validator.ts","../src/config/breakpoint-migration-config.ts","../src/cli/stylesheet-path.validator.ts","../src/cli/migration-mode.parser.ts","../src/main.ts"],"sourcesContent":["import { Command, CommanderError, InvalidArgumentError, Option } from 'commander';\nimport * as path from 'node:path';\nimport packageJson from '../../package.json' with { type: 'json' };\nimport { AdapterFactory } from '../adapter/adapter.factory';\nimport { logger } from '../logger';\nimport { AnalyzeProjectStage } from '../pipeline/analyze/analyze-project.stage';\nimport { ApplyProjectStage } from '../pipeline/apply/apply-project.stage';\nimport { DiscoverProjectStage } from '../pipeline/discover/discover-project.stage';\nimport { MigrationPipeline } from '../pipeline/migration-pipeline';\nimport { MigrationRunner } from '../pipeline/migration-runner';\nimport { migrationInvocation } from '../pipeline/project-manifest';\nimport { RenderProjectStage } from '../pipeline/render/render-project.stage';\nimport { ValidateProjectStage } from '../pipeline/validate/validate-project.stage';\nimport { JsonReportWriter } from '../report/json-report.writer';\nimport { TerminalPresenter, type TextOutput } from '../report/terminal.presenter';\nimport { getErrorMessage } from '../util/error.util';\nimport { resolveExitCode } from './exit-policy';\nimport { validateReportPath } from './report-path.validator';\nimport { parsePrintWithBreakpoints } from '../config/breakpoint-migration-config';\nimport { validateStylesheetPath } from './stylesheet-path.validator';\nimport { resolveMigrationMode } from './migration-mode.parser';\n\ninterface ProgramOptions {\n readonly output?: string;\n readonly target: string;\n readonly write: boolean;\n readonly report?: string;\n readonly stylesheet?: string;\n readonly allowUnresolved: boolean;\n readonly debug: boolean;\n readonly orientationBreakpoints: boolean;\n readonly responsiveImages: boolean;\n readonly printWithBreakpoints?: string;\n}\n\nexport interface CliOutput {\n readonly stdout: TextOutput;\n readonly stderr: TextOutput;\n}\n\nexport interface RunCliDependencies {\n readonly createMigrationRunner?: (pipeline: MigrationPipeline) => Pick<MigrationRunner, 'run'>;\n}\n\nconst processOutput: CliOutput = {\n stdout: process.stdout,\n stderr: process.stderr,\n};\n\nfunction parseSingleStylesheet(value: string, previous: string | undefined): string {\n if (previous !== undefined) throw new InvalidArgumentError('--stylesheet may only be specified once.');\n return value;\n}\n\nexport async function runCli(\n argv: readonly string[],\n output: CliOutput = processOutput,\n dependencies: RunCliDependencies = {},\n): Promise<0 | 1 | 2> {\n let exitCode: 0 | 1 | 2 = 0;\n let debug = false;\n const program = new Command();\n\n program\n .name('flex-layout-codemod')\n .version(packageJson.version)\n .description('Plan Angular Flex-Layout migrations by default; use --write to apply')\n .exitOverride()\n .configureOutput({\n writeOut: text => output.stdout.write(text),\n writeErr: text => output.stderr.write(text),\n })\n .argument('<input>', 'input HTML file or folder')\n .option(\n '-o, --output <path>',\n 'planned output HTML file or folder; single-file output must end in .html; defaults to input',\n )\n .addOption(\n new Option('-t, --target <target>', 'conversion target; css requires --stylesheet')\n .choices(['tailwind', 'css'])\n .default('tailwind'),\n )\n .addOption(\n new Option('--stylesheet <path>', 'companion stylesheet; required when --target css').argParser(\n parseSingleStylesheet,\n ),\n )\n .option('--write', 'apply the validated migration plan', false)\n .option('--report <path>', 'atomically write a JSON report; path must end in .json')\n .option('--allow-unresolved', 'return success when unresolved inputs remain', false)\n .option('--orientation-breakpoints', 'confirm the source enables the archived orientation breakpoints', false)\n .option(\n '--responsive-images',\n 'wrap eligible responsive images in picture elements; acknowledges selector and layout risk',\n false,\n )\n .option(\n '--print-with-breakpoints <aliases>',\n 'confirm the source printWithBreakpoints list; comma-separated aliases or none',\n )\n .option('-d, --debug', 'enable debug logging', false)\n .action(async (input: string, options: ProgramOptions) => {\n const mode = resolveMigrationMode(argv, options.write);\n debug = options.debug;\n logger.level = debug ? 'debug' : 'warn';\n\n const destination = options.output ?? input;\n let reportPath: string | undefined;\n if (options.report !== undefined) {\n validateReportPath(options.report);\n reportPath = path.resolve(options.report);\n }\n const stylesheetPath = await validateStylesheetPath({\n target: options.target,\n stylesheetPath: options.stylesheet,\n inputPath: input,\n outputPath: destination,\n reportPath,\n });\n const printWithBreakpoints =\n options.printWithBreakpoints === undefined\n ? undefined\n : parsePrintWithBreakpoints(options.printWithBreakpoints, options.orientationBreakpoints);\n const session = AdapterFactory.createRenderSession(options.target, {\n orientationBreakpoints: options.orientationBreakpoints,\n printWithBreakpoints,\n });\n const render = new RenderProjectStage(session);\n const pipeline = new MigrationPipeline(\n new DiscoverProjectStage(),\n new AnalyzeProjectStage(),\n render,\n new ValidateProjectStage(),\n new ApplyProjectStage(mode),\n );\n const migrationRunner =\n dependencies.createMigrationRunner === undefined\n ? new MigrationRunner(pipeline)\n : dependencies.createMigrationRunner(pipeline);\n const report = await migrationRunner.run(\n migrationInvocation({\n inputPath: input,\n outputPath: destination,\n options: {\n mode,\n responsiveImages: options.responsiveImages,\n stylesheetPath,\n stylesheetPathInput: options.stylesheet,\n reportPath,\n },\n }),\n );\n const reportOutput = report.summary.parseErrors > 0 ? output.stderr : output.stdout;\n\n new TerminalPresenter().present(report, reportOutput);\n if (reportPath !== undefined) {\n await new JsonReportWriter().write(reportPath, report, {\n protectedPaths: stylesheetPath === undefined ? [] : [stylesheetPath],\n });\n }\n\n exitCode = resolveExitCode(report, options.allowUnresolved);\n });\n\n try {\n resolveMigrationMode(argv, false);\n await program.parseAsync([...argv]);\n return exitCode;\n } catch (error: unknown) {\n if (error instanceof CommanderError) {\n return error.exitCode === 0 ? 0 : 1;\n }\n\n output.stderr.write(`Error: ${getErrorMessage(error)}\\n`);\n if (debug && error instanceof Error && error.stack) {\n output.stderr.write(`${error.stack}\\n`);\n }\n return 1;\n }\n}\n","{\n \"name\": \"@nipe-solutions/flex-layout-codemod\",\n \"version\": \"2.0.0-beta.3\",\n \"description\": \"A safety-first codemod for migrating Angular Flex-Layout templates to native CSS or Tailwind CSS.\",\n \"type\": \"module\",\n \"engines\": {\n \"node\": \">=24\"\n },\n \"packageManager\": \"npm@11.19.0\",\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\",\n \"CHANGELOG.md\"\n ],\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"scripts\": {\n \"architecture:inventory\": \"node scripts/architecture-inventory.mjs\",\n \"benchmark:architecture\": \"node scripts/benchmark/architecture-benchmark.mjs\",\n \"benchmark:architecture:prepare\": \"npm run build\",\n \"clean\": \"rimraf dist coverage\",\n \"build\": \"tsup\",\n \"build:website\": \"vite build --config vite.website.config.ts && node scripts/generate-website-route-html.mjs\",\n \"generate:website-assets\": \"node scripts/generate-website-assets.mjs\",\n \"dev:website\": \"vite --config vite.website.config.ts\",\n \"typecheck\": \"tsc --noEmit\",\n \"typecheck:website\": \"tsc --noEmit --project website/tsconfig.json\",\n \"start\": \"ts-node ./src/main.ts\",\n \"test\": \"vitest run\",\n \"test:website\": \"vitest run --config vite.website.config.ts\",\n \"test:e2e:website\": \"playwright test --config playwright.website.config.ts\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage\",\n \"lint\": \"eslint .\",\n \"lint:fix\": \"eslint . --fix\",\n \"format\": \"prettier --check .\",\n \"format:write\": \"prettier --write .\",\n \"verify\": \"npm run format && npm run lint && npm run typecheck && npm run test:coverage && npm run build && npm run package:check\",\n \"verify:website\": \"npm run format && npm run lint && npm run test:website && npm run typecheck:website && npm run verify:website-assets && npm run verify:docs && npm run build:website && npm run verify:website-static && npm run test:e2e:website\",\n \"verify:docs\": \"node scripts/verify-documentation-contract.mjs\",\n \"verify:website-static\": \"node scripts/verify-website-static.mjs\",\n \"package:check\": \"node scripts/verify-package.mjs\",\n \"changeset\": \"changeset add\",\n \"version-packages\": \"changeset version\",\n \"release:prepare\": \"node scripts/release-artifact.mjs\",\n \"release:verify\": \"node scripts/release-artifact.mjs --verify-retained\",\n \"verify:website-assets\": \"node scripts/verify-website-assets.mjs\",\n \"release:version\": \"changeset version && npm install --package-lock-only --ignore-scripts --no-audit --no-fund\",\n \"prepare\": \"husky\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/NIPE-Solutions/flex-layout-migrator.git\"\n },\n \"keywords\": [\n \"angular\",\n \"codemod\",\n \"documentation\",\n \"flex-layout\",\n \"migration\",\n \"tailwindcss\"\n ],\n \"author\": \"Nicholas Petrasek\",\n \"license\": \"MIT\",\n \"bugs\": {\n \"url\": \"https://github.com/NIPE-Solutions/flex-layout-migrator/issues\"\n },\n \"homepage\": \"https://angular-flex-layout-codemod.nipesolutions.com\",\n \"dependencies\": {\n \"@angular/compiler\": \"21.2.22\",\n \"commander\": \"^15.0.0\",\n \"fs-extra\": \"^11.4.0\",\n \"ignore\": \"5.2.4\",\n \"winston\": \"^3.19.0\"\n },\n \"bin\": {\n \"flex-layout-codemod\": \"./dist/cli.js\"\n },\n \"devDependencies\": {\n \"@axe-core/playwright\": \"^4.13.0\",\n \"@changesets/cli\": \"^3.0.1\",\n \"@eslint/js\": \"^10.0.1\",\n \"@playwright/test\": \"^1.63.0\",\n \"@tailwindcss/cli\": \"4.3.3\",\n \"@testing-library/jest-dom\": \"^7.0.1\",\n \"@testing-library/react\": \"^16.3.3\",\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/mock-fs\": \"^4.13.4\",\n \"@types/node\": \"^26.4.0\",\n \"@types/react\": \"^19.2.18\",\n \"@types/react-dom\": \"^19.2.7\",\n \"@vitejs/plugin-react\": \"^6.1.1\",\n \"@vitest/coverage-v8\": \"^4.1.11\",\n \"axe-core\": \"^4.13.0\",\n \"eslint\": \"^10.9.1\",\n \"eslint-config-prettier\": \"^10.1.8\",\n \"husky\": \"^9.1.7\",\n \"jsdom\": \"^30.0.1\",\n \"lint-staged\": \"^17.4.1\",\n \"mock-fs\": \"^5.5.0\",\n \"postcss\": \"^8.5.26\",\n \"prettier\": \"^3.9.6\",\n \"react\": \"^19.2.8\",\n \"react-dom\": \"^19.2.8\",\n \"rimraf\": \"^6.1.3\",\n \"tailwindcss\": \"4.3.3\",\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"^6.0.3\",\n \"typescript-eslint\": \"^8.68.0\",\n \"vite\": \"^8.2.2\",\n \"vitest\": \"^4.1.11\",\n \"yaml\": \"^2.9.0\"\n },\n \"husky\": {\n \"hooks\": {\n \"pre-commit\": \"lint-staged\"\n }\n },\n \"lint-staged\": {\n \"*.{js,mjs,ts}\": [\n \"eslint --fix\",\n \"prettier --write\"\n ],\n \"*.{json,md,yml,yaml}\": [\n \"prettier --write\"\n ]\n }\n}\n","import { createLogger, format, transports } from 'winston';\n\nconst { combine, timestamp, printf, colorize, splat } = format;\n\nconst myFormat = printf(({ timestamp, level, message, label, lineNumber }) => {\n const timestampValue =\n typeof timestamp === 'string' || typeof timestamp === 'number' || timestamp instanceof Date\n ? timestamp\n : Date.now();\n const formattedTimestamp = new Date(timestampValue)\n .toISOString()\n .replace('T', ' ')\n .replace(/\\.\\d{3}Z$/, 'Z');\n const fileLineInfo = label && lineNumber ? `(${label}:${lineNumber})` : '';\n return `[${formattedTimestamp}] ${level}: ${message} ${fileLineInfo}`;\n});\n\nexport const logger = createLogger({\n level: 'info',\n format: combine(splat(), colorize(), timestamp(), myFormat),\n transports: [new transports.Console()],\n});\n","export const FLEX_LAYOUT_DIRECTIVES = [\n 'fxLayout',\n 'fxLayoutAlign',\n 'fxLayoutGap',\n 'fxFlex',\n 'fxGrow',\n 'fxShrink',\n 'fxFlexAlign',\n 'fxFlexFill',\n 'fxFill',\n 'fxFlexOffset',\n 'fxFlexOrder',\n 'fxShow',\n 'fxHide',\n 'gdAlignColumns',\n 'gdAlignRows',\n 'gdArea',\n 'gdAreas',\n 'gdAuto',\n 'gdColumn',\n 'gdColumns',\n 'gdGap',\n 'gdGridAlign',\n 'gdInline',\n 'gdRow',\n 'gdRows',\n 'class',\n 'ngClass',\n 'style',\n 'ngStyle',\n 'imgSrc',\n] as const;\n\nexport type FlexLayoutDirective = (typeof FLEX_LAYOUT_DIRECTIVES)[number];\n\nexport const DEFAULT_BREAKPOINTS = [\n 'xs',\n 'sm',\n 'md',\n 'lg',\n 'xl',\n 'lt-sm',\n 'lt-md',\n 'lt-lg',\n 'lt-xl',\n 'gt-xs',\n 'gt-sm',\n 'gt-md',\n 'gt-lg',\n] as const;\n\nexport type DefaultBreakpoint = (typeof DEFAULT_BREAKPOINTS)[number];\n\nexport const ORIENTATION_BREAKPOINTS = [\n 'handset',\n 'handset.portrait',\n 'handset.landscape',\n 'tablet',\n 'tablet.portrait',\n 'tablet.landscape',\n 'web',\n 'web.portrait',\n 'web.landscape',\n] as const;\n\nexport const SPECIAL_BREAKPOINTS = ['print'] as const;\n\nexport type KnownBreakpoint =\n DefaultBreakpoint | (typeof ORIENTATION_BREAKPOINTS)[number] | (typeof SPECIAL_BREAKPOINTS)[number];\n\nconst directiveNames = new Set<string>(FLEX_LAYOUT_DIRECTIVES);\nconst breakpointNames = new Set<string>([...DEFAULT_BREAKPOINTS, ...ORIENTATION_BREAKPOINTS, ...SPECIAL_BREAKPOINTS]);\n\nexport function isFlexLayoutDirective(value: string): value is FlexLayoutDirective {\n return directiveNames.has(value);\n}\n\nexport function isKnownBreakpoint(value: string): value is KnownBreakpoint {\n return breakpointNames.has(value);\n}\n","const ROUND_CONSTANTS = Object.freeze([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98,\n 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,\n 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8,\n 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,\n 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7,\n 0xc67178f2,\n]);\n\nconst INITIAL_HASH = Object.freeze([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n\nexport function sha256(value: string): string {\n const source = new TextEncoder().encode(value);\n const paddedLength = Math.ceil((source.length + 9) / 64) * 64;\n const bytes = new Uint8Array(paddedLength);\n bytes.set(source);\n bytes[source.length] = 0x80;\n const bitLength = source.length * 8;\n const view = new DataView(bytes.buffer);\n view.setUint32(paddedLength - 8, Math.floor(bitLength / 0x1_0000_0000));\n view.setUint32(paddedLength - 4, bitLength >>> 0);\n\n const hash = [...INITIAL_HASH];\n const schedule = new Uint32Array(64);\n for (let offset = 0; offset < bytes.length; offset += 64) {\n for (let index = 0; index < 16; index += 1) schedule[index] = view.getUint32(offset + index * 4);\n for (let index = 16; index < schedule.length; index += 1) {\n const earlier = schedule[index - 15]!;\n const recent = schedule[index - 2]!;\n const sigma0 = rotateRight(earlier, 7) ^ rotateRight(earlier, 18) ^ (earlier >>> 3);\n const sigma1 = rotateRight(recent, 17) ^ rotateRight(recent, 19) ^ (recent >>> 10);\n schedule[index] = (schedule[index - 16]! + sigma0 + schedule[index - 7]! + sigma1) >>> 0;\n }\n\n let [a, b, c, d, e, f, g, h] = hash as [number, number, number, number, number, number, number, number];\n for (let index = 0; index < schedule.length; index += 1) {\n const sum1 = rotateRight(e, 6) ^ rotateRight(e, 11) ^ rotateRight(e, 25);\n const choice = (e & f) ^ (~e & g);\n const temporary1 = (h + sum1 + choice + ROUND_CONSTANTS[index]! + schedule[index]!) >>> 0;\n const sum0 = rotateRight(a, 2) ^ rotateRight(a, 13) ^ rotateRight(a, 22);\n const majority = (a & b) ^ (a & c) ^ (b & c);\n const temporary2 = (sum0 + majority) >>> 0;\n h = g;\n g = f;\n f = e;\n e = (d + temporary1) >>> 0;\n d = c;\n c = b;\n b = a;\n a = (temporary1 + temporary2) >>> 0;\n }\n\n const round = [a, b, c, d, e, f, g, h];\n for (let index = 0; index < hash.length; index += 1) hash[index] = (hash[index]! + round[index]!) >>> 0;\n }\n\n return hash.map(word => word.toString(16).padStart(8, '0')).join('');\n}\n\nfunction rotateRight(value: number, count: number): number {\n return (value >>> count) | (value << (32 - count));\n}\n","export class CssInvariantError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'CssInvariantError';\n }\n}\n","export function compareCodeUnits(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n","import type { OwnedCssRule } from './css-artifact.model';\nimport { compareCodeUnits } from '../../util/compare-code-units';\n\nexport function compareOwnedCssRules(left: OwnedCssRule, right: OwnedCssRule): number {\n const baseOrder = Number(left.context.media !== undefined) - Number(right.context.media !== undefined);\n if (baseOrder !== 0) return baseOrder;\n const priorityOrder = right.context.priority - left.context.priority;\n return priorityOrder || compareCodeUnits(left.id, right.id);\n}\n","import type { MediaDefinition } from '../../breakpoint/breakpoint-catalog';\nimport { sha256 } from '../../util/sha-256';\nimport { CssInvariantError } from './css-invariant.error';\nimport type { CssDeclaration, CssDigest, CssRuleContext, CssSemanticFamily, OwnedCssRule } from './css-artifact.model';\nimport { compareOwnedCssRules } from './css-rule-order';\n\nconst SHA_256_DIGEST = /^[a-f0-9]{64}$/;\n\nfunction freezeDeclarations(declarations: readonly CssDeclaration[]): readonly CssDeclaration[] {\n const properties = new Set<string>();\n\n for (const declaration of declarations) {\n if (properties.has(declaration.property)) {\n throw new CssInvariantError(`Duplicate CSS declaration property: ${declaration.property}`);\n }\n properties.add(declaration.property);\n }\n\n return Object.freeze(declarations.map(declaration => Object.freeze({ ...declaration })));\n}\n\nfunction assertFiniteMediaBounds(media: MediaDefinition): void {\n for (const clause of media.clauses) {\n for (const bound of [clause.min, clause.max]) {\n if (bound !== undefined && !Number.isFinite(bound)) {\n throw new CssInvariantError('CSS media bounds must be finite numbers');\n }\n }\n\n if (clause.min !== undefined && clause.max !== undefined && clause.min > clause.max) {\n throw new CssInvariantError('CSS media minimum bound must not exceed its maximum bound');\n }\n }\n}\n\nfunction freezeMedia(media: MediaDefinition): MediaDefinition {\n assertFiniteMediaBounds(media);\n return Object.freeze({\n type: media.type,\n clauses: Object.freeze(media.clauses.map(clause => Object.freeze({ ...clause }))),\n });\n}\n\nfunction freezeContext(context: CssRuleContext): CssRuleContext {\n if (!Number.isFinite(context.priority)) {\n throw new CssInvariantError('CSS rule priority must be a finite number');\n }\n\n if (context.media === undefined) {\n if (context.priority !== 0) {\n throw new CssInvariantError('CSS base rules must have priority 0');\n }\n return Object.freeze({ priority: context.priority });\n }\n\n return Object.freeze({ priority: context.priority, media: freezeMedia(context.media) });\n}\n\nfunction canonicalIdentity(\n family: CssSemanticFamily,\n declarations: readonly CssDeclaration[],\n context: CssRuleContext,\n): string {\n return JSON.stringify({\n schema: 1,\n family,\n declarations: declarations.map(({ property, value }) => [property, value]),\n media: context.media\n ? {\n type: context.media.type,\n clauses: context.media.clauses.map(({ min, max, orientation }) => [\n min ?? null,\n max ?? null,\n orientation ?? null,\n ]),\n }\n : null,\n priority: context.priority,\n });\n}\n\nexport class CssArtifactRegistry {\n private readonly rulesByCanonicalIdentity = new Map<string, OwnedCssRule>();\n private readonly canonicalIdentityByDigest = new Map<string, string>();\n private readonly registeredRules: OwnedCssRule[] = [];\n\n constructor(private readonly digest: CssDigest = sha256) {}\n\n register(\n family: CssSemanticFamily,\n declarations: readonly CssDeclaration[],\n context: CssRuleContext = { priority: 0 },\n ): OwnedCssRule {\n const frozenDeclarations = freezeDeclarations(declarations);\n const frozenContext = freezeContext(context);\n const identity = canonicalIdentity(family, frozenDeclarations, frozenContext);\n const existingRule = this.rulesByCanonicalIdentity.get(identity);\n\n if (existingRule) return existingRule;\n\n const id = this.digest(identity);\n if (!SHA_256_DIGEST.test(id)) {\n throw new CssInvariantError('CSS artifact digest must be a 64-character lowercase hexadecimal SHA-256 value');\n }\n\n const collidingIdentity = this.canonicalIdentityByDigest.get(id);\n if (collidingIdentity !== undefined && collidingIdentity !== identity) {\n throw new CssInvariantError('Distinct CSS artifact identities must not share a digest');\n }\n\n const rule: OwnedCssRule = Object.freeze({\n owner: 'flex-layout-codemod',\n id,\n className: `flm-${id}`,\n family,\n declarations: frozenDeclarations,\n context: frozenContext,\n });\n\n this.rulesByCanonicalIdentity.set(identity, rule);\n this.canonicalIdentityByDigest.set(id, identity);\n this.registeredRules.push(rule);\n return rule;\n }\n\n rules(): readonly OwnedCssRule[] {\n return Object.freeze([...this.registeredRules].sort(compareOwnedCssRules));\n }\n\n rulesReferencedBy(classNames: ReadonlySet<string>): readonly OwnedCssRule[] {\n return Object.freeze(\n this.registeredRules.filter(rule => classNames.has(rule.className)).sort(compareOwnedCssRules),\n );\n }\n}\n","import type { BreakpointDefinition, MediaDefinition } from '../../breakpoint/breakpoint-catalog';\nimport type { CssRuleContext } from './css-artifact.model';\n\nfunction copyMedia(media: MediaDefinition): MediaDefinition {\n return Object.freeze({\n type: media.type,\n clauses: Object.freeze(media.clauses.map(clause => Object.freeze({ ...clause }))),\n });\n}\n\nexport function cssRuleContext(definition?: BreakpointDefinition): CssRuleContext {\n if (definition === undefined) {\n return Object.freeze({ priority: 0 });\n }\n\n return Object.freeze({ priority: definition.priority, media: copyMedia(definition.media) });\n}\n","import type { CssDeclaration } from '../css-artifact.model';\nimport type { FlexAlignSemantics, FlexSelfAlignment } from '../../../flex/flex-align.semantic';\n\nconst alignmentValues: Readonly<Record<FlexSelfAlignment, CssDeclaration['value']>> = {\n auto: 'auto',\n start: 'flex-start',\n end: 'flex-end',\n center: 'center',\n baseline: 'baseline',\n stretch: 'stretch',\n};\n\nexport function renderFlexAlignCss(value: FlexAlignSemantics): readonly CssDeclaration[] {\n return Object.freeze([Object.freeze({ property: 'align-self', value: alignmentValues[value.alignment] })]);\n}\n","import type { CssDeclaration } from '../css-artifact.model';\nimport type { FlexFillSemantics } from '../../../flex/flex-fill.semantic';\n\nfunction freezeDeclarations(declarations: readonly CssDeclaration[]): readonly CssDeclaration[] {\n return Object.freeze(declarations.map(declaration => Object.freeze({ ...declaration })));\n}\n\nexport function renderFlexFillCss(value: FlexFillSemantics): readonly CssDeclaration[] {\n return freezeDeclarations([\n { property: 'margin', value: value.margin },\n { property: 'width', value: value.width },\n { property: 'height', value: value.height },\n { property: 'min-width', value: value.minWidth },\n { property: 'min-height', value: value.minHeight },\n ]);\n}\n","import type { CssDeclaration } from '../css-artifact.model';\nimport type { FlexItemSemantics } from '../../../flex/flex-item.semantic';\n\nfunction freezeDeclarations(declarations: readonly CssDeclaration[]): readonly CssDeclaration[] {\n return Object.freeze(declarations.map(declaration => Object.freeze({ ...declaration })));\n}\n\nexport function renderFlexItemCss(value: FlexItemSemantics): readonly CssDeclaration[] {\n const flexDeclarations =\n value.basis.kind === 'computed'\n ? [\n { property: 'flex-grow', value: value.grow },\n { property: 'flex-shrink', value: value.shrink },\n { property: 'flex-basis', value: value.basis.value },\n ]\n : [{ property: 'flex', value: `${value.grow} ${value.shrink} ${value.basis.value}` }];\n\n return freezeDeclarations([\n ...flexDeclarations,\n ...(value.min ? [{ property: `min-${value.axis}`, value: value.min }] : []),\n ...(value.max ? [{ property: `max-${value.axis}`, value: value.max }] : []),\n { property: 'box-sizing', value: value.boxSizing },\n ]);\n}\n","import type { CssDeclaration } from '../css-artifact.model';\nimport type { FlexOffsetSemantics } from '../../../flex/flex-offset.semantic';\n\nconst propertyByAxis: Readonly<Record<FlexOffsetSemantics['axis'], CssDeclaration['property']>> = {\n 'inline-start': 'margin-inline-start',\n 'block-start': 'margin-block-start',\n};\n\nexport function renderFlexOffsetCss(value: FlexOffsetSemantics): readonly CssDeclaration[] {\n return Object.freeze([Object.freeze({ property: propertyByAxis[value.axis], value: value.length })]);\n}\n","import type { CssDeclaration } from '../css-artifact.model';\nimport type { FlexOrderSemantics } from '../../../flex/flex-order.semantic';\n\nconst noDeclarations: readonly CssDeclaration[] = Object.freeze([]);\n\nexport function renderFlexOrderCss(value: FlexOrderSemantics): readonly CssDeclaration[] {\n return value.order === undefined\n ? noDeclarations\n : Object.freeze([Object.freeze({ property: 'order', value: String(value.order) })]);\n}\n","import type { CssDeclaration } from '../css-artifact.model';\nimport type { LayoutDirection, LayoutSemantics, LayoutWrap } from '../../../flex/layout.semantic';\n\nconst displayValues: Readonly<Record<LayoutSemantics['display'], CssDeclaration['value']>> = {\n flex: 'flex',\n 'inline-flex': 'inline-flex',\n};\n\nconst directionValues: Readonly<Record<LayoutDirection, CssDeclaration['value']>> = {\n row: 'row',\n 'row-reverse': 'row-reverse',\n column: 'column',\n 'column-reverse': 'column-reverse',\n};\n\nconst wrapValues: Readonly<Record<LayoutWrap, CssDeclaration['value']>> = {\n nowrap: 'nowrap',\n wrap: 'wrap',\n 'wrap-reverse': 'wrap-reverse',\n};\n\nfunction freezeDeclarations(declarations: readonly CssDeclaration[]): readonly CssDeclaration[] {\n return Object.freeze(declarations.map(declaration => Object.freeze({ ...declaration })));\n}\n\nexport function renderLayoutCss(value: LayoutSemantics): readonly CssDeclaration[] {\n return freezeDeclarations([\n { property: 'display', value: displayValues[value.display] },\n { property: 'box-sizing', value: value.boxSizing },\n { property: 'flex-direction', value: directionValues[value.direction] },\n ...(value.explicitWrap ? [{ property: 'flex-wrap', value: wrapValues[value.wrap] }] : []),\n ]);\n}\n","import type { CssDeclaration } from '../css-artifact.model';\nimport type {\n LayoutContentAlignment,\n LayoutItemsAlignment,\n LayoutMainAlignment,\n LayoutAlignmentSemantics,\n} from '../../../flex/layout-align.semantic';\nimport { renderLayoutCss } from './layout.css-renderer';\n\nconst mainAlignmentValues: Readonly<Record<LayoutMainAlignment, CssDeclaration['value']>> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n 'space-around': 'space-around',\n 'space-between': 'space-between',\n 'space-evenly': 'space-evenly',\n};\n\nconst itemsAlignmentValues: Readonly<Record<LayoutItemsAlignment, CssDeclaration['value']>> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n baseline: 'baseline',\n stretch: 'stretch',\n};\n\nconst contentAlignmentValues: Readonly<Record<LayoutContentAlignment, CssDeclaration['value']>> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n 'space-around': 'space-around',\n 'space-between': 'space-between',\n};\n\nconst stretchMaximumProperties: Readonly<Record<NonNullable<LayoutAlignmentSemantics['stretchMaximum']>, string>> = {\n width: 'max-width',\n height: 'max-height',\n};\n\nfunction freezeDeclarations(declarations: readonly CssDeclaration[]): readonly CssDeclaration[] {\n return Object.freeze(declarations.map(declaration => Object.freeze({ ...declaration })));\n}\n\nexport function renderLayoutAlignmentCss(value: LayoutAlignmentSemantics): readonly CssDeclaration[] {\n return freezeDeclarations([\n { property: 'justify-content', value: mainAlignmentValues[value.main] },\n { property: 'align-items', value: itemsAlignmentValues[value.items] },\n { property: 'align-content', value: contentAlignmentValues[value.content] },\n ...renderLayoutCss(value.layout),\n ...(value.stretchMaximum === undefined\n ? []\n : [{ property: stretchMaximumProperties[value.stretchMaximum], value: '100%' }]),\n ]);\n}\n","import type { CssDeclaration } from '../css-artifact.model';\nimport type { LayoutGapSemantics } from '../../../flex/layout-gap.semantic';\n\nexport function renderLayoutGapCss(value: LayoutGapSemantics): readonly CssDeclaration[] {\n return Object.freeze([Object.freeze({ property: 'gap', value: value.length })]);\n}\n","import type { LocatedFlexLayoutInput } from '../../analyzer/flex-layout-attribute.analyzer';\nimport { DEFAULT_BREAKPOINTS } from '../../analyzer/flex-layout.catalog';\nimport type { BreakpointMigrationConfig } from '../../config/breakpoint-migration-config';\nimport type { FlexAlignSemantics } from '../../flex/flex-align.semantic';\nimport type { FlexFillSemantics } from '../../flex/flex-fill.semantic';\nimport type { FlexItemSemantics } from '../../flex/flex-item.semantic';\nimport type { FlexOffsetSemantics } from '../../flex/flex-offset.semantic';\nimport type { FlexOrderSemantics } from '../../flex/flex-order.semantic';\nimport type { LayoutAlignmentSemantics } from '../../flex/layout-align.semantic';\nimport type { LayoutGapSemantics } from '../../flex/layout-gap.semantic';\nimport type { LayoutSemantics } from '../../flex/layout.semantic';\nimport type { CssDeclaration, CssSemanticFamily, OwnedCssRule } from '../../adapter/css/css-artifact.model';\nimport { CssArtifactRegistry } from '../../adapter/css/css-artifact.registry';\nimport { cssRuleContext } from '../../adapter/css/css-breakpoint.context';\nimport { CssInvariantError } from '../../adapter/css/css-invariant.error';\nimport { renderFlexAlignCss } from '../../adapter/css/flex/flex-align.css-renderer';\nimport { renderFlexFillCss } from '../../adapter/css/flex/flex-fill.css-renderer';\nimport { renderFlexItemCss } from '../../adapter/css/flex/flex-item.css-renderer';\nimport { renderFlexOffsetCss } from '../../adapter/css/flex/flex-offset.css-renderer';\nimport { renderFlexOrderCss } from '../../adapter/css/flex/flex-order.css-renderer';\nimport { renderLayoutAlignmentCss } from '../../adapter/css/flex/layout-align.css-renderer';\nimport { renderLayoutGapCss } from '../../adapter/css/flex/layout-gap.css-renderer';\nimport { renderLayoutCss } from '../../adapter/css/flex/layout.css-renderer';\nimport type { SemanticConversionContext } from '../../semantic/conversion-context';\nimport type { ResolvedSemanticPlan } from '../../semantic/semantic-plan';\nimport type { ConversionRenderer, PlannedConversion } from '../conversion-renderer';\n\nconst supportedFamilies = new Set<CssSemanticFamily>([\n 'layout',\n 'layout-gap',\n 'layout-align',\n 'flex-item',\n 'flex-align',\n 'flex-fill',\n 'flex-offset',\n 'flex-order',\n]);\nconst supportedBreakpoints = new Set<string>(DEFAULT_BREAKPOINTS);\n\nfunction targetUnsupported(input: LocatedFlexLayoutInput): PlannedConversion {\n return {\n status: 'unsupported',\n input,\n code: 'target-unsupported',\n reason: `The CSS target does not support ${input.sourceName}.`,\n suggestion: 'Use the Tailwind target when it supports this input, or migrate the directive manually.',\n };\n}\n\nexport class CssRenderer implements ConversionRenderer {\n readonly target = 'css' as const;\n readonly breakpointConfig: BreakpointMigrationConfig;\n private readonly referencedClassNamesByInputId = new Map<string, readonly string[]>();\n\n constructor(\n readonly registry: CssArtifactRegistry = new CssArtifactRegistry(),\n config: BreakpointMigrationConfig = { orientationBreakpoints: false },\n ) {\n this.breakpointConfig = Object.freeze({ ...config });\n }\n\n eligibility(input: LocatedFlexLayoutInput): PlannedConversion | undefined {\n const family = this.cssFamily(input);\n if (family === undefined) return targetUnsupported(input);\n if (input.breakpoint !== undefined && !supportedBreakpoints.has(input.breakpoint)) return targetUnsupported(input);\n return undefined;\n }\n\n render(plan: ResolvedSemanticPlan, _context: SemanticConversionContext): PlannedConversion {\n const family = this.cssFamily(plan.input);\n if (family === undefined || family !== plan.family) {\n throw new CssInvariantError(`CSS emission received an unsupported directive: ${plan.input.directive}`);\n }\n if (plan.activations.length !== 1) {\n throw new CssInvariantError('CSS emission requires exactly one resolved activation');\n }\n\n const declarations = this.declarations(plan);\n if (declarations.length === 0) return { status: 'converted', input: plan.input, classNames: [] };\n const planActivation = plan.activations[0];\n const rule = this.registry.register(\n family,\n declarations,\n planActivation?.kind === 'media' ? cssRuleContext(planActivation.definition) : { priority: 0 },\n );\n return { status: 'converted', input: plan.input, classNames: [rule.className] };\n }\n\n resolveConflicts(\n plans: readonly PlannedConversion[],\n _context: SemanticConversionContext,\n ): readonly PlannedConversion[] {\n return plans;\n }\n\n record(plans: readonly PlannedConversion[]): void {\n for (const plan of plans) {\n this.referencedClassNamesByInputId.set(plan.input.id, plan.status === 'converted' ? plan.classNames : []);\n }\n }\n\n referencedClassNames(): ReadonlySet<string> {\n return new Set([...this.referencedClassNamesByInputId.values()].flatMap(classNames => [...classNames]));\n }\n\n finalizedRules(): readonly OwnedCssRule[] {\n return this.registry.rulesReferencedBy(this.referencedClassNames());\n }\n\n private cssFamily(input: LocatedFlexLayoutInput): CssSemanticFamily | undefined {\n const family =\n input.directive === 'fxLayout'\n ? 'layout'\n : input.directive === 'fxLayoutGap'\n ? 'layout-gap'\n : input.directive === 'fxLayoutAlign'\n ? 'layout-align'\n : input.directive === 'fxFlex' || input.directive === 'fxGrow' || input.directive === 'fxShrink'\n ? 'flex-item'\n : input.directive === 'fxFlexAlign'\n ? 'flex-align'\n : input.directive === 'fxFlexFill' || input.directive === 'fxFill'\n ? 'flex-fill'\n : input.directive === 'fxFlexOffset'\n ? 'flex-offset'\n : input.directive === 'fxFlexOrder'\n ? 'flex-order'\n : undefined;\n return family !== undefined && supportedFamilies.has(family) ? family : undefined;\n }\n\n private declarations(plan: ResolvedSemanticPlan): readonly CssDeclaration[] {\n switch (plan.family) {\n case 'layout':\n return renderLayoutCss(plan.value as LayoutSemantics);\n case 'layout-gap':\n return renderLayoutGapCss(plan.value as LayoutGapSemantics);\n case 'layout-align':\n return renderLayoutAlignmentCss(plan.value as LayoutAlignmentSemantics);\n case 'flex-item':\n return renderFlexItemCss(plan.value as FlexItemSemantics);\n case 'flex-align':\n return renderFlexAlignCss(plan.value as FlexAlignSemantics);\n case 'flex-fill':\n return renderFlexFillCss(plan.value as FlexFillSemantics);\n case 'flex-offset':\n return renderFlexOffsetCss(plan.value as FlexOffsetSemantics);\n case 'flex-order':\n return renderFlexOrderCss(plan.value as FlexOrderSemantics);\n default:\n throw new CssInvariantError(`CSS emission received an unsupported semantic family: ${plan.family}`);\n }\n }\n}\n","export type MigrationApplicationErrorCode =\n | 'invalid-configuration'\n | 'path-collision'\n | 'unsupported-path-type'\n | 'stylesheet-ownership-invalid'\n | 'concurrent-modification'\n | 'transaction-io'\n | 'transaction-interrupted'\n | 'internal-invariant';\n\nexport class MigrationApplicationError extends Error {\n readonly recoveryFailures: readonly unknown[];\n\n constructor(\n readonly code: MigrationApplicationErrorCode,\n message: string,\n readonly paths: readonly string[] = [],\n options?: ErrorOptions & { readonly recoveryFailures?: readonly unknown[] },\n ) {\n super(message, options);\n this.name = 'MigrationApplicationError';\n this.paths = Object.freeze([...paths]);\n this.recoveryFailures = Object.freeze([...(options?.recoveryFailures ?? [])]);\n }\n}\n","import type { TemplateAttribute, TemplateElement } from '../template/template.model';\nimport type { SourceEdit } from './source-edit';\n\nconst htmlSourceWhitespace = /[\\t\\n\\f\\r ]/u;\nconst htmlReferencePrefix = /&(?:#|[a-z\\d])/iu;\n\n/**\n * Tailwind scans template bytes without first decoding HTML. A generated class\n * token is therefore safe only when the same bytes survive Angular's HTML\n * parsing and can be placed in both quote styles without entity escaping.\n */\nexport function isByteExactHtmlClassToken(token: string): boolean {\n return (\n token.length > 0 &&\n ![...token].some(character => htmlSourceWhitespace.test(character)) &&\n !/[\"'<]/u.test(token) &&\n !htmlReferencePrefix.test(token)\n );\n}\n\nfunction isDoubleQuotedHtmlClassToken(token: string): boolean {\n return (\n token.length > 0 &&\n ![...token].some(character => htmlSourceWhitespace.test(character)) &&\n !/[\"<]/u.test(token) &&\n !htmlReferencePrefix.test(token)\n );\n}\n\nfunction appendedRawValue(rawValue: string, missingClassNames: readonly string[]): string {\n const separator = rawValue.length > 0 && !htmlSourceWhitespace.test(rawValue.at(-1) ?? '') ? ' ' : '';\n return `${rawValue}${separator}${missingClassNames.join(' ')}`;\n}\n\nexport function appendLiteralClassNames(\n source: string,\n element: TemplateElement,\n classAttribute: TemplateAttribute | undefined,\n generatedClassNames: readonly string[],\n inputId: string,\n): SourceEdit | undefined {\n const uniqueGenerated = [...new Set(generatedClassNames)];\n // Deduplicate only against byte-identical source candidates. An entity-decoded\n // equivalent has the same Angular token but remains invisible to Tailwind's\n // raw source scanner, so the generated spelling must still be appended.\n const existingRawClassNames = classAttribute?.rawValue.split(/[\\t\\n\\f\\r ]+/u).filter(Boolean) ?? [];\n const missingClassNames = uniqueGenerated.filter(className => !existingRawClassNames.includes(className));\n if (missingClassNames.length === 0) return undefined;\n\n if (!missingClassNames.every(isDoubleQuotedHtmlClassToken)) {\n throw new Error('Generated class names must be byte-exact HTML source tokens before editing.');\n }\n\n if (classAttribute !== undefined) {\n if (classAttribute.valueSource === undefined) {\n return {\n range: classAttribute.source,\n text: `${classAttribute.rawName}=\"${missingClassNames.join(' ')}\"`,\n inputId,\n };\n }\n\n const value = appendedRawValue(classAttribute.rawValue, missingClassNames);\n const delimiter = source[classAttribute.valueSource.start - 1];\n if (delimiter === '\"') {\n return { range: classAttribute.valueSource, text: value, inputId };\n }\n if (delimiter === \"'\" && missingClassNames.every(isByteExactHtmlClassToken)) {\n return { range: classAttribute.valueSource, text: value, inputId };\n }\n if (delimiter === \"'\" && !classAttribute.rawValue.includes('\"')) {\n return {\n range: classAttribute.source,\n text: `${classAttribute.rawName}=\"${value}\"`,\n inputId,\n };\n }\n\n return {\n range: classAttribute.source,\n text: `${classAttribute.rawName}=\"${value}\"`,\n inputId,\n };\n }\n\n const startTag = source.slice(element.startTag.start, element.startTag.end);\n const selfClosing = startTag.endsWith('/>');\n const insertionOffset = element.startTag.end - (selfClosing ? 2 : 1);\n const hasClosingWhitespace = htmlSourceWhitespace.test(source[insertionOffset - 1] ?? '');\n const classAttributeText = `class=\"${missingClassNames.join(' ')}\"`;\n return {\n range: { start: insertionOffset, end: insertionOffset },\n text: selfClosing && hasClosingWhitespace ? `${classAttributeText} ` : ` ${classAttributeText}`,\n inputId,\n };\n}\n","import type { LiteralStyleDeclaration } from '../../../semantic/literal-style-declaration';\nimport { isByteExactHtmlClassToken } from '../../../edit/html-attribute-value';\n\nconst ordinaryProperty = /^-?[a-z][a-z\\d-]*$/iu;\nconst customProperty = /^--[a-z\\d_-]+$/iu;\n\nfunction containsControl(value: string): boolean {\n return [...value].some(character => {\n const codePoint = character.codePointAt(0);\n return codePoint !== undefined && (codePoint < 0x20 || codePoint === 0x7f);\n });\n}\n\nfunction isEncodable(declaration: LiteralStyleDeclaration): boolean {\n const propertyIsValid = ordinaryProperty.test(declaration.property) || customProperty.test(declaration.property);\n return (\n propertyIsValid &&\n declaration.value.length > 0 &&\n !containsControl(declaration.value) &&\n !/[\\\\[\\]{}]/u.test(declaration.value)\n );\n}\n\nexport class TailwindArbitraryPropertyEncoder {\n encode(declaration: LiteralStyleDeclaration): string {\n if (!isEncodable(declaration)) {\n throw new Error('The style declaration cannot be encoded as an exact Tailwind arbitrary property.');\n }\n\n const value = declaration.value.replaceAll('_', '\\\\_').replaceAll(' ', '_');\n const candidate = `[${declaration.property}:${value}]`;\n if (!isByteExactHtmlClassToken(candidate)) {\n throw new Error('The style declaration cannot be encoded as a byte-exact HTML source candidate.');\n }\n return candidate;\n }\n}\n","import { ORIENTATION_BREAKPOINTS } from '../analyzer/flex-layout.catalog';\nimport type { BreakpointMigrationConfig } from '../config/breakpoint-migration-config';\n\nexport interface MediaRange {\n readonly min?: number;\n readonly max?: number;\n readonly orientation?: 'portrait' | 'landscape';\n}\n\nexport type MediaClause = MediaRange;\n\nexport interface MediaDefinition {\n readonly type: 'screen' | 'print';\n readonly clauses: readonly MediaClause[];\n}\n\nexport interface BreakpointDefinition {\n readonly alias: string;\n /** @deprecated Use media clauses; retained while range consumers migrate. */\n readonly range: MediaClause;\n readonly media: MediaDefinition;\n readonly priority: number;\n}\n\nexport type BreakpointClassification =\n | { readonly kind: 'verified'; readonly definition: BreakpointDefinition }\n | { readonly kind: 'optional'; readonly alias: string }\n | { readonly kind: 'print'; readonly alias: 'print' }\n | { readonly kind: 'custom'; readonly alias: string };\n\nfunction freezeDefinition(definition: BreakpointDefinition): BreakpointDefinition {\n return Object.freeze({\n ...definition,\n range: Object.freeze({ ...definition.range }),\n media: Object.freeze({\n ...definition.media,\n clauses: Object.freeze(definition.media.clauses.map(clause => Object.freeze({ ...clause }))),\n }),\n });\n}\n\nfunction screen(alias: string, range: MediaClause, priority: number): BreakpointDefinition {\n return { alias, range, media: { type: 'screen', clauses: [range] }, priority };\n}\n\nfunction composite(alias: string, clauses: readonly MediaClause[], priority: number): BreakpointDefinition {\n return { alias, range: clauses[0] ?? {}, media: { type: 'screen', clauses }, priority };\n}\n\nconst breakpointDefinitions: readonly BreakpointDefinition[] = [\n screen('xs', { min: 0, max: 599.98 }, 1000),\n screen('sm', { min: 600, max: 959.98 }, 900),\n screen('md', { min: 960, max: 1279.98 }, 800),\n screen('lg', { min: 1280, max: 1919.98 }, 700),\n screen('xl', { min: 1920, max: 4999.98 }, 600),\n screen('lt-sm', { min: undefined, max: 599.98 }, 950),\n screen('lt-md', { min: undefined, max: 959.98 }, 850),\n screen('lt-lg', { min: undefined, max: 1279.98 }, 750),\n screen('lt-xl', { min: undefined, max: 1919.98 }, 650),\n screen('gt-xs', { min: 600, max: undefined }, -950),\n screen('gt-sm', { min: 960, max: undefined }, -850),\n screen('gt-md', { min: 1280, max: undefined }, -750),\n screen('gt-lg', { min: 1920, max: undefined }, -650),\n];\n\nconst orientationDefinitions: readonly BreakpointDefinition[] = [\n screen('handset.portrait', { max: 599.98, orientation: 'portrait' }, 2000),\n screen('handset.landscape', { max: 959.98, orientation: 'landscape' }, 2000),\n composite(\n 'handset',\n [\n { max: 599.98, orientation: 'portrait' },\n { max: 959.98, orientation: 'landscape' },\n ],\n 2000,\n ),\n screen('tablet.portrait', { min: 600, max: 839.98, orientation: 'portrait' }, 2100),\n screen('tablet.landscape', { min: 960, max: 1279.98, orientation: 'landscape' }, 2100),\n composite(\n 'tablet',\n [\n { min: 600, max: 839.98, orientation: 'portrait' },\n { min: 960, max: 1279.98, orientation: 'landscape' },\n ],\n 2100,\n ),\n screen('web.portrait', { min: 840, orientation: 'portrait' }, 2200),\n screen('web.landscape', { min: 1280, orientation: 'landscape' }, 2200),\n composite(\n 'web',\n [\n { min: 840, orientation: 'portrait' },\n { min: 1280, orientation: 'landscape' },\n ],\n 2200,\n ),\n];\n\nconst printDefinition: BreakpointDefinition = {\n alias: 'print',\n range: {},\n media: { type: 'print', clauses: [{}] },\n priority: 1000,\n};\n\nconst definitions = Object.freeze(breakpointDefinitions.map(freezeDefinition));\nconst orientations = Object.freeze(orientationDefinitions.map(freezeDefinition));\nconst frozenPrintDefinition = freezeDefinition(printDefinition);\n\nconst definitionsByAlias = new Map(definitions.map(definition => [definition.alias, definition]));\nconst optionalAliases = new Set<string>(ORIENTATION_BREAKPOINTS);\n\nexport class BreakpointCatalog {\n private readonly configuredDefinitions: ReadonlyMap<string, BreakpointDefinition>;\n readonly printWithBreakpoints: readonly string[] | undefined;\n\n constructor(config: BreakpointMigrationConfig = { orientationBreakpoints: false }) {\n this.printWithBreakpoints = config.printWithBreakpoints;\n this.configuredDefinitions = new Map([\n ...definitionsByAlias,\n ...(config.orientationBreakpoints ? orientations.map(definition => [definition.alias, definition] as const) : []),\n ...(config.printWithBreakpoints === undefined\n ? []\n : ([[frozenPrintDefinition.alias, frozenPrintDefinition]] as const)),\n ]);\n }\n\n classify(alias: string): BreakpointClassification {\n const definition = this.configuredDefinitions.get(alias);\n\n if (definition) {\n return { kind: 'verified', definition };\n }\n\n if (optionalAliases.has(alias)) {\n return { kind: 'optional', alias };\n }\n\n if (alias === 'print') {\n return { kind: 'print', alias };\n }\n\n return { kind: 'custom', alias };\n }\n}\n\n/** Internal canonical definitions for deterministic consumers such as CSS ownership recovery. */\nexport function allBreakpointDefinitions(): readonly BreakpointDefinition[] {\n return Object.freeze([...definitions, ...orientations, frozenPrintDefinition]);\n}\n\nexport function mediaRangesIntersect(left: MediaRange, right: MediaRange): boolean {\n if (left.orientation !== undefined && right.orientation !== undefined && left.orientation !== right.orientation) {\n return false;\n }\n const leftMin = left.min ?? Number.NEGATIVE_INFINITY;\n const leftMax = left.max ?? Number.POSITIVE_INFINITY;\n const rightMin = right.min ?? Number.NEGATIVE_INFINITY;\n const rightMax = right.max ?? Number.POSITIVE_INFINITY;\n\n return leftMin <= rightMax && rightMin <= leftMax;\n}\n\nexport function mediaDefinitionsIntersect(left: MediaDefinition, right: MediaDefinition): boolean {\n if (left.type !== right.type) return false;\n return left.clauses.some(leftClause =>\n right.clauses.some(\n rightClause =>\n (leftClause.orientation === undefined ||\n rightClause.orientation === undefined ||\n leftClause.orientation === rightClause.orientation) &&\n mediaRangesIntersect(leftClause, rightClause),\n ),\n );\n}\n","export interface TailwindArbitrarySyntax {\n readonly important: boolean;\n}\n\nconst closingByOpening = new Map([\n ['(', ')'],\n ['[', ']'],\n ['{', '}'],\n]);\n\nexport function analyzeTailwindArbitrarySyntax(value: string): TailwindArbitrarySyntax | undefined {\n if (!value.startsWith('[') || !value.endsWith(']')) return undefined;\n const inner = value.slice(1, -1);\n if (inner.trim().length === 0) return undefined;\n\n const stack: string[] = [];\n let quote: '\"' | \"'\" | undefined;\n let typedSeparator = -1;\n let topLevelValue = '';\n\n for (let index = 0; index < inner.length; index += 1) {\n const character = inner[index];\n if (character === undefined) return undefined;\n const codePoint = character.codePointAt(0);\n if (codePoint === undefined || codePoint <= 0x1f || codePoint === 0x7f) return undefined;\n\n if (quote !== undefined) {\n if (character === '\\\\') {\n if (inner[index + 1] === undefined) return undefined;\n index += 1;\n } else if (character === quote) {\n quote = undefined;\n }\n continue;\n }\n\n if (character === '/' && inner[index + 1] === '*') {\n const commentEnd = inner.indexOf('*/', index + 2);\n if (commentEnd < 0) return undefined;\n if (stack.length === 0) topLevelValue += ' ';\n index = commentEnd + 1;\n continue;\n }\n\n if (character === '\\\\') {\n const escaped = inner[index + 1];\n if (escaped === undefined || escaped === '\\n' || escaped === '\\r' || escaped === '\\f') return undefined;\n if (stack.length === 0) topLevelValue += escaped === '_' ? '_' : 'x';\n index += 1;\n continue;\n }\n\n if (character === '\"' || character === \"'\") {\n if (stack.length === 0) topLevelValue += 'x';\n quote = character;\n continue;\n }\n\n const closing = closingByOpening.get(character);\n if (closing !== undefined) {\n if (stack.length === 0) topLevelValue += 'x';\n stack.push(closing);\n continue;\n }\n if ([')', ']', '}'].includes(character)) {\n if (stack.pop() !== character) return undefined;\n continue;\n }\n if (stack.length !== 0) continue;\n\n if (character === ';') return undefined;\n if (character === ':' && typedSeparator < 0) typedSeparator = index;\n topLevelValue += character === '_' ? ' ' : character;\n }\n\n if (quote !== undefined || stack.length !== 0) return undefined;\n if (\n typedSeparator >= 0 &&\n (inner.slice(0, typedSeparator).trim().length === 0 || inner.slice(typedSeparator + 1).trim().length === 0)\n ) {\n return undefined;\n }\n\n return { important: /!\\s*important\\s*$/iu.test(topLevelValue) };\n}\n\nexport function hasValidTailwindArbitrarySyntax(value: string): boolean {\n return analyzeTailwindArbitrarySyntax(value) !== undefined;\n}\n","type CssPropertyOwnership =\n | { readonly kind: 'universal' }\n | { readonly kind: 'known'; readonly longhands: ReadonlySet<string> }\n | { readonly kind: 'unknown'; readonly property: string }\n | { readonly kind: 'custom'; readonly property: string };\n\nconst edges = ['top', 'right', 'bottom', 'left'] as const;\n\nfunction edgeLonghands(prefix: string, suffix?: string): readonly string[] {\n return edges.map(edge => `${prefix}-${edge}${suffix === undefined ? '' : `-${suffix}`}`);\n}\n\nconst physicalBorderWidths = edgeLonghands('border', 'width');\nconst physicalBorderStyles = edgeLonghands('border', 'style');\nconst physicalBorderColors = edgeLonghands('border', 'color');\nconst logicalBorderWidths = [\n 'border-inline-start-width',\n 'border-inline-end-width',\n 'border-block-start-width',\n 'border-block-end-width',\n] as const;\nconst logicalBorderStyles = [\n 'border-inline-start-style',\n 'border-inline-end-style',\n 'border-block-start-style',\n 'border-block-end-style',\n] as const;\nconst logicalBorderColors = [\n 'border-inline-start-color',\n 'border-inline-end-color',\n 'border-block-start-color',\n 'border-block-end-color',\n] as const;\nconst borderWidths = [...physicalBorderWidths, ...logicalBorderWidths];\nconst borderStyles = [...physicalBorderStyles, ...logicalBorderStyles];\nconst borderColors = [...physicalBorderColors, ...logicalBorderColors];\nconst borderImage = [\n 'border-image-source',\n 'border-image-slice',\n 'border-image-width',\n 'border-image-outset',\n 'border-image-repeat',\n] as const;\n\nconst shorthandLonghands = new Map<string, readonly string[]>([\n [\n 'margin',\n [...edgeLonghands('margin'), 'margin-inline-start', 'margin-inline-end', 'margin-block-start', 'margin-block-end'],\n ],\n ['margin-inline', ['margin-inline-start', 'margin-inline-end', 'margin-left', 'margin-right']],\n ['margin-block', ['margin-block-start', 'margin-block-end', 'margin-top', 'margin-bottom']],\n ['margin-inline-start', ['margin-inline-start', 'margin-left', 'margin-right']],\n ['margin-inline-end', ['margin-inline-end', 'margin-left', 'margin-right']],\n [\n 'padding',\n [\n ...edgeLonghands('padding'),\n 'padding-inline-start',\n 'padding-inline-end',\n 'padding-block-start',\n 'padding-block-end',\n ],\n ],\n ['padding-inline', ['padding-inline-start', 'padding-inline-end', 'padding-left', 'padding-right']],\n ['padding-block', ['padding-block-start', 'padding-block-end', 'padding-top', 'padding-bottom']],\n ['padding-inline-start', ['padding-inline-start', 'padding-left', 'padding-right']],\n ['padding-inline-end', ['padding-inline-end', 'padding-left', 'padding-right']],\n ['inset', [...edges, 'inset-inline-start', 'inset-inline-end', 'inset-block-start', 'inset-block-end']],\n ['inset-inline', ['inset-inline-start', 'inset-inline-end', 'left', 'right']],\n ['inset-block', ['inset-block-start', 'inset-block-end', 'top', 'bottom']],\n ['gap', ['row-gap', 'column-gap']],\n [\n 'font',\n [\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'font-stretch',\n 'font-size',\n 'line-height',\n 'font-family',\n 'font-size-adjust',\n 'font-kerning',\n 'font-optical-sizing',\n 'font-feature-settings',\n 'font-variation-settings',\n 'font-language-override',\n ],\n ],\n [\n 'background',\n [\n 'background-image',\n 'background-position',\n 'background-size',\n 'background-repeat',\n 'background-origin',\n 'background-clip',\n 'background-attachment',\n 'background-color',\n ],\n ],\n ['border', [...borderWidths, ...borderStyles, ...borderColors, ...borderImage]],\n ['border-top', ['border-top-width', 'border-top-style', 'border-top-color']],\n ['border-right', ['border-right-width', 'border-right-style', 'border-right-color']],\n ['border-bottom', ['border-bottom-width', 'border-bottom-style', 'border-bottom-color']],\n ['border-left', ['border-left-width', 'border-left-style', 'border-left-color']],\n ['border-width', borderWidths],\n [\n 'border-inline-width',\n ['border-inline-start-width', 'border-inline-end-width', 'border-left-width', 'border-right-width'],\n ],\n ['border-block-width', ['border-block-start-width', 'border-block-end-width', ...physicalBorderWidths]],\n ['border-inline-start-width', ['border-inline-start-width', 'border-left-width', 'border-right-width']],\n ['border-inline-end-width', ['border-inline-end-width', 'border-left-width', 'border-right-width']],\n ['border-block-start-width', ['border-block-start-width', ...physicalBorderWidths]],\n ['border-block-end-width', ['border-block-end-width', ...physicalBorderWidths]],\n ['border-style', borderStyles],\n [\n 'border-inline-style',\n ['border-inline-start-style', 'border-inline-end-style', 'border-left-style', 'border-right-style'],\n ],\n ['border-block-style', ['border-block-start-style', 'border-block-end-style', ...physicalBorderStyles]],\n ['border-inline-start-style', ['border-inline-start-style', 'border-left-style', 'border-right-style']],\n ['border-inline-end-style', ['border-inline-end-style', 'border-left-style', 'border-right-style']],\n ['border-block-start-style', ['border-block-start-style', ...physicalBorderStyles]],\n ['border-block-end-style', ['border-block-end-style', ...physicalBorderStyles]],\n ['border-color', borderColors],\n [\n 'border-inline-color',\n ['border-inline-start-color', 'border-inline-end-color', 'border-left-color', 'border-right-color'],\n ],\n ['border-block-color', ['border-block-start-color', 'border-block-end-color', ...physicalBorderColors]],\n ['border-inline-start-color', ['border-inline-start-color', 'border-left-color', 'border-right-color']],\n ['border-inline-end-color', ['border-inline-end-color', 'border-left-color', 'border-right-color']],\n ['border-block-start-color', ['border-block-start-color', ...physicalBorderColors]],\n ['border-block-end-color', ['border-block-end-color', ...physicalBorderColors]],\n [\n 'border-radius',\n [\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-bottom-right-radius',\n 'border-bottom-left-radius',\n 'border-start-start-radius',\n 'border-start-end-radius',\n 'border-end-start-radius',\n 'border-end-end-radius',\n ],\n ],\n ['border-image', borderImage],\n ['overflow', ['overflow-x', 'overflow-y']],\n ['flex', ['flex-grow', 'flex-shrink', 'flex-basis']],\n [\n 'transition',\n [\n 'transition-property',\n 'transition-duration',\n 'transition-timing-function',\n 'transition-delay',\n 'transition-behavior',\n ],\n ],\n ['grid-template', ['grid-template-rows', 'grid-template-columns', 'grid-template-areas']],\n ['grid-column', ['grid-column-start', 'grid-column-end']],\n ['grid-row', ['grid-row-start', 'grid-row-end']],\n [\n 'grid',\n [\n 'grid-template-rows',\n 'grid-template-columns',\n 'grid-template-areas',\n 'grid-auto-rows',\n 'grid-auto-columns',\n 'grid-auto-flow',\n ],\n ],\n ['list-style', ['list-style-type', 'list-style-position', 'list-style-image']],\n ['columns', ['column-width', 'column-count']],\n ['column-rule', ['column-rule-width', 'column-rule-style', 'column-rule-color']],\n ['outline', ['outline-width', 'outline-style', 'outline-color']],\n [\n 'text-decoration',\n ['text-decoration-line', 'text-decoration-style', 'text-decoration-color', 'text-decoration-thickness'],\n ],\n ['place-content', ['align-content', 'justify-content']],\n ['place-items', ['align-items', 'justify-items']],\n ['place-self', ['align-self', 'justify-self']],\n [\n 'animation',\n [\n 'animation-name',\n 'animation-duration',\n 'animation-timing-function',\n 'animation-delay',\n 'animation-iteration-count',\n 'animation-direction',\n 'animation-fill-mode',\n 'animation-play-state',\n 'animation-timeline',\n 'animation-range-start',\n 'animation-range-end',\n ],\n ],\n]);\n\nconst knownIndependentProperties = new Set([\n ...[...shorthandLonghands.values()].flatMap(longhands => [...longhands]),\n 'display',\n 'box-sizing',\n 'flex-direction',\n 'flex-wrap',\n 'justify-items',\n 'justify-self',\n 'width',\n 'height',\n 'min-width',\n 'min-height',\n 'max-width',\n 'max-height',\n 'color',\n 'text-align',\n 'text-wrap',\n 'background-blend-mode',\n 'background-size',\n 'background-attachment',\n 'background-clip',\n 'background-origin',\n 'background-position',\n 'background-repeat',\n 'box-shadow',\n 'opacity',\n 'position',\n 'transform',\n 'translate',\n 'rotate',\n 'scale',\n 'transform-origin',\n 'order',\n 'grid-column-start',\n 'grid-column-end',\n 'grid-row-start',\n 'grid-row-end',\n 'grid-auto-columns',\n 'grid-auto-rows',\n 'table-layout',\n 'object-fit',\n 'object-position',\n 'cursor',\n 'pointer-events',\n 'visibility',\n 'clip',\n 'clip-path',\n 'white-space',\n 'text-overflow',\n 'content',\n 'z-index',\n]);\n\nfunction ownership(property: string): CssPropertyOwnership {\n if (property.startsWith('--')) return { kind: 'custom', property };\n\n const normalized = property.toLowerCase();\n if (normalized === 'all') return { kind: 'universal' };\n const expanded = shorthandLonghands.get(normalized);\n if (expanded !== undefined) return { kind: 'known', longhands: new Set(expanded) };\n if (knownIndependentProperties.has(normalized)) {\n return { kind: 'known', longhands: new Set([normalized]) };\n }\n return { kind: 'unknown', property: normalized };\n}\n\nexport function cssPropertiesOverlap(leftProperty: string, rightProperty: string): boolean {\n const left = ownership(leftProperty);\n const right = ownership(rightProperty);\n\n if (left.kind === 'custom' || right.kind === 'custom') {\n return left.kind === 'custom' && right.kind === 'custom' && left.property === right.property;\n }\n if (left.kind === 'universal' || right.kind === 'universal') return true;\n if (left.kind === 'unknown' || right.kind === 'unknown') return true;\n return [...left.longhands].some(longhand => right.longhands.has(longhand));\n}\n\nexport function cssPropertyOwnershipCovers(ownerProperty: string, targetProperty: string): boolean {\n const owner = ownership(ownerProperty);\n const target = ownership(targetProperty);\n\n if (owner.kind === 'custom' || target.kind === 'custom') {\n return owner.kind === 'custom' && target.kind === 'custom' && owner.property === target.property;\n }\n if (owner.kind === 'universal') return true;\n if (target.kind === 'universal') return false;\n if (owner.kind === 'unknown' || target.kind === 'unknown') {\n return owner.kind === 'unknown' && target.kind === 'unknown' && owner.property === target.property;\n }\n return [...target.longhands].every(longhand => owner.longhands.has(longhand));\n}\n","const cssLengthUnits = new Set([\n 'cm',\n 'mm',\n 'Q',\n 'in',\n 'pc',\n 'pt',\n 'px',\n 'em',\n 'ex',\n 'ch',\n 'rem',\n 'lh',\n 'rlh',\n 'vw',\n 'vh',\n 'vmin',\n 'vmax',\n 'vb',\n 'vi',\n 'svw',\n 'svh',\n 'lvw',\n 'lvh',\n 'dvw',\n 'dvh',\n 'cqw',\n 'cqh',\n 'cqi',\n 'cqb',\n 'cqmin',\n 'cqmax',\n]);\n\nconst cssColorKeywords = new Set(\n `black silver gray white maroon red purple fuchsia green lime olive yellow navy blue teal aqua aliceblue\n antiquewhite aquamarine azure beige bisque blanchedalmond blueviolet brown burlywood cadetblue chartreuse\n chocolate coral cornflowerblue cornsilk crimson cyan darkblue darkcyan darkgoldenrod darkgray darkgreen darkgrey\n darkkhaki darkmagenta darkolivegreen darkorange darkorchid darkred darksalmon darkseagreen darkslateblue\n darkslategray darkslategrey darkturquoise darkviolet deeppink deepskyblue dimgray dimgrey dodgerblue firebrick\n floralwhite forestgreen gainsboro ghostwhite gold goldenrod greenyellow grey honeydew hotpink indianred indigo ivory\n khaki lavender lavenderblush lawngreen lemonchiffon lightblue lightcoral lightcyan lightgoldenrodyellow lightgray\n lightgreen lightgrey lightpink lightsalmon lightseagreen lightskyblue lightslategray lightslategrey lightsteelblue\n lightyellow limegreen linen magenta mediumaquamarine mediumblue mediumorchid mediumpurple mediumseagreen\n mediumslateblue mediumspringgreen mediumturquoise mediumvioletred midnightblue mintcream mistyrose moccasin\n navajowhite oldlace olivedrab orange orangered orchid palegoldenrod palegreen paleturquoise palevioletred papayawhip\n peachpuff peru pink plum powderblue rebeccapurple rosybrown royalblue saddlebrown salmon sandybrown seagreen\n seashell sienna skyblue slateblue slategray slategrey snow springgreen steelblue tan thistle tomato turquoise violet\n wheat whitesmoke yellowgreen transparent currentcolor canvas canvastext linktext visitedtext activetext buttonface\n buttontext buttonborder field fieldtext highlight highlighttext selecteditem selecteditemtext mark marktext graytext\n accentcolor accentcolortext`\n .split(/\\s+/u)\n .filter(Boolean),\n);\n\nconst absoluteFontSizes = new Set([\n 'xx-small',\n 'x-small',\n 'small',\n 'medium',\n 'large',\n 'x-large',\n 'xx-large',\n 'xxx-large',\n]);\nconst relativeFontSizes = new Set(['larger', 'smaller']);\nconst defaultTailwindColorNames = new Set([\n 'red',\n 'orange',\n 'amber',\n 'yellow',\n 'lime',\n 'green',\n 'emerald',\n 'teal',\n 'cyan',\n 'sky',\n 'blue',\n 'indigo',\n 'violet',\n 'purple',\n 'fuchsia',\n 'pink',\n 'rose',\n 'slate',\n 'gray',\n 'zinc',\n 'neutral',\n 'stone',\n]);\nconst defaultTailwindColorShades = new Set([\n '50',\n '100',\n '200',\n '300',\n '400',\n '500',\n '600',\n '700',\n '800',\n '900',\n '950',\n]);\n\nconst unsignedDecimal = /^(?:(?:\\d+(?:\\.\\d+)?)|(?:\\.\\d+))$/u;\nconst signedCssNumber = /^[+-]?(?:\\d*\\.)?\\d+(?:e[+-]?\\d+)?$/iu;\nconst mathFunction = /(?:calc|min|max|clamp|mod|rem|sin|cos|tan|asin|acos|atan|atan2|pow|sqrt|hypot|log|exp|round)\\(/u;\nconst colorFunction = /^(?:rgba?|hsla?|hwb|color|(?:ok)?(?:lab|lch)|light-dark|color-mix|--alpha)\\(/iu;\n\ninterface ArbitraryValue {\n readonly hint?: string;\n readonly payload: string;\n}\n\nfunction arbitraryValue(value: string): ArbitraryValue | undefined {\n if (!value.startsWith('[') || !value.endsWith(']')) return undefined;\n const inner = value.slice(1, -1);\n const hinted = inner.match(/^([a-z][a-z-]*):([\\s\\S]+)$/u);\n return hinted === null ? { payload: inner } : { hint: hinted[1], payload: hinted[2] ?? '' };\n}\n\nfunction splitNumberAndUnit(value: string): { readonly number: string; readonly unit?: string } | undefined {\n const match = value.match(/^((?:(?:\\d+(?:\\.\\d+)?)|(?:\\.\\d+)))([a-zA-Z%]+)?$/u);\n if (match === null) return undefined;\n return { number: match[1] ?? '', unit: match[2] };\n}\n\nfunction isUnsignedLength(value: string, allowPercentage: boolean, allowUnitless: boolean): boolean {\n const parsed = splitNumberAndUnit(value);\n if (parsed === undefined || !unsignedDecimal.test(parsed.number)) return false;\n if (parsed.unit === undefined) return allowUnitless;\n return (allowPercentage && parsed.unit === '%') || cssLengthUnits.has(parsed.unit);\n}\n\nexport function isConservativelyAdmittedTextLength(value: string): boolean {\n const arbitrary = arbitraryValue(value);\n if (arbitrary === undefined) return false;\n if (arbitrary.hint !== undefined && arbitrary.hint !== 'length') return false;\n if (arbitrary.hint === 'length' && arbitrary.payload === '0') return true;\n return isUnsignedLength(arbitrary.payload, true, false);\n}\n\nexport function isConservativelyAdmittedBorderWidth(value: string): boolean {\n const arbitrary = arbitraryValue(value);\n if (arbitrary === undefined) return false;\n if (arbitrary.hint !== undefined && arbitrary.hint !== 'length') return false;\n if (arbitrary.hint === 'length' && arbitrary.payload === '0') return true;\n return isUnsignedLength(arbitrary.payload, false, arbitrary.hint === undefined);\n}\n\nfunction isTailwindLength(value: string): boolean {\n if (/^--spacing\\(/iu.test(value)) return true;\n if (mathFunction.test(value)) return true;\n const match = value.match(/^([+-]?(?:\\d*\\.)?\\d+(?:e[+-]?\\d+)?)([a-zA-Z]+)$/iu);\n return match !== null && signedCssNumber.test(match[1] ?? '') && cssLengthUnits.has(match[2] ?? '');\n}\n\nfunction isTailwindPercentage(value: string): boolean {\n return /^[+-]?(?:\\d*\\.)?\\d+(?:e[+-]?\\d+)?%$/iu.test(value) || mathFunction.test(value);\n}\n\nfunction decodedInferenceValue(value: string): string | undefined {\n if (value.includes('\\\\')) return undefined;\n return value.replaceAll('_', ' ');\n}\n\ntype TailwindDataType = 'color' | 'length' | 'percentage' | 'absolute-size' | 'relative-size' | 'line-width';\n\nfunction inferTailwindDataType(value: string, types: readonly TailwindDataType[]): TailwindDataType | undefined {\n if (value.startsWith('var(')) return undefined;\n\n for (const type of types) {\n if (\n type === 'color' &&\n (value.startsWith('#') || colorFunction.test(value) || cssColorKeywords.has(value.toLowerCase()))\n ) {\n return type;\n }\n if (type === 'length' && isTailwindLength(value)) return type;\n if (type === 'percentage' && isTailwindPercentage(value)) return type;\n if (type === 'absolute-size' && absoluteFontSizes.has(value)) return type;\n if (type === 'relative-size' && relativeFontSizes.has(value)) return type;\n if (type === 'line-width') {\n const parts = value.split(' ');\n if (\n parts.length > 0 &&\n parts.every(\n part =>\n part.length > 0 &&\n (isTailwindLength(part) || signedCssNumber.test(part) || ['thin', 'medium', 'thick'].includes(part)),\n )\n ) {\n return type;\n }\n }\n }\n return undefined;\n}\n\nexport function isPinnedTailwindColorToken(value: string): boolean {\n const [color, opacity, remainder] = value.split('/');\n if (remainder !== undefined || color === undefined) return false;\n const standard = ['inherit', 'current', 'transparent', 'black', 'white'].includes(color);\n const [name, shade, extra] = color.split('-');\n const palette =\n extra === undefined &&\n name !== undefined &&\n shade !== undefined &&\n defaultTailwindColorNames.has(name) &&\n defaultTailwindColorShades.has(shade);\n if (!standard && !palette) return false;\n if (opacity === undefined) return true;\n if (!/^(?:0|[1-9]\\d*)(?:\\.\\d+)?$/u.test(opacity)) return false;\n const numericOpacity = Number(opacity);\n return numericOpacity >= 0 && numericOpacity <= 100;\n}\n\nexport function tailwindArbitraryTextKind(value: string): 'color' | 'font-size' | 'unknown' {\n const arbitrary = arbitraryValue(value);\n if (arbitrary === undefined) return 'unknown';\n if (['size', 'length', 'percentage', 'absolute-size', 'relative-size'].includes(arbitrary.hint ?? '')) {\n return 'font-size';\n }\n if (arbitrary.hint === 'color') return 'color';\n if (arbitrary.hint !== undefined) return 'unknown';\n const payload = decodedInferenceValue(arbitrary.payload);\n if (payload === undefined || payload.length === 0) return 'unknown';\n const inferred = inferTailwindDataType(payload, ['color', 'length', 'percentage', 'absolute-size', 'relative-size']);\n return inferred !== undefined && inferred !== 'color' ? 'font-size' : 'color';\n}\n\nfunction isTailwindBackgroundPosition(value: string): boolean {\n let recognized = 0;\n for (const part of value.split(' ')) {\n if (['center', 'top', 'right', 'bottom', 'left'].includes(part)) {\n recognized += 1;\n continue;\n }\n if (part.startsWith('var(')) continue;\n if (!isTailwindLength(part) && !isTailwindPercentage(part)) return false;\n recognized += 1;\n }\n return recognized > 0;\n}\n\nfunction isTailwindBackgroundSize(value: string): boolean {\n let recognized = 0;\n for (const layer of value.split(',')) {\n if (layer === 'cover' || layer === 'contain') {\n recognized += 1;\n continue;\n }\n const parts = layer.split(' ');\n if (\n (parts.length !== 1 && parts.length !== 2) ||\n !parts.every(part => part === 'auto' || isTailwindLength(part) || isTailwindPercentage(part))\n ) {\n return false;\n }\n recognized += 1;\n }\n return recognized > 0;\n}\n\nfunction splitTopLevelCommas(value: string): readonly string[] | undefined {\n const closingByOpening = new Map([\n ['(', ')'],\n ['[', ']'],\n ['{', '}'],\n ]);\n const stack: string[] = [];\n const parts: string[] = [];\n let quote: '\"' | \"'\" | undefined;\n let start = 0;\n\n for (let index = 0; index < value.length; index += 1) {\n const character = value[index];\n if (character === undefined) return undefined;\n if (quote !== undefined) {\n if (character === '\\\\') index += 1;\n else if (character === quote) quote = undefined;\n continue;\n }\n if (character === '\\\\') {\n index += 1;\n continue;\n }\n if (character === '\"' || character === \"'\") {\n quote = character;\n continue;\n }\n const closing = closingByOpening.get(character);\n if (closing !== undefined) {\n stack.push(closing);\n continue;\n }\n if ([')', ']', '}'].includes(character)) {\n if (stack.pop() !== character) return undefined;\n continue;\n }\n if (character === ',' && stack.length === 0) {\n parts.push(value.slice(start, index));\n start = index + 1;\n }\n }\n if (quote !== undefined || stack.length > 0) return undefined;\n parts.push(value.slice(start));\n return parts;\n}\n\nfunction isTailwindBackgroundImage(value: string): boolean {\n const layers = splitTopLevelCommas(value);\n if (layers === undefined) return false;\n let recognized = 0;\n for (const layer of layers) {\n const normalized = layer.trim();\n if (normalized.startsWith('var(')) continue;\n if (\n !/^(?:url|(?:repeating-)?(?:linear|radial|conic)-gradient|element|image|cross-fade|image-set)\\([\\s\\S]*\\)$/u.test(\n normalized,\n )\n ) {\n return false;\n }\n recognized += 1;\n }\n return recognized > 0;\n}\n\nexport function tailwindArbitraryBackgroundKind(\n value: string,\n): 'background-color' | 'background-image' | 'background-position' | 'background-size' | 'unknown' {\n const arbitrary = arbitraryValue(value);\n if (arbitrary === undefined) return 'unknown';\n if (arbitrary.hint === 'percentage' || arbitrary.hint === 'position') return 'background-position';\n if (['bg-size', 'length', 'size'].includes(arbitrary.hint ?? '')) return 'background-size';\n if (arbitrary.hint === 'image' || arbitrary.hint === 'url') return 'background-image';\n if (arbitrary.hint === 'color') return 'background-color';\n if (arbitrary.hint !== undefined) return 'unknown';\n\n const payload = decodedInferenceValue(arbitrary.payload);\n if (payload === undefined || payload.length === 0) return 'unknown';\n if (payload.startsWith('var(')) return 'unknown';\n if (isTailwindBackgroundImage(payload)) return 'background-image';\n if (inferTailwindDataType(payload, ['color']) === 'color') return 'background-color';\n\n const position = isTailwindBackgroundPosition(payload);\n const size = isTailwindBackgroundSize(payload);\n if (position === size) return 'unknown';\n return position ? 'background-position' : 'background-size';\n}\n\nexport function tailwindArbitraryBorderKind(value: string): 'border-color' | 'border-width' | 'unknown' {\n const arbitrary = arbitraryValue(value);\n if (arbitrary === undefined) return 'unknown';\n if (arbitrary.hint === 'length' || arbitrary.hint === 'line-width') return 'border-width';\n if (arbitrary.hint === 'color') return 'border-color';\n if (arbitrary.hint !== undefined) return 'unknown';\n const payload = decodedInferenceValue(arbitrary.payload);\n if (payload === undefined || payload.length === 0) return 'unknown';\n const inferred = inferTailwindDataType(payload, ['color', 'line-width', 'length']);\n return inferred === 'line-width' || inferred === 'length' ? 'border-width' : 'border-color';\n}\n\nexport function tailwindArbitraryShadowKind(value: string): 'shadow-color' | 'shadow-geometry' | 'unknown' {\n const arbitrary = arbitraryValue(value);\n if (arbitrary === undefined) return 'unknown';\n if (arbitrary.hint === 'color') return 'shadow-color';\n if (arbitrary.hint !== undefined) return 'unknown';\n const payload = decodedInferenceValue(arbitrary.payload);\n if (payload === undefined || payload.length === 0) return 'unknown';\n return inferTailwindDataType(payload, ['color']) === 'color' ? 'shadow-color' : 'shadow-geometry';\n}\n","import { mediaRangesIntersect, type MediaRange } from '../../breakpoint/breakpoint-catalog';\nimport { analyzeTailwindArbitrarySyntax } from './tailwind-arbitrary-syntax';\nimport { cssPropertiesOverlap } from '../../semantic/css-property-ownership';\nimport {\n isPinnedTailwindColorToken,\n tailwindArbitraryBackgroundKind,\n tailwindArbitraryBorderKind,\n tailwindArbitraryShadowKind,\n tailwindArbitraryTextKind,\n} from './extended/tailwind-arbitrary-value-ownership';\n\nexport type TailwindActivation =\n | { readonly kind: 'base' }\n | { readonly kind: 'media'; readonly range: MediaRange; readonly mediaType?: 'screen' | 'print' };\n\nexport interface TailwindDisplayUtility {\n readonly token: string;\n readonly utility: string;\n readonly activation: TailwindActivation;\n readonly important: boolean;\n}\n\nexport interface TailwindUtilityDescriptor {\n readonly token: string;\n readonly variants: readonly string[];\n readonly utility: string;\n readonly cssProperties: readonly string[];\n readonly hasUnknownCssAuthority?: true;\n readonly activation: TailwindActivation;\n readonly hasGeneratedMediaVariant: boolean;\n readonly important: boolean;\n}\n\nconst displayUtilities = new Set([\n 'inline',\n 'block',\n 'inline-block',\n 'flow-root',\n 'flex',\n 'inline-flex',\n 'grid',\n 'inline-grid',\n 'contents',\n 'table',\n 'inline-table',\n 'table-caption',\n 'table-cell',\n 'table-column',\n 'table-column-group',\n 'table-footer-group',\n 'table-header-group',\n 'table-row-group',\n 'table-row',\n 'list-item',\n 'hidden',\n]);\n\nconst generatedScreenMediaVariant =\n /^\\[@media_screen_and_(?:(?:\\(min-width:_(\\d+(?:\\.\\d+)?)px\\))(?:_and_\\(max-width:_(\\d+(?:\\.\\d+)?)px\\))?|\\(max-width:_(\\d+(?:\\.\\d+)?)px\\))\\]$/u;\nconst generatedOrientationMediaVariant =\n /^\\[@media_\\(orientation:_(portrait|landscape)\\)(?:_and_\\(min-width:_(\\d+(?:\\.\\d+)?)px\\))?(?:_and_\\(max-width:_(\\d+(?:\\.\\d+)?)px\\))?\\]$/u;\n\nfunction splitVariants(\n className: string,\n): { readonly variants: readonly string[]; readonly utility: string } | undefined {\n let bracketDepth = 0;\n let escaped = false;\n let segmentStart = 0;\n const segments: string[] = [];\n\n for (let index = 0; index < className.length; index += 1) {\n const character = className[index];\n if (escaped) {\n escaped = false;\n continue;\n }\n if (character === '\\\\') {\n escaped = true;\n } else if (character === '[') {\n bracketDepth += 1;\n } else if (character === ']') {\n if (bracketDepth === 0) return undefined;\n bracketDepth -= 1;\n } else if (character === ':' && bracketDepth === 0) {\n const segment = className.slice(segmentStart, index);\n if (segment.length === 0) return undefined;\n segments.push(segment);\n segmentStart = index + 1;\n }\n }\n\n if (escaped || bracketDepth !== 0) return undefined;\n\n const utility = className.slice(segmentStart);\n if (utility.length === 0) return undefined;\n return { variants: Object.freeze(segments), utility };\n}\n\nfunction activation(variants: readonly string[]): TailwindActivation {\n for (const variant of variants) {\n if (variant === '[@media_print]') return { kind: 'media', range: {}, mediaType: 'print' };\n\n const orientationMatch = variant.match(generatedOrientationMediaVariant);\n if (orientationMatch) {\n return {\n kind: 'media',\n range: {\n orientation: orientationMatch[1] as 'portrait' | 'landscape',\n min: orientationMatch[2] === undefined ? undefined : Number(orientationMatch[2]),\n max: orientationMatch[3] === undefined ? undefined : Number(orientationMatch[3]),\n },\n };\n }\n\n const match = variant.match(generatedScreenMediaVariant);\n if (!match) continue;\n const min = match[1] === undefined ? undefined : Number(match[1]);\n const maxValue = match[2] ?? match[3];\n const max = maxValue === undefined ? undefined : Number(maxValue);\n if (min !== undefined && max !== undefined && min > max) continue;\n return { kind: 'media', range: { min, max } };\n }\n\n return { kind: 'base' };\n}\n\nfunction hasGeneratedMediaVariant(variants: readonly string[]): boolean {\n return variants.some(variant => variant.startsWith('[@media_'));\n}\n\nfunction hasInternalDeclarationImportance(utility: string): boolean {\n const arbitraryStart = utility.indexOf('[');\n if (arbitraryStart < 0) return false;\n return analyzeTailwindArbitrarySyntax(utility.slice(arbitraryStart))?.important ?? false;\n}\n\ntype CssAuthority = readonly string[] | 'unknown';\n\nconst textSizes = new Set(['xs', 'sm', 'base', 'lg', 'xl', '2xl', '3xl', '4xl', '5xl', '6xl', '7xl', '8xl', '9xl']);\nconst shadowGeometryNames = new Set(['2xs', 'xs', 'sm', 'md', 'lg', 'xl', '2xl', 'none']);\nconst insetShadowGeometryNames = new Set(['2xs', 'xs', 'sm', 'none']);\n\ninterface BorderFamilyOwnership {\n readonly namespace: string;\n readonly width: readonly string[];\n readonly color: readonly string[];\n}\n\nconst borderFamilies: readonly BorderFamilyOwnership[] = [\n {\n namespace: 'border-bs',\n width: ['border-block-start-style', 'border-block-start-width'],\n color: ['border-block-start-color'],\n },\n {\n namespace: 'border-be',\n width: ['border-block-end-style', 'border-block-end-width'],\n color: ['border-block-end-color'],\n },\n {\n namespace: 'border-x',\n width: ['border-inline-style', 'border-inline-width'],\n color: ['border-inline-color'],\n },\n {\n namespace: 'border-y',\n width: ['border-block-style', 'border-block-width'],\n color: ['border-block-color'],\n },\n {\n namespace: 'border-s',\n width: ['border-inline-start-style', 'border-inline-start-width'],\n color: ['border-inline-start-color'],\n },\n {\n namespace: 'border-e',\n width: ['border-inline-end-style', 'border-inline-end-width'],\n color: ['border-inline-end-color'],\n },\n { namespace: 'border-t', width: ['border-top-style', 'border-top-width'], color: ['border-top-color'] },\n { namespace: 'border-r', width: ['border-right-style', 'border-right-width'], color: ['border-right-color'] },\n { namespace: 'border-b', width: ['border-bottom-style', 'border-bottom-width'], color: ['border-bottom-color'] },\n { namespace: 'border-l', width: ['border-left-style', 'border-left-width'], color: ['border-left-color'] },\n { namespace: 'border', width: ['border-style', 'border-width'], color: ['border-color'] },\n];\n\nconst recognizedTailwindAuthorityNamespaces = [\n '@container',\n 'accent',\n 'align',\n 'animate',\n 'appearance',\n 'aspect',\n 'auto-cols',\n 'auto-rows',\n 'backdrop',\n 'backface',\n 'basis',\n 'bg',\n 'block',\n 'blur',\n 'border',\n 'box-decoration',\n 'break',\n 'brightness',\n 'caption',\n 'caret',\n 'clear',\n 'col',\n 'columns',\n 'contain',\n 'content',\n 'contrast',\n 'decoration',\n 'delay',\n 'divide',\n 'drop-shadow',\n 'duration',\n 'ease',\n 'end',\n 'field-sizing',\n 'fill',\n 'filter',\n 'float',\n 'font',\n 'forced-color-adjust',\n 'from',\n 'gradient',\n 'grid',\n 'grid-flow',\n 'grayscale',\n 'hue-rotate',\n 'hyphens',\n 'indent',\n 'inline',\n 'inset-ring',\n 'inset-shadow',\n 'invert',\n 'isolate',\n 'isolation',\n 'justify-items',\n 'justify-self',\n 'leading',\n 'line-clamp',\n 'list',\n 'list-image',\n 'mask',\n 'max-block',\n 'max-inline',\n 'mbe',\n 'mbs',\n 'min-block',\n 'min-inline',\n 'mix-blend',\n 'object',\n 'opacity',\n 'order',\n 'origin',\n 'outline',\n 'overflow',\n 'overscroll',\n 'place-content',\n 'place-items',\n 'place-self',\n 'placeholder',\n 'pbe',\n 'pbs',\n 'perspective',\n 'perspective-origin',\n 'resize',\n 'ring',\n 'rotate',\n 'rounded',\n 'row',\n 'saturate',\n 'scale',\n 'scheme',\n 'scroll',\n 'scrollbar',\n 'select',\n 'sepia',\n 'shadow',\n 'skew',\n 'snap',\n 'space',\n 'start',\n 'stroke',\n 'tab',\n 'table',\n 'text',\n 'to',\n 'touch',\n 'tracking',\n 'transform',\n 'transition',\n 'translate',\n 'underline-offset',\n 'via',\n 'whitespace',\n 'will-change',\n 'wrap',\n 'z',\n 'zoom',\n] as const;\n\nconst recognizedTailwindAuthorityTokens = new Set([\n 'antialiased',\n 'border-collapse',\n 'border-separate',\n 'capitalize',\n 'container',\n 'diagonal-fractions',\n 'italic',\n 'line-through',\n 'lining-nums',\n 'lowercase',\n 'no-underline',\n 'normal-case',\n 'normal-nums',\n 'not-italic',\n 'oldstyle-nums',\n 'ordinal',\n 'outline',\n 'overline',\n 'proportional-nums',\n 'slashed-zero',\n 'stacked-fractions',\n 'subpixel-antialiased',\n 'tabular-nums',\n 'truncate',\n 'underline',\n 'uppercase',\n]);\n\nfunction isCanonicalInteger(value: string): boolean {\n return /^(?:0|[1-9]\\d*)$/u.test(value);\n}\n\nfunction isCssVariableShorthand(value: string): boolean {\n return /^\\(--[A-Za-z_][A-Za-z0-9_-]*\\)$/u.test(value);\n}\n\nfunction borderCssAuthority(utility: string): CssAuthority | undefined {\n const family = borderFamilies.find(\n current => utility === current.namespace || utility.startsWith(`${current.namespace}-`),\n );\n if (family === undefined) return undefined;\n const suffix = utility === family.namespace ? '' : utility.slice(family.namespace.length + 1);\n if (suffix.length === 0 || isCanonicalInteger(suffix)) return family.width;\n if (family.namespace === 'border' && ['solid', 'dashed', 'dotted', 'double', 'hidden', 'none'].includes(suffix)) {\n return ['--tw-border-style', 'border-style'];\n }\n if (suffix.startsWith('[') && suffix.endsWith(']')) {\n const kind = tailwindArbitraryBorderKind(suffix);\n if (kind === 'border-width') return family.width;\n if (kind === 'border-color') return family.color;\n return 'unknown';\n }\n if (isCssVariableShorthand(suffix) || isPinnedTailwindColorToken(suffix)) return family.color;\n return 'unknown';\n}\n\nfunction shadowCssAuthority(utility: string): CssAuthority | undefined {\n if (utility === 'shadow') return ['--tw-shadow', 'box-shadow'];\n if (!utility.startsWith('shadow-')) return undefined;\n const suffix = utility.slice('shadow-'.length);\n if (suffix.startsWith('[') && suffix.endsWith(']')) {\n const kind = tailwindArbitraryShadowKind(suffix);\n if (kind === 'shadow-color') return ['--tw-shadow-color'];\n if (kind === 'shadow-geometry') return ['--tw-shadow', 'box-shadow'];\n return 'unknown';\n }\n if (isCssVariableShorthand(suffix) || shadowGeometryNames.has(suffix)) return ['--tw-shadow', 'box-shadow'];\n if (isPinnedTailwindColorToken(suffix)) return ['--tw-shadow-color'];\n return 'unknown';\n}\n\nfunction ringCssAuthority(utility: string): CssAuthority | undefined {\n if (utility === 'ring') return ['--tw-ring-shadow', 'box-shadow'];\n if (utility === 'ring-inset') return ['--tw-ring-inset'];\n if (!utility.startsWith('ring-')) return undefined;\n const suffix = utility.slice('ring-'.length);\n if (isCanonicalInteger(suffix)) return ['--tw-ring-shadow', 'box-shadow'];\n if (isPinnedTailwindColorToken(suffix)) return ['--tw-ring-color'];\n return 'unknown';\n}\n\nfunction insetShadowCssAuthority(utility: string): CssAuthority | undefined {\n if (utility === 'inset-shadow') return 'unknown';\n if (!utility.startsWith('inset-shadow-')) return undefined;\n const suffix = utility.slice('inset-shadow-'.length);\n if (insetShadowGeometryNames.has(suffix)) return ['--tw-inset-shadow', 'box-shadow'];\n if (suffix === 'initial' || isPinnedTailwindColorToken(suffix)) return ['--tw-inset-shadow-color'];\n return 'unknown';\n}\n\nfunction insetRingCssAuthority(utility: string): CssAuthority | undefined {\n if (utility === 'inset-ring') return ['--tw-inset-ring-shadow', 'box-shadow'];\n if (!utility.startsWith('inset-ring-')) return undefined;\n const suffix = utility.slice('inset-ring-'.length);\n if (isCanonicalInteger(suffix)) return ['--tw-inset-ring-shadow', 'box-shadow'];\n if (isPinnedTailwindColorToken(suffix)) return ['--tw-inset-ring-color'];\n return 'unknown';\n}\n\nfunction arbitraryBackgroundCssAuthority(value: string): CssAuthority {\n const arbitrary = value.match(/^\\[([\\s\\S]+)\\](?:\\/[\\s\\S]+)?$/u)?.[1];\n if (arbitrary === undefined) return 'unknown';\n const property = tailwindArbitraryBackgroundKind(`[${arbitrary}]`);\n return property === 'unknown' ? property : [property];\n}\n\nfunction isRecognizedTailwindAuthority(utility: string): boolean {\n const normalized = utility.startsWith('-') ? utility.slice(1) : utility;\n return (\n recognizedTailwindAuthorityTokens.has(normalized) ||\n recognizedTailwindAuthorityNamespaces.some(\n namespace => normalized === namespace || normalized.startsWith(`${namespace}-`),\n )\n );\n}\n\nfunction cssProperties(utility: string): CssAuthority | undefined {\n const arbitraryProperty = utility.match(/^\\[([^:]+):/u)?.[1];\n if (arbitraryProperty) return [arbitraryProperty];\n if (displayUtilities.has(utility)) return ['display'];\n if (/^flex-(?:row|row-reverse|col|col-reverse)$/u.test(utility)) return ['flex-direction'];\n if (/^flex-(?:wrap|wrap-reverse|nowrap)$/u.test(utility)) return ['flex-wrap'];\n if (/^flex-.+$/u.test(utility)) return ['flex'];\n if (/^grow(?:-.+)?$/u.test(utility)) return ['flex-grow'];\n if (/^shrink(?:-.+)?$/u.test(utility)) return ['flex-shrink'];\n if (/^basis-.+$/u.test(utility)) return ['flex-basis'];\n if (/^box-(?:border|content)$/u.test(utility)) return ['box-sizing'];\n if (/^justify-items-/u.test(utility)) return ['justify-items'];\n if (/^justify-self-/u.test(utility)) return ['justify-self'];\n if (/^justify-/u.test(utility)) return ['justify-content'];\n if (/^items-/u.test(utility)) return ['align-items'];\n if (utility === 'content-none') return ['--tw-content', 'content'];\n if (/^content-\\[/u.test(utility)) return ['--tw-content', 'content'];\n if (/^content-/u.test(utility)) return ['align-content'];\n if (/^self-/u.test(utility)) return ['align-self'];\n if (/^gap-x-/u.test(utility)) return ['column-gap'];\n if (/^gap-y-/u.test(utility)) return ['row-gap'];\n if (/^gap-/u.test(utility)) return ['gap'];\n if (/^order-/u.test(utility)) return ['order'];\n if (/^-?m-/u.test(utility)) return ['margin'];\n if (/^-?mx-/u.test(utility)) return ['margin-inline'];\n if (/^-?my-/u.test(utility)) return ['margin-block'];\n if (/^-?mt-/u.test(utility)) return ['margin-top'];\n if (/^-?mr-/u.test(utility)) return ['margin-right'];\n if (/^-?mb-/u.test(utility)) return ['margin-bottom'];\n if (/^-?ml-/u.test(utility)) return ['margin-left'];\n if (/^-?ms-/u.test(utility)) return ['margin-inline-start'];\n if (/^-?me-/u.test(utility)) return ['margin-inline-end'];\n if (/^p-/u.test(utility)) return ['padding'];\n if (/^px-/u.test(utility)) return ['padding-inline'];\n if (/^py-/u.test(utility)) return ['padding-block'];\n if (/^pt-/u.test(utility)) return ['padding-top'];\n if (/^pr-/u.test(utility)) return ['padding-right'];\n if (/^pb-/u.test(utility)) return ['padding-bottom'];\n if (/^pl-/u.test(utility)) return ['padding-left'];\n if (/^ps-/u.test(utility)) return ['padding-inline-start'];\n if (/^pe-/u.test(utility)) return ['padding-inline-end'];\n if (/^size-/u.test(utility)) return ['width', 'height'];\n if (/^w-/u.test(utility)) return ['width'];\n if (/^h-/u.test(utility)) return ['height'];\n if (/^min-w-/u.test(utility)) return ['min-width'];\n if (/^min-h-/u.test(utility)) return ['min-height'];\n if (/^max-w-/u.test(utility)) return ['max-width'];\n if (/^max-h-/u.test(utility)) return ['max-height'];\n const textValue = utility.match(/^text-([\\s\\S]+)$/u)?.[1];\n const [textBaseValue] = textValue?.split('/') ?? [];\n if (textBaseValue !== undefined && textSizes.has(textBaseValue)) return ['font-size', 'line-height'];\n const arbitraryText = utility.match(/^text-(\\[[\\s\\S]+\\])(?:\\/[^\\s]+)?$/u)?.[1];\n if (arbitraryText !== undefined) {\n const kind = tailwindArbitraryTextKind(arbitraryText);\n if (kind === 'color') return ['color'];\n if (kind === 'font-size') return utility.includes(']/') ? ['font-size', 'line-height'] : ['font-size'];\n return 'unknown';\n }\n if (/^text-(?:left|right|center|justify|start|end)$/u.test(utility)) return ['text-align'];\n if (/^text-(?:wrap|nowrap|balance|pretty)$/u.test(utility)) return ['text-wrap'];\n if (/^text-(?:ellipsis|clip)$/u.test(utility)) return ['text-overflow'];\n if (textValue !== undefined && isPinnedTailwindColorToken(textValue)) return ['color'];\n if (/^text-/u.test(utility)) return 'unknown';\n if (/^bg-(?:auto|cover|contain)$/u.test(utility)) return ['background-size'];\n if (/^bg-(?:fixed|local|scroll)$/u.test(utility)) return ['background-attachment'];\n if (/^bg-clip-/u.test(utility)) return ['background-clip'];\n if (/^bg-origin-/u.test(utility)) return ['background-origin'];\n if (/^bg-(?:bottom|center|left|left-bottom|left-top|right|right-bottom|right-top|top)$/u.test(utility)) {\n return ['background-position'];\n }\n if (/^bg-(?:repeat|no-repeat|repeat-x|repeat-y|repeat-round|repeat-space)$/u.test(utility)) {\n return ['background-repeat'];\n }\n if (/^bg-blend-/u.test(utility)) return ['background-blend-mode'];\n if (utility === 'bg-none') return ['background-image'];\n const backgroundValue = utility.match(/^bg-([\\s\\S]+)$/u)?.[1];\n if (backgroundValue?.startsWith('[')) return arbitraryBackgroundCssAuthority(backgroundValue);\n if (isCssVariableShorthand(backgroundValue ?? '')) return 'unknown';\n if (backgroundValue !== undefined && isPinnedTailwindColorToken(backgroundValue)) return ['background-color'];\n if (/^bg-/u.test(utility)) return 'unknown';\n const borderAuthority = borderCssAuthority(utility);\n if (borderAuthority !== undefined) return borderAuthority;\n if (/^rounded(?:-|$)/u.test(utility)) return ['border-radius'];\n const shadowAuthority = shadowCssAuthority(utility);\n if (shadowAuthority !== undefined) return shadowAuthority;\n const ringAuthority = ringCssAuthority(utility);\n if (ringAuthority !== undefined) return ringAuthority;\n const insetShadowAuthority = insetShadowCssAuthority(utility);\n if (insetShadowAuthority !== undefined) return insetShadowAuthority;\n const insetRingAuthority = insetRingCssAuthority(utility);\n if (insetRingAuthority !== undefined) return insetRingAuthority;\n if (utility === 'truncate') return ['overflow', 'text-overflow', 'white-space'];\n if (/^opacity-/u.test(utility)) return ['opacity'];\n if (/^overflow(?:-|$)/u.test(utility)) return ['overflow'];\n if (['static', 'fixed', 'absolute', 'relative', 'sticky'].includes(utility)) return ['position'];\n if (/^-?inset-x-/u.test(utility)) return ['inset-inline'];\n if (/^-?inset-y-/u.test(utility)) return ['inset-block'];\n if (/^-?inset-/u.test(utility)) return ['inset'];\n if (/^-?top-/u.test(utility)) return ['top'];\n if (/^-?right-/u.test(utility)) return ['right'];\n if (/^-?bottom-/u.test(utility)) return ['bottom'];\n if (/^-?left-/u.test(utility)) return ['left'];\n if (/^-?rotate-z-/u.test(utility)) return ['--tw-rotate-z', 'transform'];\n if (/^-?rotate-(?:x|y)-/u.test(utility)) return 'unknown';\n if (/^-?rotate-/u.test(utility)) return ['rotate'];\n if (/^scale-(?:x|y|z)-/u.test(utility)) return 'unknown';\n if (/^scale-(?:\\[|\\()/u.test(utility)) return ['scale'];\n if (/^scale-/u.test(utility)) return ['--tw-scale-x', '--tw-scale-y', '--tw-scale-z', 'scale'];\n if (/^-?translate-z-/u.test(utility)) return 'unknown';\n if (/^-?translate-x-/u.test(utility)) return ['--tw-translate-x', 'translate'];\n if (/^-?translate-y-/u.test(utility)) return ['--tw-translate-y', 'translate'];\n if (/^-?translate-/u.test(utility)) return ['--tw-translate-x', '--tw-translate-y', 'translate'];\n if (utility === 'transition-none') return ['transition-property'];\n if (utility === 'transition-discrete' || utility === 'transition-normal') return ['transition-behavior'];\n if (/^transition(?:-|$)/u.test(utility)) {\n return ['transition-property', 'transition-timing-function', 'transition-duration'];\n }\n if (/^duration-/u.test(utility)) return ['--tw-duration', 'transition-duration'];\n if (/^delay-/u.test(utility)) return ['transition-delay'];\n if (/^ease-/u.test(utility)) return ['--tw-ease', 'transition-timing-function'];\n if (/^grid-cols(?:-|$)/u.test(utility)) return ['grid-template-columns'];\n if (/^auto-cols(?:-|$)/u.test(utility)) return ['grid-auto-columns'];\n if (/^grid-rows(?:-|$)/u.test(utility)) return ['grid-template-rows'];\n if (/^auto-rows(?:-|$)/u.test(utility)) return ['grid-auto-rows'];\n if (/^col-(?:span-|auto$)/u.test(utility)) return ['grid-column'];\n if (/^col-start-/u.test(utility)) return ['grid-column-start'];\n if (/^col-end-/u.test(utility)) return ['grid-column-end'];\n if (/^row-(?:span-|auto$)/u.test(utility)) return ['grid-row'];\n if (/^row-start-/u.test(utility)) return ['grid-row-start'];\n if (/^row-end-/u.test(utility)) return ['grid-row-end'];\n if (/^table-(?:auto|fixed)$/u.test(utility)) return ['table-layout'];\n if (/^list-(?:disc|decimal|none)$/u.test(utility)) return ['list-style-type'];\n if (/^list-(?:inside|outside)$/u.test(utility)) return ['list-style-position'];\n if (/^object-(?:contain|cover|fill|none|scale-down)$/u.test(utility)) return ['object-fit'];\n if (/^object-/u.test(utility)) return ['object-position'];\n if (/^cursor-/u.test(utility)) return ['cursor'];\n if (/^pointer-events-/u.test(utility)) return ['pointer-events'];\n if (['visible', 'invisible', 'collapse'].includes(utility)) return ['visibility'];\n if (utility === 'sr-only') {\n return ['position', 'width', 'height', 'padding', 'margin', 'overflow', 'clip-path', 'white-space', 'border-width'];\n }\n if (utility === 'not-sr-only') {\n return ['position', 'width', 'height', 'padding', 'margin', 'overflow', 'clip-path', 'white-space'];\n }\n return isRecognizedTailwindAuthority(utility) ? 'unknown' : undefined;\n}\n\nexport function describeTailwindUtility(token: string): TailwindUtilityDescriptor | undefined {\n const split = splitVariants(token);\n if (split === undefined) return undefined;\n const { variants, utility: modifiedUtility } = split;\n const leadingImportant = modifiedUtility.startsWith('!');\n const trailingImportant = modifiedUtility.endsWith('!');\n if (leadingImportant && trailingImportant) return undefined;\n const utility = modifiedUtility.replace(/^!/u, '').replace(/!$/u, '');\n if (utility.length === 0) return undefined;\n const important = leadingImportant || trailingImportant || hasInternalDeclarationImportance(utility);\n const authority = cssProperties(utility);\n return {\n token,\n variants,\n utility,\n cssProperties: authority === undefined || authority === 'unknown' ? [] : authority,\n ...(authority === 'unknown' ? { hasUnknownCssAuthority: true } : {}),\n activation: activation(variants),\n hasGeneratedMediaVariant: hasGeneratedMediaVariant(variants),\n important,\n };\n}\n\nexport function describeTailwindDisplay(token: string): TailwindDisplayUtility | undefined {\n const descriptor = describeTailwindUtility(token);\n if (descriptor === undefined) return undefined;\n if (!descriptor.cssProperties.includes('display')) return undefined;\n return {\n token: descriptor.token,\n utility: descriptor.utility,\n activation: descriptor.activation,\n important: descriptor.important,\n };\n}\n\nfunction activationsIntersect(left: TailwindActivation, right: TailwindActivation): boolean {\n if (left.kind === 'base' || right.kind === 'base') return true;\n if ((left.mediaType ?? 'screen') !== (right.mediaType ?? 'screen')) return false;\n return mediaRangesIntersect(left.range, right.range);\n}\n\nexport function findTailwindClassConflicts(\n existingClassNames: readonly string[],\n generatedClassNames: readonly string[],\n): ReadonlySet<string> {\n const generatedTokens = new Set(generatedClassNames);\n const existing = existingClassNames\n .filter(token => !generatedTokens.has(token))\n .map(describeTailwindUtility)\n .filter(descriptor => descriptor !== undefined);\n const conflicts = new Set<string>();\n\n for (const generated of generatedClassNames\n .map(describeTailwindUtility)\n .filter(descriptor => descriptor !== undefined)) {\n const generatedProperties = generated.cssProperties;\n if (generatedProperties.length === 0) continue;\n if (\n existing.some(\n current =>\n activationsIntersect(current.activation, generated.activation) &&\n (current.hasUnknownCssAuthority === true ||\n generated.hasUnknownCssAuthority === true ||\n current.cssProperties.some(currentProperty =>\n generatedProperties.some(generatedProperty => cssPropertiesOverlap(currentProperty, generatedProperty)),\n )),\n )\n ) {\n conflicts.add(generated.token);\n }\n }\n\n return conflicts;\n}\n\nexport function hasTailwindClassConflict(\n existingClassNames: readonly string[],\n generatedClassNames: readonly string[],\n): boolean {\n return findTailwindClassConflicts(existingClassNames, generatedClassNames).size > 0;\n}\n","import { describeTailwindUtility, type TailwindUtilityDescriptor } from '../tailwind-class-conflict';\nimport { hasValidTailwindArbitrarySyntax } from '../tailwind-arbitrary-syntax';\nimport { isByteExactHtmlClassToken } from '../../../edit/html-attribute-value';\nimport {\n isConservativelyAdmittedBorderWidth,\n isConservativelyAdmittedTextLength,\n} from './tailwind-arbitrary-value-ownership';\n\nexport type TailwindCandidateClassification =\n | { readonly status: 'verified'; readonly descriptor: TailwindUtilityDescriptor }\n | { readonly status: 'unverified'; readonly reason: string };\n\ntype CssProperties = readonly string[] | ((value: string) => readonly string[] | undefined);\n\ninterface NamespaceRule {\n readonly namespace: string;\n readonly cssProperties: CssProperties;\n readonly negative?: boolean;\n readonly accepts: (value: string) => boolean;\n readonly acceptsNegative?: (value: string) => boolean;\n}\n\nconst exactTokenRegistry = Object.freeze([\n ['inline', ['display']],\n ['block', ['display']],\n ['inline-block', ['display']],\n ['flow-root', ['display']],\n ['flex', ['display']],\n ['inline-flex', ['display']],\n ['grid', ['display']],\n ['inline-grid', ['display']],\n ['contents', ['display']],\n ['table', ['display']],\n ['inline-table', ['display']],\n ['list-item', ['display']],\n ['hidden', ['display']],\n ['flex-row', ['flex-direction']],\n ['flex-row-reverse', ['flex-direction']],\n ['flex-col', ['flex-direction']],\n ['flex-col-reverse', ['flex-direction']],\n ['flex-wrap', ['flex-wrap']],\n ['flex-wrap-reverse', ['flex-wrap']],\n ['flex-nowrap', ['flex-wrap']],\n ['static', ['position']],\n ['fixed', ['position']],\n ['absolute', ['position']],\n ['relative', ['position']],\n ['sticky', ['position']],\n ['border', ['border-style', 'border-width']],\n ['shadow', ['--tw-shadow', 'box-shadow']],\n ['transition', ['transition-property', 'transition-timing-function', 'transition-duration']],\n ['visible', ['visibility']],\n ['invisible', ['visibility']],\n ['collapse', ['visibility']],\n [\n 'sr-only',\n ['position', 'width', 'height', 'padding', 'margin', 'overflow', 'clip-path', 'white-space', 'border-width'],\n ],\n ['not-sr-only', ['position', 'width', 'height', 'padding', 'margin', 'overflow', 'clip-path', 'white-space']],\n] as const);\n\nconst defaultColorNames = Object.freeze([\n 'inherit',\n 'current',\n 'transparent',\n 'black',\n 'white',\n 'red',\n 'orange',\n 'amber',\n 'yellow',\n 'lime',\n 'green',\n 'emerald',\n 'teal',\n 'cyan',\n 'sky',\n 'blue',\n 'indigo',\n 'violet',\n 'purple',\n 'fuchsia',\n 'pink',\n 'rose',\n 'slate',\n 'gray',\n 'zinc',\n 'neutral',\n 'stone',\n] as const);\nconst defaultColorShades = Object.freeze(['50', '100', '200', '300', '400', '500', '600', '700', '800', '900', '950']);\nconst textSizes = Object.freeze([\n 'xs',\n 'sm',\n 'base',\n 'lg',\n 'xl',\n '2xl',\n '3xl',\n '4xl',\n '5xl',\n '6xl',\n '7xl',\n '8xl',\n '9xl',\n]);\n\nfunction isNumber(value: string): boolean {\n return /^(?:0|[1-9]\\d*)(?:\\.\\d+)?$/u.test(value);\n}\n\nfunction isInteger(value: string): boolean {\n return /^(?:0|[1-9]\\d*)$/u.test(value);\n}\n\nfunction isPercentage(value: string): boolean {\n if (!isNumber(value)) return false;\n const number = Number(value);\n return number >= 0 && number <= 100;\n}\n\nfunction hasValidArbitrarySyntax(value: string): boolean {\n return hasValidTailwindArbitrarySyntax(value);\n}\n\nfunction hasCompilerMeaningfulArbitraryValue(value: string): boolean {\n if (!hasValidArbitrarySyntax(value)) return false;\n\n const payload = value\n .slice(1, -1)\n .replace(/\\/\\*[\\s\\S]*?\\*\\//gu, '')\n .replace(/^[a-z][a-z-]*:/iu, '')\n .replace(/[\\s_()[\\]{}'\"`]/gu, '');\n return payload.length > 0;\n}\n\nfunction isCssVariableValue(value: string): boolean {\n return /^\\(--[A-Za-z_][A-Za-z0-9_-]*\\)$/u.test(value);\n}\n\nfunction isArbitraryOrVariable(value: string): boolean {\n return hasCompilerMeaningfulArbitraryValue(value) || isCssVariableValue(value);\n}\n\nfunction isFraction(value: string): boolean {\n const [numerator, denominator, remainder] = value.split('/');\n return remainder === undefined && isInteger(numerator ?? '') && /^[1-9]\\d*$/u.test(denominator ?? '');\n}\n\nfunction isSpacing(value: string): boolean {\n return isNumber(value) || value === 'px' || isArbitraryOrVariable(value);\n}\n\nfunction isMargin(value: string): boolean {\n return isSpacing(value) || value === 'auto';\n}\n\nfunction isFractionalSpacing(value: string): boolean {\n return isSpacing(value) || isFraction(value) || value === 'full';\n}\n\nfunction isInset(value: string): boolean {\n return isFractionalSpacing(value) || value === 'auto';\n}\n\nfunction isDimension(value: string): boolean {\n return (\n isFractionalSpacing(value) ||\n value === 'auto' ||\n ['screen', 'dvh', 'dvw', 'lvh', 'lvw', 'svh', 'svw', 'min', 'max', 'fit'].includes(value)\n );\n}\n\nfunction isWidth(value: string): boolean {\n return isDimension(value) || /^(?:3xs|2xs|xs|sm|md|lg|xl|[2-7]xl)$/u.test(value);\n}\n\nfunction isArbitraryColor(value: string): boolean {\n if (!hasCompilerMeaningfulArbitraryValue(value)) return false;\n const color = value.slice(1, -1);\n return /^(?:color:|#|(?:rgb|rgba|hsl|hsla|hwb|lab|lch|oklab|oklch|color|light-dark|color-mix|var)\\()/u.test(color);\n}\n\nfunction isBackgroundImage(value: string): boolean {\n if (!hasCompilerMeaningfulArbitraryValue(value)) return false;\n const image = value.slice(1, -1);\n return /^(?:image:|url\\(|(?:linear|radial|conic)-gradient\\()/u.test(image);\n}\n\nfunction isColor(value: string): boolean {\n const [color, opacity, remainder] = value.split('/');\n if (remainder !== undefined) return false;\n\n const isDefault =\n ['inherit', 'current', 'transparent', 'black', 'white'].includes(color ?? '') ||\n (defaultColorNames.includes((color?.split('-')[0] ?? '') as (typeof defaultColorNames)[number]) &&\n defaultColorShades.includes((color?.split('-')[1] ?? '') as (typeof defaultColorShades)[number]) &&\n color?.split('-').length === 2);\n if (!isDefault && !isArbitraryColor(color ?? '') && !isCssVariableValue(color ?? '')) return false;\n return opacity === undefined || isPercentage(opacity) || isArbitraryOrVariable(opacity);\n}\n\nfunction isBackgroundColor(value: string): boolean {\n const [color] = value.split('/');\n if (isCssVariableValue(color ?? '')) return false;\n if (/^\\[var\\(/u.test(color ?? '')) return false;\n return isColor(value);\n}\n\nfunction textCssProperties(value: string): readonly string[] | undefined {\n const [size, lineHeight, remainder] = value.split('/');\n const hasVerifiedLineHeight =\n remainder === undefined && (lineHeight === undefined || isNumber(lineHeight) || isArbitraryOrVariable(lineHeight));\n if (textSizes.includes((size ?? '') as (typeof textSizes)[number])) {\n return hasVerifiedLineHeight ? ['font-size', 'line-height'] : undefined;\n }\n const arbitrarySize = size ?? '';\n const hasUnambiguousArbitrarySize =\n hasCompilerMeaningfulArbitraryValue(arbitrarySize) && isConservativelyAdmittedTextLength(arbitrarySize);\n if (hasUnambiguousArbitrarySize) {\n if (!hasVerifiedLineHeight) return undefined;\n return lineHeight === undefined ? ['font-size'] : ['font-size', 'line-height'];\n }\n if (hasCompilerMeaningfulArbitraryValue(value) && /^\\[color:[\\s\\S]+\\]$/u.test(value)) return ['color'];\n if (isColor(value)) return ['color'];\n return undefined;\n}\n\nfunction acceptsText(value: string): boolean {\n return textCssProperties(value) !== undefined;\n}\n\nfunction borderCssProperties(value: string): readonly string[] | undefined {\n if (isInteger(value) || (hasCompilerMeaningfulArbitraryValue(value) && isConservativelyAdmittedBorderWidth(value))) {\n return ['border-style', 'border-width'];\n }\n if (oneOf(['solid', 'dashed', 'dotted', 'double', 'hidden', 'none'])(value)) {\n return ['--tw-border-style', 'border-style'];\n }\n if (isColor(value) || isCssVariableValue(value) || /^\\[(?:color:|var\\()/u.test(value)) {\n return ['border-color'];\n }\n return undefined;\n}\n\nfunction transitionCssProperties(value: string): readonly string[] {\n return value === 'none'\n ? ['transition-property']\n : ['transition-property', 'transition-timing-function', 'transition-duration'];\n}\n\nfunction scaleCssProperties(value: string): readonly string[] | undefined {\n if (isInteger(value)) return ['--tw-scale-x', '--tw-scale-y', '--tw-scale-z', 'scale'];\n return isArbitraryOrVariable(value) ? ['scale'] : undefined;\n}\n\nfunction oneOf(values: readonly string[]): (value: string) => boolean {\n return value => values.includes(value);\n}\n\nconst namespaceRegistry: readonly NamespaceRule[] = Object.freeze([\n {\n namespace: 'items',\n cssProperties: ['align-items'],\n accepts: oneOf(['start', 'end', 'center', 'baseline', 'stretch']),\n },\n { namespace: 'gap', cssProperties: ['gap'], accepts: value => isNumber(value) || isArbitraryOrVariable(value) },\n {\n namespace: 'gap-x',\n cssProperties: ['column-gap'],\n accepts: value => isNumber(value) || isArbitraryOrVariable(value),\n },\n { namespace: 'gap-y', cssProperties: ['row-gap'], accepts: value => isNumber(value) || isArbitraryOrVariable(value) },\n { namespace: 'm', cssProperties: ['margin'], negative: true, accepts: isMargin, acceptsNegative: isSpacing },\n { namespace: 'mx', cssProperties: ['margin-inline'], negative: true, accepts: isMargin, acceptsNegative: isSpacing },\n { namespace: 'my', cssProperties: ['margin-block'], negative: true, accepts: isMargin, acceptsNegative: isSpacing },\n { namespace: 'mt', cssProperties: ['margin-top'], negative: true, accepts: isMargin, acceptsNegative: isSpacing },\n { namespace: 'mr', cssProperties: ['margin-right'], negative: true, accepts: isMargin, acceptsNegative: isSpacing },\n { namespace: 'mb', cssProperties: ['margin-bottom'], negative: true, accepts: isMargin, acceptsNegative: isSpacing },\n { namespace: 'ml', cssProperties: ['margin-left'], negative: true, accepts: isMargin, acceptsNegative: isSpacing },\n {\n namespace: 'ms',\n cssProperties: ['margin-inline-start'],\n negative: true,\n accepts: isMargin,\n acceptsNegative: isSpacing,\n },\n {\n namespace: 'me',\n cssProperties: ['margin-inline-end'],\n negative: true,\n accepts: isMargin,\n acceptsNegative: isSpacing,\n },\n {\n namespace: 'p',\n cssProperties: ['padding'],\n accepts: value => isNumber(value) || value === 'px' || isArbitraryOrVariable(value),\n },\n {\n namespace: 'px',\n cssProperties: ['padding-inline'],\n accepts: value => isNumber(value) || value === 'px' || isArbitraryOrVariable(value),\n },\n {\n namespace: 'py',\n cssProperties: ['padding-block'],\n accepts: value => isNumber(value) || value === 'px' || isArbitraryOrVariable(value),\n },\n {\n namespace: 'pt',\n cssProperties: ['padding-top'],\n accepts: value => isNumber(value) || value === 'px' || isArbitraryOrVariable(value),\n },\n {\n namespace: 'pr',\n cssProperties: ['padding-right'],\n accepts: value => isNumber(value) || value === 'px' || isArbitraryOrVariable(value),\n },\n {\n namespace: 'pb',\n cssProperties: ['padding-bottom'],\n accepts: value => isNumber(value) || value === 'px' || isArbitraryOrVariable(value),\n },\n {\n namespace: 'pl',\n cssProperties: ['padding-left'],\n accepts: value => isNumber(value) || value === 'px' || isArbitraryOrVariable(value),\n },\n {\n namespace: 'ps',\n cssProperties: ['padding-inline-start'],\n accepts: value => isNumber(value) || value === 'px' || isArbitraryOrVariable(value),\n },\n {\n namespace: 'pe',\n cssProperties: ['padding-inline-end'],\n accepts: value => isNumber(value) || value === 'px' || isArbitraryOrVariable(value),\n },\n { namespace: 'w', cssProperties: ['width'], accepts: isWidth },\n { namespace: 'h', cssProperties: ['height'], accepts: isDimension },\n { namespace: 'min-w', cssProperties: ['min-width'], accepts: isWidth },\n { namespace: 'min-h', cssProperties: ['min-height'], accepts: isDimension },\n { namespace: 'max-w', cssProperties: ['max-width'], accepts: value => value !== 'auto' && isWidth(value) },\n { namespace: 'max-h', cssProperties: ['max-height'], accepts: value => value !== 'auto' && isDimension(value) },\n { namespace: 'text', cssProperties: textCssProperties, accepts: acceptsText },\n { namespace: 'bg', cssProperties: ['background-color'], accepts: isBackgroundColor },\n { namespace: 'bg', cssProperties: ['background-image'], accepts: isBackgroundImage },\n {\n namespace: 'border',\n cssProperties: borderCssProperties,\n accepts: value => borderCssProperties(value) !== undefined,\n },\n {\n namespace: 'rounded',\n cssProperties: ['border-radius'],\n accepts: value =>\n oneOf(['none', 'xs', 'sm', 'md', 'lg', 'xl', '2xl', '3xl', '4xl', 'full'])(value) || isArbitraryOrVariable(value),\n },\n {\n namespace: 'shadow',\n cssProperties: ['--tw-shadow', 'box-shadow'],\n accepts: value => oneOf(['2xs', 'xs', 'sm', 'md', 'lg', 'xl', '2xl', 'none'])(value) || isCssVariableValue(value),\n },\n {\n namespace: 'opacity',\n cssProperties: ['opacity'],\n accepts: value => isPercentage(value) || isArbitraryOrVariable(value),\n },\n {\n namespace: 'overflow',\n cssProperties: ['overflow'],\n accepts: oneOf(['auto', 'hidden', 'clip', 'visible', 'scroll']),\n },\n {\n namespace: 'inset',\n cssProperties: ['inset'],\n negative: true,\n accepts: isInset,\n acceptsNegative: isFractionalSpacing,\n },\n {\n namespace: 'inset-x',\n cssProperties: ['inset-inline'],\n negative: true,\n accepts: isInset,\n acceptsNegative: isFractionalSpacing,\n },\n {\n namespace: 'inset-y',\n cssProperties: ['inset-block'],\n negative: true,\n accepts: isInset,\n acceptsNegative: isFractionalSpacing,\n },\n { namespace: 'top', cssProperties: ['top'], negative: true, accepts: isInset, acceptsNegative: isFractionalSpacing },\n {\n namespace: 'right',\n cssProperties: ['right'],\n negative: true,\n accepts: isInset,\n acceptsNegative: isFractionalSpacing,\n },\n {\n namespace: 'bottom',\n cssProperties: ['bottom'],\n negative: true,\n accepts: isInset,\n acceptsNegative: isFractionalSpacing,\n },\n {\n namespace: 'left',\n cssProperties: ['left'],\n negative: true,\n accepts: isInset,\n acceptsNegative: isFractionalSpacing,\n },\n {\n namespace: 'rotate',\n cssProperties: ['rotate'],\n negative: true,\n accepts: value => isInteger(value) || isArbitraryOrVariable(value),\n },\n {\n namespace: 'scale',\n cssProperties: scaleCssProperties,\n accepts: value => scaleCssProperties(value) !== undefined,\n },\n {\n namespace: 'translate',\n cssProperties: ['--tw-translate-x', '--tw-translate-y', 'translate'],\n negative: true,\n accepts: isFractionalSpacing,\n },\n {\n namespace: 'transition',\n cssProperties: transitionCssProperties,\n accepts: oneOf(['all', 'colors', 'opacity', 'shadow', 'transform', 'none']),\n },\n {\n namespace: 'grid-cols',\n cssProperties: ['grid-template-columns'],\n accepts: value => /^[1-9]\\d*$/u.test(value) || oneOf(['none', 'subgrid'])(value) || isArbitraryOrVariable(value),\n },\n { namespace: 'table', cssProperties: ['table-layout'], accepts: oneOf(['auto', 'fixed']) },\n {\n namespace: 'list',\n cssProperties: value => [['disc', 'decimal', 'none'].includes(value) ? 'list-style-type' : 'list-style-position'],\n accepts: oneOf(['disc', 'decimal', 'none', 'inside', 'outside']),\n },\n {\n namespace: 'object',\n cssProperties: value => [\n ['contain', 'cover', 'fill', 'none', 'scale-down'].includes(value) ? 'object-fit' : 'object-position',\n ],\n accepts: oneOf([\n 'contain',\n 'cover',\n 'fill',\n 'none',\n 'scale-down',\n 'bottom',\n 'center',\n 'left',\n 'left-bottom',\n 'left-top',\n 'right',\n 'right-bottom',\n 'right-top',\n 'top',\n ]),\n },\n {\n namespace: 'cursor',\n cssProperties: ['cursor'],\n accepts: oneOf([\n 'auto',\n 'default',\n 'pointer',\n 'wait',\n 'text',\n 'move',\n 'help',\n 'not-allowed',\n 'none',\n 'context-menu',\n 'progress',\n 'cell',\n 'crosshair',\n 'vertical-text',\n 'alias',\n 'copy',\n 'no-drop',\n 'grab',\n 'grabbing',\n 'all-scroll',\n 'col-resize',\n 'row-resize',\n 'n-resize',\n 'e-resize',\n 's-resize',\n 'w-resize',\n 'ne-resize',\n 'nw-resize',\n 'se-resize',\n 'sw-resize',\n 'ew-resize',\n 'ns-resize',\n 'nesw-resize',\n 'nwse-resize',\n 'zoom-in',\n 'zoom-out',\n ]),\n },\n { namespace: 'pointer-events', cssProperties: ['pointer-events'], accepts: oneOf(['auto', 'none']) },\n]);\n\nconst exactVariantRegistry = Object.freeze([\n 'hover',\n 'focus',\n 'focus-within',\n 'focus-visible',\n 'active',\n 'visited',\n 'target',\n 'first',\n 'last',\n 'only',\n 'odd',\n 'even',\n 'disabled',\n 'enabled',\n 'checked',\n 'indeterminate',\n 'required',\n 'valid',\n 'invalid',\n 'dark',\n 'motion-safe',\n 'motion-reduce',\n 'contrast-more',\n 'contrast-less',\n 'portrait',\n 'landscape',\n 'print',\n 'sm',\n 'md',\n 'lg',\n 'xl',\n '2xl',\n] as const);\n\nfunction variantIsVerified(variant: string): boolean {\n return exactVariantRegistry.includes(variant as (typeof exactVariantRegistry)[number]);\n}\n\nfunction parseArbitraryProperty(utility: string): string | undefined {\n if (!hasValidArbitrarySyntax(utility)) return undefined;\n const inner = utility.slice(1, -1);\n const separator = inner.indexOf(':');\n if (separator <= 0) return undefined;\n\n const property = inner.slice(0, separator);\n const value = inner.slice(separator + 1);\n if (!/^(?:--[A-Za-z_][A-Za-z0-9_-]*|[A-Za-z][A-Za-z0-9-]*)$/u.test(property)) return undefined;\n if (value.trim().length === 0) return undefined;\n return property;\n}\n\nfunction registryCssProperties(utility: string): readonly string[] | undefined {\n const exact = exactTokenRegistry.find(([token]) => token === utility);\n if (exact !== undefined) return exact[1];\n\n const negative = utility.startsWith('-');\n const value = negative ? utility.slice(1) : utility;\n for (const rule of namespaceRegistry) {\n const separator = `${rule.namespace}-`;\n if (!value.startsWith(separator)) continue;\n const suffix = value.slice(separator.length);\n if (suffix.length === 0) continue;\n if (negative) {\n if (rule.negative !== true || !(rule.acceptsNegative ?? rule.accepts)(suffix)) continue;\n } else if (!rule.accepts(suffix)) continue;\n return typeof rule.cssProperties === 'function' ? rule.cssProperties(suffix) : rule.cssProperties;\n }\n\n return undefined;\n}\n\nexport class TailwindCandidateClassifier {\n classify(token: string): TailwindCandidateClassification {\n if (!isByteExactHtmlClassToken(token)) {\n return {\n status: 'unverified',\n reason: 'The decoded candidate cannot be emitted as the same raw HTML source token.',\n };\n }\n\n if (token.includes('\\\\')) {\n return { status: 'unverified', reason: 'Source escapes make the Tailwind candidate ambiguous.' };\n }\n\n const descriptor = describeTailwindUtility(token);\n if (descriptor === undefined) {\n return { status: 'unverified', reason: 'The Tailwind candidate has malformed variant or bracket structure.' };\n }\n if (descriptor.hasGeneratedMediaVariant) {\n return {\n status: 'unverified',\n reason: 'Generated exact-media variants cannot be supplied as source candidates.',\n };\n }\n if (!descriptor.variants.every(variantIsVerified)) {\n return {\n status: 'unverified',\n reason: 'The Tailwind candidate contains an unverified or target-changing variant.',\n };\n }\n\n const arbitraryProperty = parseArbitraryProperty(descriptor.utility);\n const cssProperties =\n arbitraryProperty === undefined ? registryCssProperties(descriptor.utility) : [arbitraryProperty];\n if (cssProperties === undefined || cssProperties.length === 0) {\n return { status: 'unverified', reason: 'The utility is not in the compiler-proven built-in registry.' };\n }\n\n return { status: 'verified', descriptor: { ...descriptor, cssProperties } };\n }\n}\n","import { TailwindArbitraryPropertyEncoder } from '../adapter/tailwind/extended/tailwind-arbitrary-property.encoder';\nimport { TailwindCandidateClassifier } from '../adapter/tailwind/extended/tailwind-candidate-classifier';\nimport { describeTailwindDisplay } from '../adapter/tailwind/tailwind-class-conflict';\nimport { analyzeTailwindArbitrarySyntax } from '../adapter/tailwind/tailwind-arbitrary-syntax';\nimport type {\n SourceClassTokenClassification,\n SourcePropertyEvidence,\n SourceStyleDeclaration,\n SourceStyleDeclarationClassification,\n} from '../semantic/source-property-evidence';\n\nexport class TailwindSourcePropertyEvidence implements SourcePropertyEvidence {\n private readonly classifier = new TailwindCandidateClassifier();\n private readonly styleEncoder = new TailwindArbitraryPropertyEncoder();\n\n classifyClassToken(token: string): SourceClassTokenClassification {\n const classification = this.classifier.classify(token);\n if (classification.status === 'unverified') return classification;\n const display = describeTailwindDisplay(token);\n return {\n status: 'verified',\n evidence: {\n source: token,\n properties: classification.descriptor.cssProperties,\n important: classification.descriptor.important,\n activation: classification.descriptor.activation,\n ...(display === undefined ? {} : { display: display.utility }),\n },\n };\n }\n\n classifyStyleDeclaration(declaration: SourceStyleDeclaration): SourceStyleDeclarationClassification {\n try {\n const candidate = this.styleEncoder.encode(declaration);\n const arbitrary = analyzeTailwindArbitrarySyntax(candidate);\n return arbitrary === undefined || arbitrary.important\n ? { status: 'unverified', priorityText: arbitrary?.important === true }\n : { status: 'verified' };\n } catch {\n let priorityText = false;\n try {\n priorityText = analyzeTailwindArbitrarySyntax(this.styleEncoder.encode(declaration))?.important === true;\n } catch {\n // The source declaration is not encodable by this target.\n }\n return { status: 'unverified', priorityText };\n }\n }\n}\n","import type { SemanticResult } from './flex-semantic.model';\n\nexport type FlexSelfAlignment = 'auto' | 'start' | 'end' | 'center' | 'baseline' | 'stretch';\n\nexport interface FlexAlignSemantics {\n readonly alignment: FlexSelfAlignment;\n}\n\nconst alignments = new Set<FlexSelfAlignment>(['auto', 'start', 'end', 'center', 'baseline', 'stretch']);\n\nexport function planFlexAlignSemantics(value: string): SemanticResult<FlexAlignSemantics> {\n const alignment = (value.trim() || 'stretch') as FlexSelfAlignment;\n return alignments.has(alignment)\n ? { status: 'planned', value: { alignment } }\n : { status: 'invalid', code: 'invalid-value' };\n}\n","import type { TailwindStrategyResult } from '../tailwind-semantic.model';\nimport {\n planFlexAlignSemantics,\n type FlexAlignSemantics,\n type FlexSelfAlignment,\n} from '../../../flex/flex-align.semantic';\n\nconst selfAlignment: Readonly<Record<FlexSelfAlignment, string>> = {\n auto: 'self-auto',\n start: 'self-start',\n end: 'self-end',\n center: 'self-center',\n baseline: 'self-baseline',\n stretch: 'self-stretch',\n};\n\nexport function renderFlexAlign(value: FlexAlignSemantics): TailwindStrategyResult {\n return { status: 'converted', classNames: [selfAlignment[value.alignment]] };\n}\n\nexport function planFlexAlign(value: string): TailwindStrategyResult {\n const planned = planFlexAlignSemantics(value);\n return planned.status === 'planned' ? renderFlexAlign(planned.value) : planned;\n}\n","import type { SemanticResult } from './flex-semantic.model';\n\nexport interface FlexFillSemantics {\n readonly margin: '0';\n readonly width: '100%';\n readonly height: '100%';\n readonly minWidth: '100%';\n readonly minHeight: '100%';\n}\n\nconst fill: FlexFillSemantics = {\n margin: '0',\n width: '100%',\n height: '100%',\n minWidth: '100%',\n minHeight: '100%',\n};\n\nexport function planFlexFillSemantics(): SemanticResult<FlexFillSemantics> {\n return { status: 'planned', value: fill };\n}\n","import type { TailwindStrategyResult } from '../tailwind-semantic.model';\nimport { planFlexFillSemantics, type FlexFillSemantics } from '../../../flex/flex-fill.semantic';\n\nexport function renderFlexFill(_value: FlexFillSemantics): TailwindStrategyResult {\n return {\n status: 'converted',\n classNames: ['m-0', 'w-full', 'h-full', 'min-w-full', 'min-h-full'],\n };\n}\n\nexport function planFlexFill(): TailwindStrategyResult {\n const planned = planFlexFillSemantics();\n return planned.status === 'planned' ? renderFlexFill(planned.value) : planned;\n}\n","export type ParsedValue<T> = { readonly ok: true; readonly value: T } | { readonly ok: false };\n\nexport type CssLength = string & { readonly __cssLength: unique symbol };\n\nexport interface CssLengthOptions {\n readonly fallbackUnit: 'px' | '%';\n}\n\nconst NUMBER = String.raw`-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)`;\nconst LENGTH = new RegExp(`^${NUMBER}(?:%|px|r?em|v(?:w|h|min|max)|ch|ex|cm|mm|in|pt|pc)$`);\nconst UNITLESS = new RegExp(`^${NUMBER}$`);\nconst CSS_FUNCTION = /^(?:calc|clamp|min|max|var)\\([a-zA-Z0-9_%+*/.,()\\-\\s]+\\)$/;\n\nexport function parseCssLength(source: string, options: CssLengthOptions): ParsedValue<CssLength> {\n const value = source.trim();\n if (UNITLESS.test(value)) {\n return { ok: true, value: `${value}${options.fallbackUnit}` as CssLength };\n }\n if (LENGTH.test(value) || CSS_FUNCTION.test(value)) {\n return { ok: true, value: value as CssLength };\n }\n return { ok: false };\n}\n","import type { ParsedValue } from './css-length';\n\nexport type LayoutDirection = 'row' | 'row-reverse' | 'column' | 'column-reverse';\nexport type LayoutWrap = 'nowrap' | 'wrap' | 'wrap-reverse';\n\nexport interface LayoutSemantics {\n readonly direction: LayoutDirection;\n readonly wrap: LayoutWrap;\n readonly explicitWrap: boolean;\n readonly display: 'flex' | 'inline-flex';\n readonly boxSizing: 'border-box';\n}\n\nconst directions = new Set<LayoutDirection>(['row', 'row-reverse', 'column', 'column-reverse']);\nconst wraps = new Set<LayoutWrap>(['nowrap', 'wrap', 'wrap-reverse']);\n\nexport function parseLayout(value: string): ParsedValue<LayoutSemantics> {\n const tokens = value.split(/\\s+/).filter(Boolean);\n const direction = (tokens.shift() ?? 'row') as LayoutDirection;\n if (!directions.has(direction)) return { ok: false };\n\n const wrapTokens = tokens.filter(token => wraps.has(token as LayoutWrap));\n if (wrapTokens.length > 1) return { ok: false };\n\n let wrap: LayoutWrap = 'nowrap';\n let display: LayoutSemantics['display'] = 'flex';\n for (const token of tokens) {\n if (wraps.has(token as LayoutWrap)) {\n wrap = token as LayoutWrap;\n } else if (token === 'inline' && display === 'flex') {\n display = 'inline-flex';\n } else {\n return { ok: false };\n }\n }\n\n return {\n ok: true,\n value: { direction, wrap, explicitWrap: wrapTokens.length === 1, display, boxSizing: 'border-box' },\n };\n}\n","import { parseCssLength, type CssLength } from './css-length';\nimport type { SemanticResult } from './flex-semantic.model';\nimport { parseLayout, type LayoutSemantics } from './layout.semantic';\n\nexport interface FlexItemInput {\n readonly basis: string;\n readonly grow?: string;\n readonly shrink?: string;\n readonly layout?: string;\n}\n\nexport type FlexBasisSemantics =\n | { readonly kind: 'keyword'; readonly value: 'auto' }\n | { readonly kind: 'literal' | 'computed'; readonly value: CssLength };\n\nexport interface FlexItemSemantics {\n readonly grow: string;\n readonly shrink: string;\n readonly basis: FlexBasisSemantics;\n readonly axis: 'width' | 'height';\n readonly min?: CssLength;\n readonly max?: CssLength;\n readonly boxSizing: 'border-box';\n}\n\nconst FACTOR = /^\\d+(?:\\.\\d+)?$/;\nconst unconstrainedBases = new Set(['0%', '0px', '0.000000001px', 'auto']);\n\nfunction sizingAxis(layout: LayoutSemantics): FlexItemSemantics['axis'] {\n return layout.direction.startsWith('column') ? 'height' : 'width';\n}\n\nexport function planFlexItemSemantics(input: FlexItemInput): SemanticResult<FlexItemSemantics> {\n if (input.layout === undefined) {\n return {\n status: 'review',\n code: 'context-unverified',\n reason: 'Flex sizing depends on a dynamic parent direction or wrapping mode.',\n suggestion: 'Make the parent layout static or migrate this flex item manually.',\n };\n }\n\n const layout = parseLayout(input.layout);\n if (!layout.ok) return { status: 'invalid', code: 'invalid-value' };\n\n let grow = input.grow?.trim() || '1';\n let shrink = input.shrink?.trim() || '1';\n let basis = input.basis.trim();\n const shorthand = basis.startsWith('calc(') ? undefined : basis.match(/^(\\S+)\\s+(\\S+)\\s+(.+)$/);\n if (shorthand) {\n grow = shorthand[1] ?? grow;\n shrink = shorthand[2] ?? shrink;\n basis = shorthand[3] ?? basis;\n } else if (basis.split(/\\s+/).length > 1 && !basis.startsWith('calc(')) {\n return { status: 'invalid', code: 'invalid-value' };\n }\n if (!FACTOR.test(grow) || !FACTOR.test(shrink)) return { status: 'invalid', code: 'invalid-value' };\n\n const axis = sizingAxis(layout.value);\n let isValue = false;\n let usingCalc = false;\n\n if (!basis) {\n basis = axis === 'width' ? '0%' : '0.000000001px';\n } else if (basis === 'initial' || basis === 'nogrow') {\n grow = '0';\n basis = 'auto';\n } else if (basis === 'grow') {\n basis = '100%';\n } else if (basis === 'noshrink') {\n shrink = '0';\n basis = 'auto';\n } else if (basis === 'none') {\n grow = '0';\n shrink = '0';\n basis = 'auto';\n } else if (basis !== 'auto') {\n const parsed = parseCssLength(basis, { fallbackUnit: '%' });\n if (!parsed.ok) return { status: 'invalid', code: 'invalid-value' };\n basis = parsed.value;\n usingCalc = basis.startsWith('calc(');\n isValue = usingCalc || !basis.endsWith('%');\n if (basis === '0px') basis = '0%';\n }\n\n const fixed = grow === '0' && shrink === '0';\n const constrainedBasis = basis as CssLength;\n const min = !unconstrainedBases.has(basis) && (fixed || (isValue && grow !== '0')) ? constrainedBasis : undefined;\n const max =\n !unconstrainedBases.has(basis) && (fixed || (!usingCalc && shrink !== '0')) ? constrainedBasis : undefined;\n const effectiveBasis =\n min || max ? (layout.value.wrap === 'wrap' ? (max ?? min ?? basis) : isValue ? basis : '100%') : basis;\n const semanticBasis: FlexBasisSemantics =\n effectiveBasis === 'auto'\n ? { kind: 'keyword', value: effectiveBasis }\n : { kind: effectiveBasis.startsWith('calc(') ? 'computed' : 'literal', value: effectiveBasis as CssLength };\n\n return {\n status: 'planned',\n value: { grow, shrink, basis: semanticBasis, axis, min, max, boxSizing: 'border-box' },\n };\n}\n","import type { TailwindStrategyResult } from '../tailwind-semantic.model';\nimport { planFlexItemSemantics, type FlexItemInput, type FlexItemSemantics } from '../../../flex/flex-item.semantic';\n\nconst property = (name: string, value: string) => `[${name}:${value.replaceAll(/\\s+/g, '_')}]`;\n\nexport function renderFlexItem(value: FlexItemSemantics): readonly string[] {\n const flexClasses =\n value.basis.kind === 'computed'\n ? [\n property('flex-grow', value.grow),\n property('flex-shrink', value.shrink),\n property('flex-basis', value.basis.value),\n ]\n : [property('flex', `${value.grow} ${value.shrink} ${value.basis.value}`)];\n return [\n ...flexClasses,\n ...(value.min ? [property(`min-${value.axis}`, value.min)] : []),\n ...(value.max ? [property(`max-${value.axis}`, value.max)] : []),\n { 'border-box': 'box-border' }[value.boxSizing],\n ];\n}\n\nexport function planFlexItem(input: FlexItemInput): TailwindStrategyResult {\n const planned = planFlexItemSemantics(input);\n return planned.status === 'planned' ? { status: 'converted', classNames: renderFlexItem(planned.value) } : planned;\n}\n","import { parseCssLength, type CssLength } from './css-length';\nimport type { SemanticResult } from './flex-semantic.model';\nimport { parseLayout } from './layout.semantic';\n\nexport interface FlexOffsetSemantics {\n readonly axis: 'inline-start' | 'block-start';\n readonly length: CssLength;\n}\n\nexport function planFlexOffsetSemantics(\n value: string,\n layoutValue: string | undefined,\n): SemanticResult<FlexOffsetSemantics> {\n const offset = parseCssLength(value.trim() || '0', { fallbackUnit: '%' });\n if (!offset.ok) return { status: 'invalid', code: 'invalid-value' };\n if (layoutValue === undefined) {\n return {\n status: 'review',\n code: 'context-unverified',\n reason: 'The offset margin axis depends on a dynamic parent layout.',\n suggestion: 'Make the parent layout static or migrate the offset manually.',\n };\n }\n\n const layout = parseLayout(layoutValue);\n if (!layout.ok) return { status: 'invalid', code: 'invalid-value' };\n return {\n status: 'planned',\n value: { axis: layout.value.direction.startsWith('column') ? 'block-start' : 'inline-start', length: offset.value },\n };\n}\n","export function arbitraryValue(value: string): string {\n return `[${value.replaceAll(/\\s+/g, '_')}]`;\n}\n","import type { TailwindStrategyResult } from '../tailwind-semantic.model';\nimport { planFlexOffsetSemantics, type FlexOffsetSemantics } from '../../../flex/flex-offset.semantic';\nimport { arbitraryValue } from '../tailwind-value.parser';\n\nconst marginPrefix: Readonly<Record<FlexOffsetSemantics['axis'], string>> = {\n 'inline-start': 'ms',\n 'block-start': 'mt',\n};\n\nexport function renderFlexOffset(value: FlexOffsetSemantics): TailwindStrategyResult {\n return { status: 'converted', classNames: [`${marginPrefix[value.axis]}-${arbitraryValue(value.length)}`] };\n}\n\nexport function planFlexOffset(value: string, layoutValue: string | undefined): TailwindStrategyResult {\n const planned = planFlexOffsetSemantics(value, layoutValue);\n return planned.status === 'planned' ? renderFlexOffset(planned.value) : planned;\n}\n","import type { SemanticResult } from './flex-semantic.model';\n\nexport interface FlexOrderSemantics {\n readonly order: number | undefined;\n}\n\nexport function planFlexOrderSemantics(value: string): SemanticResult<FlexOrderSemantics> {\n const order = Number.parseInt(value.trim(), 10) || undefined;\n return { status: 'planned', value: { order } };\n}\n","import type { TailwindStrategyResult } from '../tailwind-semantic.model';\nimport { planFlexOrderSemantics, type FlexOrderSemantics } from '../../../flex/flex-order.semantic';\n\nexport function renderFlexOrder(value: FlexOrderSemantics): TailwindStrategyResult {\n return { status: 'converted', classNames: value.order === undefined ? [] : [`[order:${value.order}]`] };\n}\n\nexport function planFlexOrder(value: string): TailwindStrategyResult {\n const planned = planFlexOrderSemantics(value);\n return planned.status === 'planned' ? renderFlexOrder(planned.value) : planned;\n}\n","import type { SemanticResult } from './flex-semantic.model';\nimport { parseLayout, type LayoutSemantics } from './layout.semantic';\n\nexport type LayoutMainAlignment = 'start' | 'center' | 'end' | 'space-around' | 'space-between' | 'space-evenly';\nexport type LayoutItemsAlignment = 'start' | 'center' | 'end' | 'baseline' | 'stretch';\nexport type LayoutContentAlignment = 'start' | 'center' | 'end' | 'stretch' | 'space-around' | 'space-between';\n\nexport interface LayoutAlignmentSemantics {\n readonly main: LayoutMainAlignment;\n readonly items: LayoutItemsAlignment;\n readonly content: LayoutContentAlignment;\n readonly stretchMaximum?: 'width' | 'height';\n readonly layout: LayoutSemantics;\n}\n\nconst mainAxis: Readonly<Record<string, LayoutMainAlignment>> = {\n start: 'start',\n 'flex-start': 'start',\n center: 'center',\n end: 'end',\n 'flex-end': 'end',\n 'space-around': 'space-around',\n 'space-between': 'space-between',\n 'space-evenly': 'space-evenly',\n};\n\nconst crossAxis: Readonly<Record<string, readonly [LayoutItemsAlignment, LayoutContentAlignment]>> = {\n start: ['start', 'start'],\n 'flex-start': ['start', 'start'],\n center: ['center', 'center'],\n end: ['end', 'end'],\n 'flex-end': ['end', 'end'],\n 'space-between': ['stretch', 'space-between'],\n 'space-around': ['stretch', 'space-around'],\n baseline: ['baseline', 'stretch'],\n stretch: ['stretch', 'stretch'],\n};\n\nexport function planLayoutAlignment(value: string, layoutValue: string): SemanticResult<LayoutAlignmentSemantics> {\n const values = value.split(/\\s+/).filter(Boolean);\n if (values.length > 2) return { status: 'invalid', code: 'invalid-value' };\n\n const main = mainAxis[values[0] ?? 'start'];\n const crossKey = values[1] ?? 'stretch';\n const cross = crossAxis[crossKey];\n const layout = parseLayout(layoutValue);\n if (!main || !cross || !layout.ok) return { status: 'invalid', code: 'invalid-value' };\n\n const stretchMaximum =\n crossKey === 'stretch'\n ? layout.value.direction === 'row' || layout.value.direction === 'row-reverse'\n ? 'height'\n : 'width'\n : undefined;\n\n return {\n status: 'planned',\n value: { main, items: cross[0], content: cross[1], stretchMaximum, layout: layout.value },\n };\n}\n","import { parseLayout, type LayoutSemantics } from '../../../flex/layout.semantic';\nimport type { ParsedValue } from '../../../flex/css-length';\n\nexport interface TailwindClassPlan {\n readonly classNames: readonly string[];\n}\n\nexport function renderLayout(layout: LayoutSemantics): readonly string[] {\n const display = { flex: 'flex', 'inline-flex': 'inline-flex' }[layout.display];\n const direction = {\n row: 'flex-row',\n 'row-reverse': 'flex-row-reverse',\n column: 'flex-col',\n 'column-reverse': 'flex-col-reverse',\n }[layout.direction];\n const wrap = layout.explicitWrap ? [`flex-${layout.wrap}`] : [];\n const boxSizing = { 'border-box': 'box-border' }[layout.boxSizing];\n return [display, direction, ...wrap, boxSizing];\n}\n\nexport function planLayout(value: string): ParsedValue<TailwindClassPlan> {\n const parsed = parseLayout(value);\n return parsed.ok ? { ok: true, value: { classNames: renderLayout(parsed.value) } } : parsed;\n}\n","import type { ParsedValue } from '../../../flex/css-length';\nimport {\n planLayoutAlignment,\n type LayoutAlignmentSemantics,\n type LayoutContentAlignment,\n type LayoutItemsAlignment,\n type LayoutMainAlignment,\n} from '../../../flex/layout-align.semantic';\nimport { renderLayout, type TailwindClassPlan } from './layout.strategy';\n\nconst mainAxis: Readonly<Record<LayoutMainAlignment, string>> = {\n start: 'start',\n center: 'center',\n end: 'end',\n 'space-around': 'around',\n 'space-between': 'between',\n 'space-evenly': 'evenly',\n};\n\nconst itemsAxis: Readonly<Record<LayoutItemsAlignment, string>> = {\n start: 'start',\n center: 'center',\n end: 'end',\n baseline: 'baseline',\n stretch: 'stretch',\n};\n\nconst contentAxis: Readonly<Record<LayoutContentAlignment, string>> = {\n start: 'start',\n center: 'center',\n end: 'end',\n stretch: 'stretch',\n 'space-around': 'around',\n 'space-between': 'between',\n};\n\nexport function renderLayoutAlignment(alignment: LayoutAlignmentSemantics): TailwindClassPlan {\n const sizing =\n alignment.stretchMaximum === 'height' ? ['max-h-full'] : alignment.stretchMaximum === 'width' ? ['max-w-full'] : [];\n return {\n classNames: [\n `justify-${mainAxis[alignment.main]}`,\n `items-${itemsAxis[alignment.items]}`,\n `content-${contentAxis[alignment.content]}`,\n ...renderLayout(alignment.layout),\n ...sizing,\n ],\n };\n}\n\nexport function planLayoutAlign(value: string, layoutValue: string): ParsedValue<TailwindClassPlan> {\n const planned = planLayoutAlignment(value, layoutValue);\n return planned.status === 'planned' ? { ok: true, value: renderLayoutAlignment(planned.value) } : { ok: false };\n}\n","import { parseCssLength, type CssLength } from './css-length';\nimport type { SemanticResult } from './flex-semantic.model';\nimport { parseLayout } from './layout.semantic';\n\nexport interface LayoutGapSemantics {\n readonly length: CssLength;\n}\n\nexport function planLayoutGapSemantics(\n value: string,\n layoutValue: string | undefined,\n): SemanticResult<LayoutGapSemantics> {\n const normalized = value.trim();\n if (!normalized) return { status: 'invalid', code: 'invalid-value' };\n\n if (normalized.endsWith(' grid')) {\n return {\n status: 'review',\n code: 'semantic-unsupported',\n reason: 'The Flex-Layout grid gap mode changes child padding and compensating host margins.',\n suggestion: 'Replace the grid gap manually after reviewing the child padding behavior.',\n };\n }\n\n const length = parseCssLength(normalized, { fallbackUnit: 'px' });\n if (!length.ok) return { status: 'invalid', code: 'invalid-value' };\n if (length.value.startsWith('-')) {\n return {\n status: 'review',\n code: 'semantic-unsupported',\n reason: 'Flex-Layout accepts a negative margin gap, but CSS gap does not accept negative values.',\n suggestion: 'Preserve the margin-based spacing or migrate the child margins manually.',\n };\n }\n if (length.value.includes('(')) {\n return {\n status: 'review',\n code: 'context-unverified',\n reason: 'The computed gap may resolve to a negative value that CSS gap cannot represent.',\n suggestion: 'Prove the value is nonnegative or migrate the margin-based spacing manually.',\n };\n }\n if (layoutValue === undefined) {\n return {\n status: 'review',\n code: 'context-unverified',\n reason: 'The active flex direction and wrapping behavior depend on a dynamic layout.',\n suggestion: 'Make the layout static or migrate the gap and responsive layout together.',\n };\n }\n\n const layout = parseLayout(layoutValue);\n if (!layout.ok) return { status: 'invalid', code: 'invalid-value' };\n if (layout.value.wrap !== 'nowrap') {\n return {\n status: 'review',\n code: 'semantic-unsupported',\n reason: 'Flex-Layout margins and CSS gap differ when flex items wrap across lines.',\n suggestion: 'Verify the wrapped layout and migrate its spacing manually.',\n };\n }\n\n return { status: 'planned', value: { length: length.value } };\n}\n","import type { TailwindStrategyResult } from '../tailwind-semantic.model';\nimport { planLayoutGapSemantics, type LayoutGapSemantics } from '../../../flex/layout-gap.semantic';\nimport { arbitraryValue } from '../tailwind-value.parser';\n\nexport function renderLayoutGap(gap: LayoutGapSemantics): TailwindStrategyResult {\n return { status: 'converted', classNames: [`gap-${arbitraryValue(gap.length)}`] };\n}\n\nexport function planLayoutGap(value: string, layoutValue: string | undefined): TailwindStrategyResult {\n const planned = planLayoutGapSemantics(value, layoutValue);\n return planned.status === 'planned' ? renderLayoutGap(planned.value) : planned;\n}\n","import type { BreakpointDefinition, MediaClause, MediaDefinition } from '../../breakpoint/breakpoint-catalog';\nimport { describeTailwindUtility } from './tailwind-class-conflict';\n\nexport class ResponsiveVariantEmitter {\n emit(definition: BreakpointDefinition, utility: string): readonly string[] {\n const descriptor = describeTailwindUtility(utility);\n if (descriptor === undefined) {\n throw new Error('Cannot decorate a malformed Tailwind utility');\n }\n if (descriptor.variants.length > 0) {\n throw new Error('Cannot decorate an already-variant utility');\n }\n\n return definition.media.clauses.map(clause => `[${this.mediaQuery(definition.media, clause)}]:${utility}`);\n }\n\n emitCandidate(definition: BreakpointDefinition, candidate: string): readonly string[] {\n const descriptor = describeTailwindUtility(candidate);\n if (descriptor === undefined) {\n throw new Error('Cannot decorate a malformed Tailwind candidate');\n }\n if (descriptor.hasGeneratedMediaVariant) {\n throw new Error('Cannot decorate a candidate containing a generated media variant');\n }\n\n return definition.media.clauses.map(clause => `[${this.mediaQuery(definition.media, clause)}]:${candidate}`);\n }\n\n private mediaQuery(media: MediaDefinition, clause: MediaClause): string {\n if (media.type === 'print') return '@media_print';\n\n const conditions = [\n clause.orientation === undefined ? undefined : `(orientation:_${clause.orientation})`,\n clause.min === undefined ? undefined : `(min-width:_${clause.min}px)`,\n clause.max === undefined ? undefined : `(max-width:_${clause.max}px)`,\n ].filter((condition): condition is string => condition !== undefined);\n\n const medium = clause.orientation === undefined ? 'screen_and_' : '';\n return `@media_${medium}${conditions.join('_and_')}`;\n }\n}\n","import { ResponsiveVariantEmitter } from '../responsive-variant.emitter';\nimport { describeTailwindUtility } from '../tailwind-class-conflict';\nimport type { ExtendedResponsiveState, ResponsiveClassValue } from '../../../semantic/extended/responsive-class.model';\nimport type { ResponsiveStyleValue } from '../../../semantic/extended/responsive-style.model';\nimport { TailwindArbitraryPropertyEncoder } from './tailwind-arbitrary-property.encoder';\nimport { TailwindCandidateClassifier } from './tailwind-candidate-classifier';\n\nexport class ExtendedResponsiveEmitter {\n constructor(\n private readonly responsiveEmitter = new ResponsiveVariantEmitter(),\n private readonly styleEncoder = new TailwindArbitraryPropertyEncoder(),\n private readonly classifier = new TailwindCandidateClassifier(),\n ) {}\n\n emitClass(state: ExtendedResponsiveState<ResponsiveClassValue>): readonly string[] {\n const emitted: string[] = [];\n const seen = new Set<string>();\n\n for (const token of state.value.tokens) {\n if (seen.has(token)) continue;\n seen.add(token);\n\n const classification = this.classifier.classify(token);\n if (classification.status !== 'verified' || classification.descriptor.cssProperties.length === 0) {\n throw new Error('Cannot emit an unverified or ungrouped Tailwind class candidate.');\n }\n emitted.push(...this.responsiveEmitter.emitCandidate(state.activation.definition, token));\n }\n\n return emitted;\n }\n\n emitStyle(state: ExtendedResponsiveState<ResponsiveStyleValue>): readonly string[] {\n const emitted: string[] = [];\n const seen = new Set<string>();\n\n for (const declaration of state.value.declarations) {\n const candidate = this.styleEncoder.encode(declaration);\n if (seen.has(candidate)) continue;\n seen.add(candidate);\n\n const descriptor = describeTailwindUtility(candidate);\n if (descriptor === undefined || descriptor.cssProperties.length === 0) {\n throw new Error('Cannot emit an ungrouped Tailwind arbitrary-property candidate.');\n }\n emitted.push(...this.responsiveEmitter.emitCandidate(state.activation.definition, candidate));\n }\n\n return emitted;\n }\n}\n","import type { GridSemanticPlan } from '../../../grid/grid-semantic.model';\n\nexport type TailwindGridRenderResult =\n | { readonly status: 'rendered'; readonly classNames: readonly string[] }\n | {\n readonly status: 'review';\n readonly code: 'tailwind-candidate-unverified';\n readonly reason: string;\n };\n\nfunction encode(property: string, value: string): string | undefined {\n const containsControl = [...value].some(character => {\n const codePoint = character.codePointAt(0);\n return codePoint !== undefined && (codePoint < 0x20 || codePoint === 0x7f);\n });\n if (\n value.length === 0 ||\n containsControl ||\n /[{}'<>]/u.test(value) ||\n value.includes('\\\\') ||\n value.includes('/*') ||\n value.includes('*/')\n ) {\n return undefined;\n }\n let encodedValue: string;\n if (property === 'grid-template-areas') {\n if (!/^(?:\"[^\"]*\")(?:\\s+\"[^\"]*\")*$/u.test(value)) return undefined;\n encodedValue = value.replaceAll('\"', \"'\").replaceAll(' ', '_');\n } else {\n if (value.includes('\"')) return undefined;\n encodedValue = value.replaceAll('_', '\\\\_').replaceAll(' ', '_');\n }\n const candidate = `[${property}:${encodedValue}]`;\n return candidate.length > 0 && !/[\\t\\n\\f\\r \"<]/u.test(candidate) && !/&(?:#|[a-z\\d])/iu.test(candidate)\n ? candidate\n : undefined;\n}\n\nexport class TailwindGridRenderer {\n render(plan: GridSemanticPlan): TailwindGridRenderResult {\n const classNames: string[] = [];\n for (const declaration of plan.declarations) {\n const candidate = encode(declaration.property, declaration.value);\n if (candidate === undefined) {\n return {\n status: 'review',\n code: 'tailwind-candidate-unverified',\n reason: `${declaration.property}: ${declaration.value} cannot be represented as an exact Tailwind class token.`,\n };\n }\n classNames.push(candidate);\n }\n return { status: 'rendered', classNames };\n }\n}\n","import { ResponsiveVariantEmitter } from '../responsive-variant.emitter';\nimport type { VisibilityState } from '../../../semantic/visibility/visibility.model';\n\nexport class VisibilityEmitter {\n constructor(private readonly responsiveEmitter = new ResponsiveVariantEmitter()) {}\n\n emit(state: VisibilityState, restorationUtility: string | undefined): readonly string[] {\n const utility = state.intent === 'hidden' ? 'hidden' : restorationUtility;\n if (utility === undefined) return [];\n if (state.activation.kind === 'base') return [utility];\n return this.responsiveEmitter.emit(state.activation.definition, utility);\n }\n}\n","import type { DiagnosticCode } from '../analyzer/conversion-result';\nimport type { LocatedFlexLayoutInput } from '../analyzer/flex-layout-attribute.analyzer';\nimport type { BreakpointDefinition } from '../breakpoint/breakpoint-catalog';\nimport type { FlexAlignSemantics } from '../flex/flex-align.semantic';\nimport type { FlexFillSemantics } from '../flex/flex-fill.semantic';\nimport type { FlexItemSemantics } from '../flex/flex-item.semantic';\nimport type { FlexOffsetSemantics } from '../flex/flex-offset.semantic';\nimport type { FlexOrderSemantics } from '../flex/flex-order.semantic';\nimport type { LayoutAlignmentSemantics } from '../flex/layout-align.semantic';\nimport type { LayoutGapSemantics } from '../flex/layout-gap.semantic';\nimport type { LayoutSemantics } from '../flex/layout.semantic';\nimport type { GridSemanticPlan } from '../grid/grid-semantic.model';\nimport type { SourceClassTokenEvidence } from './source-property-evidence';\n\nexport type DirectiveFamily =\n | 'layout'\n | 'layout-gap'\n | 'layout-align'\n | 'flex-item'\n | 'flex-align'\n | 'flex-fill'\n | 'flex-offset'\n | 'flex-order'\n | 'visibility'\n | 'extended-class'\n | 'extended-style'\n | 'grid-align-columns'\n | 'grid-align-rows'\n | 'grid-area'\n | 'grid-areas'\n | 'grid-auto'\n | 'grid-column'\n | 'grid-columns'\n | 'grid-gap'\n | 'grid-align'\n | 'grid-inline'\n | 'grid-row'\n | 'grid-rows';\n\nexport type SemanticPlan<TValue> =\n | {\n readonly status: 'planned';\n readonly input: LocatedFlexLayoutInput;\n readonly family: DirectiveFamily;\n readonly value: TValue;\n }\n | {\n readonly status: 'review' | 'invalid' | 'unsupported';\n readonly input: LocatedFlexLayoutInput;\n readonly code: DiagnosticCode;\n readonly reason: string;\n readonly suggestion: string;\n };\n\nexport type SemanticActivation =\n { readonly kind: 'base' } | { readonly kind: 'media'; readonly definition: BreakpointDefinition };\n\nexport interface VisibilitySemantics {\n readonly kind: 'visibility';\n readonly emit: boolean;\n readonly states: readonly VisibilitySemanticState[];\n readonly restorationDisplay?: string;\n}\n\nexport interface VisibilitySemanticState {\n readonly intent: 'shown' | 'hidden';\n readonly activation: SemanticActivation;\n}\n\nexport interface ExtendedClassSemanticState {\n readonly activations: readonly SemanticActivation[];\n readonly tokens: readonly SourceClassTokenEvidence[];\n}\n\nexport interface ExtendedClassSemantics {\n readonly kind: 'extended-class';\n readonly emit: boolean;\n readonly states: readonly ExtendedClassSemanticState[];\n readonly retainedTokens: readonly SourceClassTokenEvidence[];\n}\n\nexport interface ExtendedStyleDeclaration {\n readonly property: string;\n readonly value: string;\n}\n\nexport interface ExtendedStyleSemanticState {\n readonly activations: readonly SemanticActivation[];\n readonly declarations: readonly ExtendedStyleDeclaration[];\n}\n\nexport interface ExtendedStyleSemantics {\n readonly kind: 'extended-style';\n readonly emit: boolean;\n readonly states: readonly ExtendedStyleSemanticState[];\n}\n\nexport interface EmptySemantics {\n readonly kind: 'empty';\n}\n\nexport interface SuppressedSemanticEffect {\n readonly activation: SemanticActivation;\n readonly properties: readonly string[];\n readonly important: boolean;\n}\n\nexport type ResolvedSemanticValue =\n | LayoutSemantics\n | LayoutGapSemantics\n | LayoutAlignmentSemantics\n | FlexItemSemantics\n | FlexAlignSemantics\n | FlexFillSemantics\n | FlexOffsetSemantics\n | FlexOrderSemantics\n | GridSemanticPlan\n | VisibilitySemantics\n | ExtendedClassSemantics\n | ExtendedStyleSemantics\n | EmptySemantics;\n\n/** A target-free semantic decision ready for exactly one target renderer. */\nexport interface ResolvedSemanticPlan {\n readonly status: 'converted';\n readonly input: LocatedFlexLayoutInput;\n readonly family: DirectiveFamily;\n readonly value: ResolvedSemanticValue;\n readonly activations: readonly SemanticActivation[];\n readonly suppressedProperties?: readonly string[];\n readonly suppressedEffects?: readonly SuppressedSemanticEffect[];\n readonly emitGridDisplay?: boolean;\n}\n\n/** A target-free diagnostic produced while resolving semantic meaning and dependencies. */\nexport interface UnresolvedSemanticPlan {\n readonly status: 'review' | 'invalid' | 'unsupported';\n readonly input: LocatedFlexLayoutInput;\n readonly code: DiagnosticCode;\n readonly reason: string;\n readonly suggestion: string;\n}\n\n/** The complete target-independent outcome of semantic planning. */\nexport type SemanticPlanningPlan = ResolvedSemanticPlan | UnresolvedSemanticPlan;\n\n/** Lets dependency closure operate on semantic plans before rendering and target plans afterward. */\nexport type SemanticDependencyPlan<\n TConverted extends { readonly status: 'converted'; readonly input: LocatedFlexLayoutInput },\n> = TConverted | UnresolvedSemanticPlan;\n\nconst familyByDirective = new Map<LocatedFlexLayoutInput['directive'], DirectiveFamily>([\n ['fxLayout', 'layout'],\n ['fxLayoutGap', 'layout-gap'],\n ['fxLayoutAlign', 'layout-align'],\n ['fxFlex', 'flex-item'],\n ['fxGrow', 'flex-item'],\n ['fxShrink', 'flex-item'],\n ['fxFlexAlign', 'flex-align'],\n ['fxFlexFill', 'flex-fill'],\n ['fxFill', 'flex-fill'],\n ['fxFlexOffset', 'flex-offset'],\n ['fxFlexOrder', 'flex-order'],\n ['fxShow', 'visibility'],\n ['fxHide', 'visibility'],\n ['class', 'extended-class'],\n ['ngClass', 'extended-class'],\n ['style', 'extended-style'],\n ['ngStyle', 'extended-style'],\n ['gdAlignColumns', 'grid-align-columns'],\n ['gdAlignRows', 'grid-align-rows'],\n ['gdArea', 'grid-area'],\n ['gdAreas', 'grid-areas'],\n ['gdAuto', 'grid-auto'],\n ['gdColumn', 'grid-column'],\n ['gdColumns', 'grid-columns'],\n ['gdGap', 'grid-gap'],\n ['gdGridAlign', 'grid-align'],\n ['gdInline', 'grid-inline'],\n ['gdRow', 'grid-row'],\n ['gdRows', 'grid-rows'],\n]);\n\nexport function directiveFamily(directive: LocatedFlexLayoutInput['directive']): DirectiveFamily | undefined {\n return familyByDirective.get(directive);\n}\n","import type { LocatedFlexLayoutInput } from '../../analyzer/flex-layout-attribute.analyzer';\nimport type { BreakpointMigrationConfig } from '../../config/breakpoint-migration-config';\nimport { MigrationApplicationError } from '../../migrator/migration-application.error';\nimport type { FlexAlignSemantics } from '../../flex/flex-align.semantic';\nimport type { FlexFillSemantics } from '../../flex/flex-fill.semantic';\nimport type { FlexItemSemantics } from '../../flex/flex-item.semantic';\nimport type { FlexOffsetSemantics } from '../../flex/flex-offset.semantic';\nimport type { FlexOrderSemantics } from '../../flex/flex-order.semantic';\nimport type { LayoutAlignmentSemantics } from '../../flex/layout-align.semantic';\nimport type { LayoutGapSemantics } from '../../flex/layout-gap.semantic';\nimport type { LayoutSemantics } from '../../flex/layout.semantic';\nimport type { GridSemanticPlan } from '../../grid/grid-semantic.model';\nimport { TailwindSourcePropertyEvidence } from '../../evidence/tailwind-source-property.evidence';\nimport { renderFlexAlign } from '../../adapter/tailwind/directives/flex-align.strategy';\nimport { renderFlexFill } from '../../adapter/tailwind/directives/flex-fill.strategy';\nimport { renderFlexItem } from '../../adapter/tailwind/directives/flex-item.strategy';\nimport { renderFlexOffset } from '../../adapter/tailwind/directives/flex-offset.strategy';\nimport { renderFlexOrder } from '../../adapter/tailwind/directives/flex-order.strategy';\nimport { renderLayoutAlignment } from '../../adapter/tailwind/directives/layout-align.strategy';\nimport { renderLayoutGap } from '../../adapter/tailwind/directives/layout-gap.strategy';\nimport { renderLayout } from '../../adapter/tailwind/directives/layout.strategy';\nimport { ExtendedResponsiveEmitter } from '../../adapter/tailwind/extended/extended-responsive.emitter';\nimport { TailwindGridRenderer } from '../../adapter/tailwind/grid/tailwind-grid.renderer';\nimport {\n describeTailwindDisplay,\n describeTailwindUtility,\n findTailwindClassConflicts,\n} from '../../adapter/tailwind/tailwind-class-conflict';\nimport { cssPropertiesOverlap } from '../../semantic/css-property-ownership';\nimport { ResponsiveVariantEmitter } from '../../adapter/tailwind/responsive-variant.emitter';\nimport { VisibilityEmitter } from '../../adapter/tailwind/visibility/visibility.emitter';\nimport type { SemanticConversionContext } from '../../semantic/conversion-context';\nimport {\n directiveFamily,\n type ExtendedClassSemantics,\n type ExtendedStyleSemantics,\n type ResolvedSemanticPlan,\n type VisibilitySemantics,\n} from '../../semantic/semantic-plan';\nimport type { ConversionRenderer, PlannedConversion } from '../conversion-renderer';\n\nconst sharedDirectives = new Set<LocatedFlexLayoutInput['directive']>([\n 'fxLayout',\n 'fxLayoutGap',\n 'fxLayoutAlign',\n 'fxFlex',\n 'fxGrow',\n 'fxShrink',\n 'fxFlexAlign',\n 'fxFlexFill',\n 'fxFill',\n 'fxFlexOffset',\n 'fxFlexOrder',\n]);\nconst visibilityDirectives = new Set<LocatedFlexLayoutInput['directive']>(['fxShow', 'fxHide']);\nconst extendedDirectives = new Set<LocatedFlexLayoutInput['directive']>(['class', 'ngClass', 'style', 'ngStyle']);\nconst gridDirectives = new Set<LocatedFlexLayoutInput['directive']>([\n 'gdAlignColumns',\n 'gdAlignRows',\n 'gdArea',\n 'gdAreas',\n 'gdAuto',\n 'gdColumn',\n 'gdColumns',\n 'gdGap',\n 'gdGridAlign',\n 'gdInline',\n 'gdRow',\n 'gdRows',\n]);\n\nfunction compatibleVisibilityClasses(\n plan: Extract<PlannedConversion, { readonly status: 'converted' }>,\n existingClassNames: readonly string[],\n): readonly string[] {\n if (!visibilityDirectives.has(plan.input.directive)) return existingClassNames;\n const generatedDisplays = plan.classNames.map(describeTailwindDisplay).filter(descriptor => descriptor !== undefined);\n const hasBaseHidden = generatedDisplays.some(\n descriptor => descriptor.activation.kind === 'base' && descriptor.utility === 'hidden',\n );\n return existingClassNames.filter(className => {\n const existing = describeTailwindDisplay(className);\n if (\n !existing ||\n existing.activation.kind !== 'base' ||\n existing.important ||\n existing.token !== existing.utility ||\n existing.utility === 'hidden'\n ) {\n return true;\n }\n const suppliesResponsiveVisibility = hasBaseHidden\n ? generatedDisplays.some(\n generated => generated.activation.kind === 'media' && generated.utility === existing.utility,\n )\n : generatedDisplays.length > 0 && generatedDisplays.every(generated => generated.activation.kind === 'media');\n return !suppliesResponsiveVisibility;\n });\n}\n\nexport class TailwindRenderer implements ConversionRenderer {\n readonly target = 'tailwind' as const;\n readonly breakpointConfig: BreakpointMigrationConfig;\n readonly sourcePropertyEvidence = new TailwindSourcePropertyEvidence();\n private readonly responsiveEmitter = new ResponsiveVariantEmitter();\n private readonly visibilityEmitter = new VisibilityEmitter();\n private readonly extendedEmitter = new ExtendedResponsiveEmitter();\n private readonly gridRenderer = new TailwindGridRenderer();\n\n constructor(config: BreakpointMigrationConfig = { orientationBreakpoints: false }) {\n this.breakpointConfig = Object.freeze({ ...config });\n }\n\n eligibility(input: LocatedFlexLayoutInput): PlannedConversion | undefined {\n if (input.binding !== 'property') {\n if (\n !sharedDirectives.has(input.directive) &&\n !visibilityDirectives.has(input.directive) &&\n !extendedDirectives.has(input.directive) &&\n !gridDirectives.has(input.directive)\n ) {\n return {\n status: 'unsupported',\n input,\n code: 'target-unsupported',\n reason: `The Tailwind target does not support ${input.directive}.`,\n suggestion: 'Keep the directive and migrate it manually.',\n };\n }\n }\n return undefined;\n }\n\n render(plan: ResolvedSemanticPlan, _context: SemanticConversionContext): PlannedConversion {\n const inputFamily = directiveFamily(plan.input.directive);\n if (inputFamily !== plan.family) {\n throw new MigrationApplicationError(\n 'internal-invariant',\n `Tailwind renderer received semantic family \"${String(plan.family)}\" for directive \"${plan.input.directive}\", which belongs to \"${String(inputFamily)}\".`,\n [plan.input.fileName],\n );\n }\n\n let classNames: readonly string[];\n switch (plan.family) {\n case 'layout':\n classNames = renderLayout(plan.value as LayoutSemantics);\n break;\n case 'layout-gap': {\n const result = renderLayoutGap(plan.value as LayoutGapSemantics);\n classNames = result.status === 'converted' ? result.classNames : [];\n break;\n }\n case 'layout-align':\n classNames = renderLayoutAlignment(plan.value as LayoutAlignmentSemantics).classNames;\n break;\n case 'flex-item':\n classNames = renderFlexItem(plan.value as FlexItemSemantics);\n break;\n case 'flex-align': {\n const result = renderFlexAlign(plan.value as FlexAlignSemantics);\n classNames = result.status === 'converted' ? result.classNames : [];\n break;\n }\n case 'flex-fill': {\n const result = renderFlexFill(plan.value as FlexFillSemantics);\n classNames = result.status === 'converted' ? result.classNames : [];\n break;\n }\n case 'flex-offset': {\n const result = renderFlexOffset(plan.value as FlexOffsetSemantics);\n classNames = result.status === 'converted' ? result.classNames : [];\n break;\n }\n case 'flex-order': {\n const result = renderFlexOrder(plan.value as FlexOrderSemantics);\n classNames = result.status === 'converted' ? result.classNames : [];\n break;\n }\n case 'visibility':\n return this.renderVisibility(plan, plan.value as VisibilitySemantics);\n case 'extended-class':\n return this.renderExtendedClass(plan, plan.value as ExtendedClassSemantics);\n case 'extended-style':\n return this.renderExtendedStyle(plan, plan.value as ExtendedStyleSemantics);\n case 'grid-align-columns':\n case 'grid-align-rows':\n case 'grid-area':\n case 'grid-areas':\n case 'grid-auto':\n case 'grid-column':\n case 'grid-columns':\n case 'grid-gap':\n case 'grid-align':\n case 'grid-inline':\n case 'grid-row':\n case 'grid-rows':\n return this.renderGrid(plan, plan.value as GridSemanticPlan);\n default:\n throw new MigrationApplicationError(\n 'internal-invariant',\n `Tailwind renderer does not handle semantic family \"${String(plan.family)}\".`,\n [plan.input.fileName],\n );\n }\n return {\n status: 'converted',\n input: plan.input,\n classNames: this.applySemanticSuppressions(this.decorate(classNames, plan), plan),\n };\n }\n\n resolveConflicts(\n plans: readonly PlannedConversion[],\n context: SemanticConversionContext,\n ): readonly PlannedConversion[] {\n return this.resolveClassConflicts(plans, context.existingClassNames);\n }\n\n record(_plans: readonly PlannedConversion[]): void {}\n\n resolveClassConflicts(\n plans: readonly PlannedConversion[],\n existingClassNames: readonly string[],\n ): readonly PlannedConversion[] {\n const convertedPlans = plans.filter(\n (plan): plan is Extract<PlannedConversion, { readonly status: 'converted' }> => plan.status === 'converted',\n );\n const sharedConflictingTokens = findTailwindClassConflicts(\n existingClassNames,\n convertedPlans.flatMap(plan => plan.classNames),\n );\n const conflictingFamilies = new Set(\n convertedPlans\n .filter(plan => {\n if (!visibilityDirectives.has(plan.input.directive)) {\n return plan.classNames.some(className => sharedConflictingTokens.has(className));\n }\n const conflictingTokens = findTailwindClassConflicts(\n compatibleVisibilityClasses(plan, existingClassNames),\n plan.classNames,\n );\n return plan.classNames.some(className => conflictingTokens.has(className));\n })\n .map(plan => directiveFamily(plan.input.directive) ?? plan.input.directive),\n );\n return plans.map(plan =>\n plan.status === 'converted' &&\n conflictingFamilies.has(directiveFamily(plan.input.directive) ?? plan.input.directive)\n ? {\n status: 'review',\n input: plan.input,\n code: 'class-conflict',\n reason: 'An existing Tailwind utility controls a CSS property generated by this conversion.',\n suggestion: 'Remove or reconcile the conflicting utility before migrating this directive.',\n }\n : plan,\n );\n }\n\n private decorate(classNames: readonly string[], plan: ResolvedSemanticPlan): readonly string[] {\n return plan.activations.flatMap(planActivation =>\n planActivation.kind === 'base'\n ? classNames\n : classNames.flatMap(className => this.responsiveEmitter.emit(planActivation.definition, className)),\n );\n }\n\n private renderGrid(plan: ResolvedSemanticPlan, value: GridSemanticPlan): PlannedConversion {\n const rendered = this.gridRenderer.render(value);\n if (rendered.status === 'review') {\n return {\n status: 'review',\n input: plan.input,\n code: rendered.code,\n reason: rendered.reason,\n suggestion: 'Use an exact Tailwind class manually or retain the Grid directive.',\n };\n }\n const display =\n value.role === 'container' && plan.emitGridDisplay !== false\n ? ['grid']\n : value.role === 'modifier'\n ? [value.inline ? 'inline-grid' : 'grid']\n : [];\n return {\n status: 'converted',\n input: plan.input,\n classNames: this.applySemanticSuppressions(this.decorate([...display, ...rendered.classNames], plan), plan),\n };\n }\n\n private renderVisibility(plan: ResolvedSemanticPlan, value: VisibilitySemantics): PlannedConversion {\n const classNames = value.emit\n ? [\n ...new Set(\n value.states.flatMap(state =>\n this.visibilityEmitter.emit({ ...state, input: plan.input }, value.restorationDisplay),\n ),\n ),\n ]\n : [];\n return { status: 'converted', input: plan.input, classNames };\n }\n\n private renderExtendedClass(plan: ResolvedSemanticPlan, value: ExtendedClassSemantics): PlannedConversion {\n const classNames = value.emit\n ? [\n ...new Set(\n value.states.flatMap(state =>\n state.activations.flatMap(itemActivation => {\n if (itemActivation.kind !== 'media') return [];\n return this.extendedEmitter.emitClass({\n input: plan.input,\n activation: itemActivation,\n value: { tokens: state.tokens.map(token => token.source) },\n });\n }),\n ),\n ),\n ]\n : [];\n return {\n status: 'converted',\n input: plan.input,\n classNames: this.applySemanticSuppressions(classNames, plan),\n ...(value.retainedTokens.length > 0\n ? { retainedClassNames: value.retainedTokens.map(token => token.source) }\n : {}),\n };\n }\n\n private renderExtendedStyle(plan: ResolvedSemanticPlan, value: ExtendedStyleSemantics): PlannedConversion {\n const classNames = value.emit\n ? [\n ...new Set(\n value.states.flatMap(state =>\n state.activations.flatMap(itemActivation => {\n if (itemActivation.kind !== 'media') return [];\n return this.extendedEmitter.emitStyle({\n input: plan.input,\n activation: itemActivation,\n value: { declarations: state.declarations },\n });\n }),\n ),\n ),\n ]\n : [];\n return { status: 'converted', input: plan.input, classNames: this.applySemanticSuppressions(classNames, plan) };\n }\n\n private applySemanticSuppressions(classNames: readonly string[], plan: ResolvedSemanticPlan): readonly string[] {\n if (!plan.suppressedProperties?.length && !plan.suppressedEffects?.length) return classNames;\n return classNames.filter(className => {\n const descriptor = describeTailwindUtility(className);\n if (descriptor === undefined) return true;\n if (\n plan.suppressedProperties?.some(property =>\n descriptor.cssProperties.some(candidate => cssPropertiesOverlap(candidate, property)),\n )\n ) {\n return false;\n }\n return !(plan.suppressedEffects ?? []).some(suppression => {\n if (\n descriptor.important !== suppression.important ||\n descriptor.cssProperties.length !== suppression.properties.length ||\n !descriptor.cssProperties.every((property, index) => property === suppression.properties[index])\n ) {\n return false;\n }\n if (suppression.activation.kind === 'base') return descriptor.activation.kind === 'base';\n if (descriptor.activation.kind !== 'media') return false;\n if ((descriptor.activation.mediaType ?? 'screen') !== suppression.activation.definition.media.type)\n return false;\n const descriptorActivation = descriptor.activation;\n return suppression.activation.definition.media.clauses.some(\n range =>\n range.min === descriptorActivation.range.min &&\n range.max === descriptorActivation.range.max &&\n range.orientation === descriptorActivation.range.orientation,\n );\n });\n });\n }\n}\n","import type { BreakpointMigrationConfig } from '../config/breakpoint-migration-config';\nimport type { OwnedCssRule } from '../adapter/css/css-artifact.model';\nimport { CssRenderer } from './css/css.renderer';\nimport type { ConversionRenderer } from './conversion-renderer';\nimport { TailwindRenderer } from './tailwind/tailwind.renderer';\n\nexport type AdapterSessionResult =\n { readonly target: 'tailwind' } | { readonly target: 'css'; readonly rules: readonly OwnedCssRule[] };\n\nexport interface RenderSession {\n readonly renderer: ConversionRenderer;\n finalize(): AdapterSessionResult;\n}\n\nexport function createRenderSession(\n target: AdapterSessionResult['target'],\n config: BreakpointMigrationConfig = { orientationBreakpoints: false },\n): RenderSession {\n return target === 'tailwind' ? new TailwindRenderSession(config) : new CssRenderSession(config);\n}\n\nexport function sessionBoundRenderer(renderer: ConversionRenderer, assertActive: () => void): ConversionRenderer {\n return Object.freeze({\n target: renderer.target,\n breakpointConfig: renderer.breakpointConfig,\n sourcePropertyEvidence: renderer.sourcePropertyEvidence,\n eligibility(input: Parameters<ConversionRenderer['eligibility']>[0]) {\n assertActive();\n return renderer.eligibility(input);\n },\n render(plan: Parameters<ConversionRenderer['render']>[0], context: Parameters<ConversionRenderer['render']>[1]) {\n assertActive();\n return renderer.render(plan, context);\n },\n resolveConflicts(\n plans: Parameters<ConversionRenderer['resolveConflicts']>[0],\n context: Parameters<ConversionRenderer['resolveConflicts']>[1],\n ) {\n assertActive();\n return renderer.resolveConflicts(plans, context);\n },\n record(plans: Parameters<ConversionRenderer['record']>[0]) {\n assertActive();\n renderer.record(plans);\n },\n });\n}\n\nabstract class SingleUseRenderSession implements RenderSession {\n abstract readonly renderer: ConversionRenderer;\n private finalized = false;\n\n finalize(): AdapterSessionResult {\n if (this.finalized) throw new Error('Render session already finalized');\n this.finalized = true;\n return Object.freeze(this.result());\n }\n\n protected assertActive(): void {\n if (this.finalized) throw new Error('Render session is finalized');\n }\n\n protected abstract result(): AdapterSessionResult;\n}\n\nexport class TailwindRenderSession extends SingleUseRenderSession {\n readonly renderer: ConversionRenderer;\n\n constructor(config: BreakpointMigrationConfig = { orientationBreakpoints: false }) {\n super();\n this.renderer = sessionBoundRenderer(new TailwindRenderer(config), () => this.assertActive());\n }\n\n protected result(): AdapterSessionResult {\n return { target: 'tailwind' };\n }\n}\n\nexport class CssRenderSession extends SingleUseRenderSession {\n readonly renderer: ConversionRenderer;\n private readonly cssRenderer: CssRenderer;\n\n constructor(config: BreakpointMigrationConfig = { orientationBreakpoints: false }) {\n super();\n this.cssRenderer = new CssRenderer(undefined, config);\n this.renderer = sessionBoundRenderer(this.cssRenderer, () => this.assertActive());\n }\n\n protected result(): AdapterSessionResult {\n return { target: 'css', rules: this.cssRenderer.finalizedRules() };\n }\n}\n","import { logger } from '../logger';\nimport type { BreakpointMigrationConfig } from '../config/breakpoint-migration-config';\nimport { CssRenderSession, TailwindRenderSession, type RenderSession } from '../render/render-session';\n\nexport class AdapterFactory {\n static createRenderSession(\n target: string,\n config: BreakpointMigrationConfig = { orientationBreakpoints: false },\n ): RenderSession {\n logger.info(`Creating adapter session [${target}]`);\n if (target === 'tailwind') return new TailwindRenderSession(config);\n if (target === 'css') return new CssRenderSession(config);\n throw new Error(`Adapter [${target}] not found`);\n }\n}\n","import { readFile } from 'node:fs/promises';\nimport { TemplateAnalyzer } from '../../analyzer/template.analyzer';\nimport { AngularTemplateParser } from '../../template/angular-template.parser';\nimport { analyzedProject, type AnalyzedProject, type AnalyzedTemplate } from '../analyzed-project';\nimport type { AnalyzeStage } from '../migration-pipeline';\nimport type { ProjectManifest } from '../project-manifest';\nimport type { TemplateInputAnalyzer } from './template-input-analyzer.port';\nimport type { TemplateParser } from './template-parser.port';\nimport type { TemplateSourceReader } from './template-source-reader.port';\n\nconst nodeSourceReader: TemplateSourceReader = Object.freeze({\n read: (path: string) => readFile(path, 'utf8'),\n});\n\nexport class AnalyzeProjectStage implements AnalyzeStage {\n constructor(\n private readonly sourceReader: TemplateSourceReader = nodeSourceReader,\n private readonly parser: TemplateParser = new AngularTemplateParser(),\n private readonly analyzer: TemplateInputAnalyzer = new TemplateAnalyzer(),\n ) {}\n\n public async run(manifest: ProjectManifest): Promise<AnalyzedProject> {\n const templates: AnalyzedTemplate[] = [];\n\n for (const file of manifest.templates) {\n const source = await this.sourceReader.read(file.inputPath);\n const parseResult = this.parser.parse(source, file.inputPath);\n\n templates.push(\n parseResult.status === 'parse-error'\n ? { status: 'parse-error', file, source, parseResult }\n : {\n status: 'parsed',\n file,\n source,\n parseResult,\n inputs: this.analyzer.analyze(file.inputPath, parseResult.elements),\n },\n );\n }\n\n return analyzedProject({ manifest, templates });\n }\n}\n","import { FLEX_LAYOUT_DIRECTIVES, FlexLayoutDirective, isFlexLayoutDirective } from './flex-layout.catalog';\nimport type { SourceRange } from '../template/template.model';\n\nexport type BindingKind = 'literal' | 'property';\n\nexport interface FlexLayoutInput {\n sourceName: string;\n directive: FlexLayoutDirective;\n value: string;\n binding: BindingKind;\n breakpoint: string | undefined;\n}\n\nexport interface LocatedFlexLayoutInput extends FlexLayoutInput {\n readonly id: string;\n readonly fileName: string;\n readonly elementId: string;\n readonly source: SourceRange;\n readonly nameSource: SourceRange;\n readonly valueSource?: SourceRange;\n}\n\nconst responsiveOnlyDirectives = new Set<FlexLayoutDirective>(['class', 'ngClass', 'style', 'ngStyle']);\nconst directivesByLength = [...FLEX_LAYOUT_DIRECTIVES].sort((left, right) => right.length - left.length);\n\nexport function analyzeFlexLayoutAttribute(sourceName: string, value: string): FlexLayoutInput | undefined {\n const startsWithBracket = sourceName.startsWith('[');\n const endsWithBracket = sourceName.endsWith(']');\n\n if (startsWithBracket !== endsWithBracket) return undefined;\n\n const binding: BindingKind = startsWithBracket ? 'property' : 'literal';\n const normalizedName = startsWithBracket ? sourceName.slice(1, -1) : sourceName;\n\n if (normalizedName.startsWith('src.')) {\n return {\n sourceName,\n value,\n directive: 'imgSrc',\n breakpoint: normalizedName.slice('src.'.length),\n binding,\n };\n }\n\n const directive = directivesByLength.find(\n candidate => normalizedName === candidate || normalizedName.startsWith(`${candidate}.`),\n );\n\n if (!directive || !isFlexLayoutDirective(directive)) return undefined;\n\n const breakpoint = normalizedName === directive ? undefined : normalizedName.slice(directive.length + 1);\n if (responsiveOnlyDirectives.has(directive) && !breakpoint) return undefined;\n\n return {\n sourceName,\n value,\n directive,\n breakpoint,\n binding,\n };\n}\n","import type { TemplateElement } from '../template/template.model';\nimport { analyzeFlexLayoutAttribute, LocatedFlexLayoutInput } from './flex-layout-attribute.analyzer';\nimport { isKnownBreakpoint } from './flex-layout.catalog';\n\nfunction sourceNameFor(attribute: TemplateElement['attributes'][number]): string | undefined {\n if (attribute.binding === 'literal') return attribute.name;\n if (attribute.bindingTarget === 'property' || attribute.bindingTarget === 'two-way') return `[${attribute.name}]`;\n if (\n (attribute.bindingTarget === 'class' || attribute.bindingTarget === 'style') &&\n isKnownBreakpoint(attribute.name)\n ) {\n return `[${attribute.bindingTarget}.${attribute.name}]`;\n }\n return undefined;\n}\n\nexport class TemplateAnalyzer {\n analyze(fileName: string, elements: readonly TemplateElement[]): readonly LocatedFlexLayoutInput[] {\n const inputs: LocatedFlexLayoutInput[] = [];\n\n for (const element of elements) {\n for (const attribute of element.attributes) {\n const sourceName = sourceNameFor(attribute);\n if (!sourceName) continue;\n const input = analyzeFlexLayoutAttribute(sourceName, attribute.value);\n if (!input) continue;\n\n inputs.push({\n ...input,\n id: `${fileName}:${attribute.source.start}`,\n fileName,\n elementId: element.id,\n source: attribute.source,\n nameSource: attribute.nameSource,\n ...(attribute.valueSource ? { valueSource: attribute.valueSource } : {}),\n });\n }\n }\n\n return inputs.sort((left, right) => left.source.start - right.source.start);\n }\n}\n","import {\n BindingType,\n parseTemplate,\n TmplAstBoundAttribute,\n TmplAstElement,\n TmplAstRecursiveVisitor,\n TmplAstTemplate,\n TmplAstTextAttribute,\n tmplAstVisitAll,\n} from '@angular/compiler';\nimport { SourceRange, TemplateAttribute, TemplateElement, TemplateParseResult } from './template.model';\n\nfunction range(start: number, end: number): SourceRange {\n return { start, end };\n}\n\nfunction attributeNameRange(source: string, attribute: TmplAstTextAttribute | TmplAstBoundAttribute): SourceRange {\n const start = attribute.sourceSpan.start.offset;\n const rawAttribute = source.slice(start, attribute.sourceSpan.end.offset);\n const equalsIndex = rawAttribute.indexOf('=');\n const rawName = (equalsIndex === -1 ? rawAttribute : rawAttribute.slice(0, equalsIndex)).trimEnd();\n return range(start, start + rawName.length);\n}\n\nfunction normalizeAttribute(\n source: string,\n attribute: TmplAstTextAttribute | TmplAstBoundAttribute,\n binding: TemplateAttribute['binding'],\n): TemplateAttribute {\n const nameSource = attributeNameRange(source, attribute);\n const valueSource = attribute.valueSpan\n ? range(attribute.valueSpan.start.offset, attribute.valueSpan.end.offset)\n : undefined;\n const rawValue = valueSource ? source.slice(valueSource.start, valueSource.end) : '';\n\n return {\n name: attribute.name,\n rawName: source.slice(nameSource.start, nameSource.end),\n rawValue,\n value: attribute instanceof TmplAstTextAttribute ? attribute.value : rawValue,\n binding,\n ...(attribute instanceof TmplAstBoundAttribute ? { bindingTarget: boundTarget(attribute.type) } : {}),\n source: range(attribute.sourceSpan.start.offset, attribute.sourceSpan.end.offset),\n nameSource,\n ...(valueSource ? { valueSource } : {}),\n };\n}\n\nfunction boundTarget(type: BindingType): NonNullable<TemplateAttribute['bindingTarget']> {\n switch (type) {\n case BindingType.Attribute:\n return 'attribute';\n case BindingType.Class:\n return 'class';\n case BindingType.Style:\n return 'style';\n case BindingType.LegacyAnimation:\n case BindingType.Animation:\n return 'animation';\n case BindingType.TwoWay:\n return 'two-way';\n case BindingType.Property:\n default:\n return 'property';\n }\n}\n\nclass ElementCollector extends TmplAstRecursiveVisitor {\n readonly elements: TemplateElement[] = [];\n private readonly parents: string[] = [];\n private readonly structuralElements = new Set<number>();\n\n constructor(private readonly source: string) {\n super();\n }\n\n override visitElement(element: TmplAstElement): void {\n const id = String(element.sourceSpan.start.offset);\n const attributes = [\n ...element.attributes.map(attribute => normalizeAttribute(this.source, attribute, 'literal')),\n ...element.inputs.map(attribute => normalizeAttribute(this.source, attribute, 'property')),\n ].sort((left, right) => left.source.start - right.source.start);\n\n this.elements.push({\n id,\n name: element.name,\n source: range(element.sourceSpan.start.offset, element.sourceSpan.end.offset),\n startTag: range(element.startSourceSpan.start.offset, element.startSourceSpan.end.offset),\n ...(element.endSourceSpan && element.endSourceSpan.start.offset !== element.startSourceSpan.start.offset\n ? { endTag: range(element.endSourceSpan.start.offset, element.endSourceSpan.end.offset) }\n : {}),\n structural: this.structuralElements.has(element.sourceSpan.start.offset),\n attributes,\n ...(this.parents.at(-1) ? { parentId: this.parents.at(-1) } : {}),\n });\n\n this.parents.push(id);\n super.visitElement(element);\n this.parents.pop();\n }\n\n override visitTemplate(template: TmplAstTemplate): void {\n const structuralElement =\n template.tagName === null\n ? undefined\n : template.children.find(\n child =>\n child instanceof TmplAstElement &&\n child.name === template.tagName &&\n child.sourceSpan.start.offset === template.sourceSpan.start.offset &&\n child.sourceSpan.end.offset === template.sourceSpan.end.offset,\n );\n\n if (structuralElement) {\n this.structuralElements.add(structuralElement.sourceSpan.start.offset);\n }\n super.visitTemplate(template);\n if (structuralElement) {\n this.structuralElements.delete(structuralElement.sourceSpan.start.offset);\n }\n }\n}\n\nexport class AngularTemplateParser {\n parse(source: string, fileName: string): TemplateParseResult {\n const parsed = parseTemplate(source, fileName, {\n enableBlockSyntax: true,\n preserveLineEndings: true,\n preserveWhitespaces: true,\n });\n\n if (parsed.errors?.length) {\n return {\n status: 'parse-error',\n diagnostics: parsed.errors.map(error => ({\n message: error.msg,\n source: range(error.span.start.offset, error.span.end.offset),\n })),\n };\n }\n\n const collector = new ElementCollector(source);\n tmplAstVisitAll(collector, parsed.nodes);\n return { status: 'parsed', elements: collector.elements };\n }\n}\n","import * as path from 'node:path';\nimport type { LocatedFlexLayoutInput } from '../analyzer/flex-layout-attribute.analyzer';\nimport { MigrationApplicationError } from '../migrator/migration-application.error';\nimport type { SourceRange, TemplateAttribute, TemplateElement, TemplateParseResult } from '../template/template.model';\nimport { projectManifest, type ManifestTemplate, type ProjectManifest } from './project-manifest';\n\nexport type AnalyzedTemplate =\n | {\n readonly status: 'parsed';\n readonly file: ManifestTemplate;\n readonly source: string;\n readonly parseResult: Extract<TemplateParseResult, { readonly status: 'parsed' }>;\n readonly inputs: readonly LocatedFlexLayoutInput[];\n }\n | {\n readonly status: 'parse-error';\n readonly file: ManifestTemplate;\n readonly source: string;\n readonly parseResult: Extract<TemplateParseResult, { readonly status: 'parse-error' }>;\n };\n\nexport interface AnalyzedProject {\n readonly manifest: ProjectManifest;\n readonly templates: readonly AnalyzedTemplate[];\n}\n\nexport function analyzedProject(project: AnalyzedProject): AnalyzedProject {\n const manifest = projectManifest(project.manifest);\n if (project.templates.length !== manifest.templates.length) {\n throw sequenceInvariant();\n }\n const templates = project.templates.map((template, index) => {\n const file = manifestTemplateAt(manifest, template.file, index);\n if (template.status === 'parse-error') {\n return Object.freeze({\n status: template.status,\n file,\n source: template.source,\n parseResult: freezeParseErrorResult(template.parseResult),\n });\n }\n\n return Object.freeze({\n status: template.status,\n file,\n source: template.source,\n parseResult: freezeParsedResult(template.parseResult),\n inputs: Object.freeze(template.inputs.map(input => freezeLocatedInput(input))),\n });\n });\n\n return Object.freeze({ manifest, templates: Object.freeze(templates) });\n}\n\nfunction freezeParsedResult(\n result: Extract<TemplateParseResult, { readonly status: 'parsed' }>,\n): Extract<TemplateParseResult, { readonly status: 'parsed' }> {\n return Object.freeze({\n status: result.status,\n elements: Object.freeze(result.elements.map(element => freezeTemplateElement(element))),\n });\n}\n\nfunction freezeTemplateElement(element: TemplateElement): TemplateElement {\n return Object.freeze({\n id: element.id,\n name: element.name,\n source: freezeSourceRange(element.source),\n startTag: freezeSourceRange(element.startTag),\n ...(element.endTag === undefined ? {} : { endTag: freezeSourceRange(element.endTag) }),\n structural: element.structural,\n attributes: Object.freeze(element.attributes.map(attribute => freezeTemplateAttribute(attribute))),\n ...(element.parentId === undefined ? {} : { parentId: element.parentId }),\n });\n}\n\nfunction freezeTemplateAttribute(attribute: TemplateAttribute): TemplateAttribute {\n return Object.freeze({\n name: attribute.name,\n rawName: attribute.rawName,\n rawValue: attribute.rawValue,\n value: attribute.value,\n binding: attribute.binding,\n ...(attribute.bindingTarget === undefined ? {} : { bindingTarget: attribute.bindingTarget }),\n source: freezeSourceRange(attribute.source),\n nameSource: freezeSourceRange(attribute.nameSource),\n ...(attribute.valueSource === undefined ? {} : { valueSource: freezeSourceRange(attribute.valueSource) }),\n });\n}\n\nfunction freezeSourceRange(source: SourceRange): SourceRange {\n return Object.freeze({ start: source.start, end: source.end });\n}\n\nfunction freezeParseErrorResult(\n result: Extract<TemplateParseResult, { readonly status: 'parse-error' }>,\n): Extract<TemplateParseResult, { readonly status: 'parse-error' }> {\n return Object.freeze({\n status: result.status,\n diagnostics: Object.freeze(\n result.diagnostics.map(diagnostic =>\n Object.freeze({\n ...diagnostic,\n source: Object.freeze({ ...diagnostic.source }),\n }),\n ),\n ),\n });\n}\n\nfunction manifestTemplateAt(manifest: ProjectManifest, candidate: ManifestTemplate, index: number): ManifestTemplate {\n const expected = manifest.templates[index];\n if (expected === undefined || !samePathPair(expected, candidate)) {\n throw sequenceInvariant([candidate.inputPath, candidate.outputPath]);\n }\n return expected;\n}\n\nfunction samePathPair(left: ManifestTemplate, right: ManifestTemplate): boolean {\n return (\n normalizedAbsolutePath(left.inputPath) === normalizedAbsolutePath(right.inputPath) &&\n normalizedAbsolutePath(left.outputPath) === normalizedAbsolutePath(right.outputPath)\n );\n}\n\nfunction freezeLocatedInput(input: LocatedFlexLayoutInput): LocatedFlexLayoutInput {\n return Object.freeze({\n ...input,\n source: Object.freeze({ ...input.source }),\n nameSource: Object.freeze({ ...input.nameSource }),\n ...(input.valueSource === undefined ? {} : { valueSource: Object.freeze({ ...input.valueSource }) }),\n });\n}\n\nfunction normalizedAbsolutePath(value: string): string {\n return path.normalize(path.resolve(value));\n}\n\nfunction sequenceInvariant(paths: readonly string[] = []): MigrationApplicationError {\n return internalInvariant(\n 'Analyzed project templates must match its manifest one-to-one and in the same order.',\n paths,\n );\n}\n\nfunction internalInvariant(message: string, paths: readonly string[] = []): MigrationApplicationError {\n return new MigrationApplicationError('internal-invariant', message, paths);\n}\n","import * as path from 'node:path';\nimport type { MigrationMode } from '../migrator/migration-mode';\n\nexport interface MigrationOptions {\n readonly mode: MigrationMode;\n readonly responsiveImages?: boolean;\n readonly stylesheetPath?: string;\n readonly stylesheetPathInput?: string;\n readonly reportPath?: string;\n}\n\nexport interface MigrationInvocation {\n readonly inputPath: string;\n readonly outputPath: string;\n readonly canonicalInputPath: string;\n readonly canonicalOutputPath: string;\n readonly options: Readonly<MigrationOptions>;\n}\n\ntype MigrationInvocationInput = Pick<MigrationInvocation, 'inputPath' | 'outputPath' | 'options'>;\n\nexport interface ManifestTemplate {\n readonly inputPath: string;\n readonly outputPath: string;\n}\n\nexport interface ProjectManifest {\n readonly invocation: MigrationInvocation;\n readonly templates: readonly ManifestTemplate[];\n}\n\nexport function migrationInvocation(invocation: MigrationInvocationInput): MigrationInvocation {\n return freezeMigrationInvocation({\n inputPath: invocation.inputPath,\n outputPath: invocation.outputPath,\n canonicalInputPath: normalizedAbsolutePath(invocation.inputPath),\n canonicalOutputPath: normalizedAbsolutePath(invocation.outputPath),\n options: invocation.options,\n });\n}\n\nexport function projectManifest(\n manifest: Omit<ProjectManifest, 'invocation'> & {\n readonly invocation: MigrationInvocationInput | MigrationInvocation;\n },\n): ProjectManifest {\n return Object.freeze({\n invocation: hasCanonicalIdentity(manifest.invocation)\n ? freezeMigrationInvocation(manifest.invocation)\n : migrationInvocation(manifest.invocation),\n templates: Object.freeze(\n manifest.templates.map(template =>\n Object.freeze({\n inputPath: normalizedAbsolutePath(template.inputPath),\n outputPath: normalizedAbsolutePath(template.outputPath),\n }),\n ),\n ),\n });\n}\n\nfunction hasCanonicalIdentity(\n invocation: MigrationInvocationInput | MigrationInvocation,\n): invocation is MigrationInvocation {\n return 'canonicalInputPath' in invocation && 'canonicalOutputPath' in invocation;\n}\n\nfunction freezeMigrationInvocation(invocation: MigrationInvocation): MigrationInvocation {\n return Object.freeze({\n inputPath: invocation.inputPath,\n outputPath: invocation.outputPath,\n canonicalInputPath: invocation.canonicalInputPath,\n canonicalOutputPath: invocation.canonicalOutputPath,\n options: Object.freeze({ ...invocation.options }),\n });\n}\n\nfunction normalizedAbsolutePath(value: string): string {\n return path.normalize(path.resolve(value));\n}\n","import { MigrationApplicationError } from '../migrator/migration-application.error';\nimport type { ArtifactState, PlannedOutputArtifact } from '../migrator/migration-plan';\nimport { compareCodeUnits } from '../util/compare-code-units';\n\nexport interface MigrationTransactionFileHandle {\n chmod(mode: number): Promise<void>;\n writeFile(contents: string, encoding: BufferEncoding): Promise<void>;\n readFile(options: { readonly encoding: 'utf8' }): Promise<string>;\n stat(): Promise<MigrationTransactionStat>;\n sync(): Promise<void>;\n close(): Promise<void>;\n}\n\nexport interface MigrationTransactionStat {\n readonly dev: number | bigint;\n readonly ino: number | bigint;\n readonly mode: number | bigint;\n isDirectory(): boolean;\n isFile(): boolean;\n isSymbolicLink(): boolean;\n}\n\nexport interface MigrationTransactionOperations {\n access(path: string, mode: number): Promise<void>;\n link(existingPath: string, newPath: string): Promise<void>;\n lstat(path: string): Promise<MigrationTransactionStat>;\n mkdir(path: string, options?: { readonly recursive?: boolean; readonly mode?: number }): Promise<unknown>;\n open(path: string, flags: 'r' | 'wx'): Promise<MigrationTransactionFileHandle>;\n rename(source: string, destination: string): Promise<void>;\n rmdir(path: string): Promise<void>;\n stat(path: string): Promise<MigrationTransactionStat>;\n unlink(path: string): Promise<void>;\n}\n\nexport interface FileIdentity {\n readonly dev: string;\n readonly ino: string;\n}\n\nexport interface DirectoryExpectation {\n readonly path: string;\n readonly original:\n | 'absent'\n | { readonly identity: FileIdentity; readonly kind: 'directory' }\n | { readonly identity: FileIdentity; readonly kind: 'symbolic-link'; readonly followedIdentity: FileIdentity };\n}\n\nexport interface CreatedDirectory {\n readonly path: string;\n identity?: FileIdentity;\n readonly publicPaths: Set<string>;\n exists: boolean;\n}\n\nexport interface OwnedNamespace {\n readonly path: string;\n identity?: FileIdentity;\n readonly publicPath: string;\n exists: boolean;\n}\n\nexport interface OwnedFile {\n readonly path: string;\n readonly publicPath: string;\n identity?: FileIdentity;\n exists: boolean;\n preserve: boolean;\n}\n\nexport interface ObservedPresentState {\n readonly status: 'present';\n readonly contents: string;\n readonly identity: FileIdentity;\n readonly mode: number;\n}\n\nexport type ObservedState = { readonly status: 'absent' } | ObservedPresentState;\n\nexport interface RuntimeArtifact {\n readonly artifact: PlannedOutputArtifact;\n readonly directories: readonly DirectoryExpectation[];\n readonly quarantines: OwnedFile[];\n readonly ownedFiles: OwnedFile[];\n readonly readHandles: Set<MigrationTransactionFileHandle>;\n originalIdentity?: FileIdentity;\n originalMode?: number;\n namespace?: OwnedNamespace;\n stage?: OwnedFile;\n backup?: OwnedFile;\n openHandle?: MigrationTransactionFileHandle;\n installedIdentity?: FileIdentity;\n restoredIdentity?: FileIdentity;\n}\n\nexport interface TransactionUnitContext {\n readonly items: RuntimeArtifact[];\n readonly createdDirectories: Map<string, CreatedDirectory>;\n readonly unconfirmedEntries: Map<string, Set<string>>;\n readonly recoveryFailures: unknown[];\n readonly restored: Map<RuntimeArtifact, boolean>;\n readonly ownershipChanged: () => void;\n}\n\nexport interface RecoveryOutcome {\n readonly paths: readonly string[];\n readonly failures: readonly unknown[];\n}\n\nexport class RecoveryUnitError extends Error {\n constructor(\n readonly paths: readonly string[],\n readonly failures: readonly unknown[],\n ) {\n super('Transaction recovery was incomplete.');\n this.name = 'RecoveryUnitError';\n this.paths = Object.freeze([...paths]);\n this.failures = Object.freeze([...failures]);\n }\n}\n\nexport function runtimeArtifact(\n context: Pick<TransactionUnitContext, 'items'>,\n artifact: PlannedOutputArtifact,\n): RuntimeArtifact {\n const item = context.items.find(candidate => candidate.artifact === artifact);\n if (item) return item;\n throw new MigrationApplicationError(\n 'internal-invariant',\n `Migration transaction journal contains an unknown artifact: ${artifact.path}`,\n [artifact.path],\n );\n}\n\nexport function identity(stat: MigrationTransactionStat): FileIdentity {\n return { dev: String(stat.dev), ino: String(stat.ino) };\n}\n\nexport function fileMode(stat: MigrationTransactionStat): number {\n return Number(stat.mode) & 0o7777;\n}\n\nexport function sameIdentity(left: FileIdentity, right: FileIdentity): boolean {\n return left.dev === right.dev && left.ino === right.ino;\n}\n\nexport function sameArtifactState(left: ObservedState, right: ArtifactState): boolean {\n if (left.status !== right.status) return false;\n if (left.status === 'absent') return true;\n return right.status === 'present' && left.contents === right.contents;\n}\n\nexport function required<T>(value: T | undefined): T {\n if (value === undefined) throw new Error('Missing transaction state.');\n return value;\n}\n\nexport function isEnoent(error: unknown): error is NodeJS.ErrnoException {\n return typeof error === 'object' && error !== null && 'code' in error && error.code === 'ENOENT';\n}\n\nexport function isDirectoryNotEmpty(error: unknown): error is NodeJS.ErrnoException {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'code' in error &&\n (error.code === 'ENOTEMPTY' || error.code === 'EEXIST')\n );\n}\n\nexport function pathDepth(path: string): number {\n return path.split(/[\\\\/]/u).filter(Boolean).length;\n}\n\nexport function recoveryOutcome(paths: Iterable<string>, failures: readonly unknown[]): RecoveryOutcome {\n return { paths: sortedUnique(paths), failures: Object.freeze([...failures]) };\n}\n\nexport function recoveryUnitError(error: unknown): RecoveryUnitError {\n return new RecoveryUnitError(error instanceof MigrationApplicationError ? error.paths : [], [error]);\n}\n\nexport function sortedUnique(paths: Iterable<string>): readonly string[] {\n return [...new Set(paths)].sort(compareCodeUnits);\n}\n","import type { StagedArtifact } from './staging.unit';\nimport type { CleanupArtifactView, CleanupPort, OwnedFileView } from './transaction-unit.ports';\nimport {\n RecoveryUnitError,\n identity,\n isDirectoryNotEmpty,\n isEnoent,\n pathDepth,\n recoveryOutcome,\n recoveryUnitError,\n sameArtifactState,\n sameIdentity,\n type MigrationTransactionStat,\n type ObservedState,\n type RecoveryOutcome,\n} from './transaction-unit.state';\nimport { compareCodeUnits } from '../util/compare-code-units';\n\nexport { RecoveryUnitError } from './transaction-unit.state';\n\nexport interface CleanupUnit {\n cleanup(staged: readonly StagedArtifact[]): Promise<readonly string[]>;\n}\n\nexport type CleanupKind = 'committed' | 'recovery';\n\nexport class FileSystemCleanupUnit implements CleanupUnit {\n constructor(\n private readonly port: CleanupPort,\n private readonly kind: CleanupKind,\n ) {}\n\n public async cleanup(staged: readonly StagedArtifact[]): Promise<readonly string[]> {\n const failures: unknown[] = [];\n const paths = new Set<string>();\n let stagedItems: CleanupArtifactView[];\n try {\n stagedItems = staged.map(entry => this.port.journal.artifact(entry.artifact));\n } catch (error: unknown) {\n throw recoveryUnitError(error);\n }\n const items = this.kind === 'recovery' ? stagedItems.reverse() : stagedItems;\n for (const item of items) {\n await this.port.closeReadHandles(item, failures);\n await this.port.closeOpenHandle(item, failures);\n const ownedFiles = this.kind === 'recovery' ? [...item.ownedFiles].reverse() : item.ownedFiles;\n for (const owned of ownedFiles) {\n if (this.kind === 'recovery' && owned.path === item.backupPath && this.port.journal.restored(item) === false) {\n if (owned.exists) paths.add(item.artifact.path);\n continue;\n }\n await this.removeOwnedFile(item, owned, paths, failures);\n }\n await this.removeNamespace(item, paths, failures);\n this.port.journal.finishArtifactCleanup();\n }\n await this.removeCreatedDirectories(paths, failures);\n await this.collectUnconfirmedPaths(paths, failures);\n if (this.kind === 'recovery') {\n for (const item of this.port.journal.artifacts()) {\n if (!(await this.verifyOriginal(item, failures))) paths.add(item.artifact.path);\n }\n }\n return recoveryResult(recoveryOutcome(paths, failures));\n }\n\n private async removeOwnedFile(\n item: CleanupArtifactView,\n owned: OwnedFileView | undefined,\n paths: Set<string>,\n failures: unknown[],\n ): Promise<void> {\n if (!owned?.exists) return;\n if (owned.preserve || !owned.identity) {\n paths.add(owned.publicPath);\n return;\n }\n try {\n await this.port.assertNamespace(item);\n const before = await this.port.lstat(owned.path);\n if (!sameIdentity(identity(before), owned.identity) || before.isSymbolicLink() || !before.isFile()) {\n paths.add(owned.publicPath);\n failures.push(new Error('Invocation-owned file identity could not be confirmed.'));\n return;\n }\n } catch (error: unknown) {\n if (isEnoent(error)) {\n this.port.journal.markOwnedFileAbsent(item, owned.path);\n return;\n }\n paths.add(owned.publicPath);\n failures.push(error);\n return;\n }\n try {\n await this.port.unlink(owned.path);\n } catch (error: unknown) {\n if (!isEnoent(error)) failures.push(error);\n }\n try {\n await this.port.lstat(owned.path);\n paths.add(owned.publicPath);\n } catch (error: unknown) {\n if (isEnoent(error)) this.port.journal.markOwnedFileAbsent(item, owned.path);\n else {\n paths.add(owned.publicPath);\n failures.push(error);\n }\n }\n }\n\n private async removeNamespace(item: CleanupArtifactView, paths: Set<string>, failures: unknown[]): Promise<void> {\n const namespace = item.namespace;\n if (!namespace?.exists) return;\n if (!namespace.identity) {\n paths.add(namespace.publicPath);\n return;\n }\n try {\n const namespaceStat = await this.port.lstat(namespace.path);\n if (\n !sameIdentity(identity(namespaceStat), namespace.identity) ||\n namespaceStat.isSymbolicLink() ||\n !namespaceStat.isDirectory()\n ) {\n paths.add(namespace.publicPath);\n failures.push(new Error('Invocation namespace identity could not be confirmed.'));\n return;\n }\n } catch (error: unknown) {\n if (isEnoent(error)) {\n this.port.journal.markNamespaceAbsent(item);\n return;\n }\n paths.add(namespace.publicPath);\n failures.push(error);\n return;\n }\n try {\n await this.port.rmdir(namespace.path);\n } catch (error: unknown) {\n if (!isDirectoryNotEmpty(error) && !isEnoent(error)) failures.push(error);\n }\n try {\n await this.port.lstat(namespace.path);\n paths.add(namespace.publicPath);\n } catch (error: unknown) {\n if (isEnoent(error)) this.port.journal.markNamespaceAbsent(item);\n else {\n paths.add(namespace.publicPath);\n failures.push(error);\n }\n }\n }\n\n private async removeCreatedDirectories(paths: Set<string>, failures: unknown[]): Promise<void> {\n const directories = [...this.port.journal.createdDirectories()].sort(\n (left, right) => pathDepth(right.path) - pathDepth(left.path) || compareCodeUnits(right.path, left.path),\n );\n for (const directory of directories) {\n if (!directory.exists) continue;\n if (\n this.kind === 'committed' &&\n this.port.journal\n .artifacts()\n .some(\n item =>\n item.artifact.proposed.status === 'present' &&\n item.directories.some(expectation => expectation.path === directory.path),\n )\n ) {\n continue;\n }\n if (!directory.identity) {\n for (const publicPath of directory.publicPaths) paths.add(publicPath);\n continue;\n }\n let before: MigrationTransactionStat;\n try {\n before = await this.port.lstat(directory.path);\n } catch (error: unknown) {\n if (isEnoent(error)) {\n this.port.journal.markCreatedDirectoryAbsent(directory.path);\n continue;\n }\n for (const publicPath of directory.publicPaths) paths.add(publicPath);\n failures.push(error);\n continue;\n }\n if (!sameIdentity(identity(before), directory.identity) || before.isSymbolicLink() || !before.isDirectory()) {\n for (const publicPath of directory.publicPaths) paths.add(publicPath);\n continue;\n }\n let removalFailure: unknown;\n try {\n await this.port.rmdir(directory.path);\n } catch (error: unknown) {\n removalFailure = error;\n }\n let after: MigrationTransactionStat | 'absent';\n try {\n after = await this.port.lstatOrAbsent(directory.path);\n } catch (error: unknown) {\n for (const publicPath of directory.publicPaths) paths.add(publicPath);\n if (removalFailure !== undefined && !isEnoent(removalFailure)) failures.push(removalFailure);\n failures.push(error);\n continue;\n }\n if (after === 'absent') {\n this.port.journal.markCreatedDirectoryAbsent(directory.path);\n if (removalFailure !== undefined && !isEnoent(removalFailure)) failures.push(removalFailure);\n continue;\n }\n for (const publicPath of directory.publicPaths) paths.add(publicPath);\n if (removalFailure !== undefined && !isEnoent(removalFailure)) failures.push(removalFailure);\n }\n }\n\n private async collectUnconfirmedPaths(paths: Set<string>, failures: unknown[]): Promise<void> {\n for (const { path: candidate, publicPaths } of this.port.journal.unconfirmedEntries()) {\n try {\n await this.port.lstat(candidate);\n } catch (error: unknown) {\n if (isEnoent(error)) continue;\n failures.push(error);\n }\n for (const publicPath of publicPaths) paths.add(publicPath);\n }\n }\n\n private async verifyOriginal(item: CleanupArtifactView, failures: unknown[]): Promise<boolean> {\n try {\n return this.isConfirmedOriginal(item, await this.port.observePublic(item));\n } catch (error: unknown) {\n failures.push(error);\n return false;\n }\n }\n\n private isConfirmedOriginal(item: CleanupArtifactView, observed: ObservedState): boolean {\n if (!sameArtifactState(observed, item.artifact.original)) return false;\n if (observed.status === 'absent') return true;\n return [item.originalIdentity, item.restoredIdentity].some(\n expected => expected !== undefined && sameIdentity(observed.identity, expected),\n );\n }\n}\n\nfunction recoveryResult(outcome: RecoveryOutcome): readonly string[] {\n if (outcome.failures.length > 0) throw new RecoveryUnitError(outcome.paths, outcome.failures);\n return outcome.paths;\n}\n","import { randomUUID } from 'node:crypto';\nimport { join } from 'node:path';\nimport type { StagedArtifact } from './staging.unit';\nimport type { CommitArtifactView, CommitPort, OwnedFileView } from './transaction-unit.ports';\nimport {\n identity,\n required,\n sameArtifactState,\n sameIdentity,\n type ObservedPresentState,\n} from './transaction-unit.state';\n\nexport interface CommittedArtifact extends StagedArtifact {\n readonly committed: true;\n}\n\nexport interface CommitUnit {\n commit(staged: readonly StagedArtifact[], signal: AbortSignal): Promise<readonly CommittedArtifact[]>;\n}\n\nexport class CommitUnitError extends Error {\n constructor(\n cause: unknown,\n readonly staged: readonly StagedArtifact[],\n readonly committed: readonly CommittedArtifact[],\n ) {\n super(cause instanceof Error ? cause.message : 'Migration transaction commit failed.', { cause });\n this.name = 'CommitUnitError';\n this.staged = Object.freeze([...staged]);\n this.committed = Object.freeze([...committed]);\n }\n}\n\nexport class FileSystemCommitUnit implements CommitUnit {\n constructor(private readonly port: CommitPort) {}\n\n public async commit(staged: readonly StagedArtifact[], signal: AbortSignal): Promise<readonly CommittedArtifact[]> {\n const committed: CommittedArtifact[] = [];\n let items: readonly CommitArtifactView[];\n try {\n items = staged.map(entry => this.port.journal.artifact(entry.artifact));\n } catch (error: unknown) {\n throw new CommitUnitError(error, staged, committed);\n }\n for (const item of items) {\n try {\n this.port.assertNotInterrupted(signal);\n if (item.artifact.original.status === 'present') await this.captureOriginal(item, signal);\n this.port.assertNotInterrupted(signal);\n if (item.artifact.proposed.status === 'present') await this.installProposed(item);\n committed.push(committedArtifact(this.port.journal.artifact(item.artifact)));\n } catch (error: unknown) {\n const current = this.port.journal.artifact(item.artifact);\n if (transitionStarted(current) && !committed.some(candidate => candidate.artifact === item.artifact)) {\n committed.push(committedArtifact(current));\n }\n throw new CommitUnitError(error, currentStagedArtifacts(this.port.journal.artifacts()), committed);\n }\n }\n return Object.freeze(committed);\n }\n\n private async captureOriginal(item: CommitArtifactView, signal: AbortSignal): Promise<void> {\n const firstCapture = await this.port.observePublic(item);\n if (\n !sameArtifactState(firstCapture, item.artifact.original) ||\n firstCapture.status !== 'present' ||\n !item.originalIdentity ||\n !sameIdentity(firstCapture.identity, item.originalIdentity)\n ) {\n throw this.port.concurrentModification(item.artifact.path);\n }\n const backup = await this.port.createBackupFile(item, firstCapture.contents, signal, firstCapture.mode);\n if ((await this.port.readOwnedFile(item, backup.path)) !== firstCapture.contents) {\n throw this.port.ownershipFailure(item.artifact.path);\n }\n const secondCapture = await this.port.observePublic(item);\n if (\n secondCapture.status !== 'present' ||\n !sameIdentity(secondCapture.identity, firstCapture.identity) ||\n secondCapture.contents !== firstCapture.contents\n ) {\n throw this.port.concurrentModification(item.artifact.path);\n }\n await this.quarantineOriginal(item, firstCapture);\n }\n\n private async quarantineOriginal(item: CommitArtifactView, captured: ObservedPresentState): Promise<void> {\n await this.port.assertParentChain(item);\n await this.port.assertNamespace(item);\n const immediatelyBefore = await this.port.observePublic(item);\n if (\n immediatelyBefore.status !== 'present' ||\n !sameIdentity(immediatelyBefore.identity, captured.identity) ||\n immediatelyBefore.contents !== captured.contents\n ) {\n throw this.port.concurrentModification(item.artifact.path);\n }\n let quarantine = this.port.journal.addQuarantine(\n item,\n join(required(item.namespace).path, `quarantine-${randomUUID()}`),\n );\n await this.port.assertExpectedAbsent(quarantine.path, item.artifact.path);\n let renameFailure: unknown;\n try {\n await this.port.rename(item.artifact.path, quarantine.path);\n } catch (error: unknown) {\n renameFailure = error;\n }\n const quarantinedStat = await this.port.lstatOrAbsent(quarantine.path);\n if (quarantinedStat !== 'absent') {\n quarantine = this.port.journal.confirmOwnedFile(item, quarantine.path, identity(quarantinedStat));\n const quarantinedContents = await this.port.readOwnedFile(item, quarantine.path);\n if (\n !sameIdentity(required(quarantine.identity), captured.identity) ||\n quarantinedContents !== captured.contents\n ) {\n this.port.journal.setOwnedFilePreserved(item, quarantine.path, true);\n await this.restorePreservedQuarantine(item, quarantine);\n throw this.port.concurrentModification(item.artifact.path, renameFailure);\n }\n const destination = await this.port.lstatOrAbsent(item.artifact.path);\n if (renameFailure !== undefined) throw renameFailure;\n if (destination !== 'absent') throw this.port.concurrentModification(item.artifact.path);\n await this.port.assertParentChain(item);\n return;\n }\n const destination = await this.port.lstatOrAbsent(item.artifact.path);\n if (\n renameFailure !== undefined &&\n destination !== 'absent' &&\n sameIdentity(identity(destination), captured.identity)\n ) {\n throw renameFailure;\n }\n throw this.port.concurrentModification(item.artifact.path, renameFailure);\n }\n\n private async installProposed(item: CommitArtifactView): Promise<void> {\n const stage = required(item.stage);\n await this.port.assertOwnedIdentity(item, stage.path);\n await this.port.assertParentChain(item);\n await this.port.assertExpectedAbsent(item.artifact.path, item.artifact.path);\n let linkFailure: unknown;\n try {\n await this.port.link(stage.path, item.artifact.path);\n } catch (error: unknown) {\n linkFailure = error;\n }\n const destination = await this.port.lstatOrAbsent(item.artifact.path);\n if (destination !== 'absent' && stage.identity && sameIdentity(identity(destination), stage.identity)) {\n this.port.journal.recordInstalledIdentity(item, stage.identity);\n await this.port.assertParentChain(item);\n if (linkFailure !== undefined) throw linkFailure;\n return;\n }\n if (destination !== 'absent') throw this.port.concurrentModification(item.artifact.path, linkFailure);\n if (linkFailure !== undefined) throw linkFailure;\n throw this.port.ownershipFailure(item.artifact.path);\n }\n\n private async restorePreservedQuarantine(item: CommitArtifactView, quarantine: OwnedFileView): Promise<void> {\n const quarantineIdentity = required(quarantine.identity);\n if ((await this.port.lstatOrAbsent(item.artifact.path)) !== 'absent') return;\n try {\n await this.port.link(quarantine.path, item.artifact.path);\n } catch (error: unknown) {\n this.port.journal.recordRecoveryFailure(error);\n }\n const destination = await this.port.lstatOrAbsent(item.artifact.path);\n if (destination !== 'absent' && sameIdentity(identity(destination), quarantineIdentity)) {\n this.port.journal.setOwnedFilePreserved(item, quarantine.path, false);\n }\n }\n}\n\nfunction committedArtifact(item: CommitArtifactView): CommittedArtifact {\n return Object.freeze({\n artifact: item.artifact,\n committed: true,\n ...(item.stage === undefined ? {} : { stagingPath: item.stage.path }),\n ...(item.backup === undefined ? {} : { backupPath: item.backup.path }),\n });\n}\n\nfunction transitionStarted(item: CommitArtifactView): boolean {\n return item.installedIdentity !== undefined || item.quarantines.some(quarantine => quarantine.exists);\n}\n\nfunction currentStagedArtifacts(items: readonly CommitArtifactView[]): readonly StagedArtifact[] {\n return Object.freeze(\n items.map(item =>\n Object.freeze({\n artifact: item.artifact,\n ...(item.stage === undefined ? {} : { stagingPath: item.stage.path }),\n ...(item.backup === undefined ? {} : { backupPath: item.backup.path }),\n }),\n ),\n );\n}\n","import { randomUUID } from 'node:crypto';\nimport { join } from 'node:path';\nimport type { CommittedArtifact } from './commit.unit';\nimport type { OwnedFileView, RollbackArtifactView, RollbackPort } from './transaction-unit.ports';\nimport {\n RecoveryUnitError,\n identity,\n recoveryOutcome,\n recoveryUnitError,\n required,\n sameArtifactState,\n sameIdentity,\n type ObservedPresentState,\n type ObservedState,\n type RecoveryOutcome,\n} from './transaction-unit.state';\n\nexport interface RollbackUnit {\n rollback(committed: readonly CommittedArtifact[]): Promise<readonly string[]>;\n}\n\nexport class FileSystemRollbackUnit implements RollbackUnit {\n constructor(private readonly port: RollbackPort) {}\n\n public async rollback(committed: readonly CommittedArtifact[]): Promise<readonly string[]> {\n let items: readonly RollbackArtifactView[];\n try {\n items = committed.map(entry => this.port.journal.artifact(entry.artifact));\n } catch (error: unknown) {\n throw recoveryUnitError(error);\n }\n const failures = [...this.port.journal.recoveryFailures()];\n for (const item of items) await this.restoreOriginal(item, failures);\n const paths = new Set<string>();\n for (const item of this.port.journal.artifacts()) {\n const restored = await this.verifyOriginal(item, failures);\n this.port.journal.recordRestored(item, restored);\n if (!restored) paths.add(item.artifact.path);\n }\n return recoveryResult(recoveryOutcome(paths, failures));\n }\n\n private async restoreOriginal(item: RollbackArtifactView, failures: unknown[]): Promise<void> {\n let current: ObservedState | 'unknown';\n try {\n current = await this.port.observePublic(item);\n } catch (error: unknown) {\n failures.push(error);\n current = 'unknown';\n }\n if (current !== 'unknown' && this.isConfirmedOriginal(item, current)) return;\n if (current !== 'unknown' && current.status === 'present') {\n if (\n !item.installedIdentity ||\n !sameIdentity(current.identity, item.installedIdentity) ||\n item.artifact.proposed.status !== 'present' ||\n current.contents !== item.artifact.proposed.contents\n ) {\n if (item.stage && item.installedIdentity && sameIdentity(current.identity, item.installedIdentity)) {\n this.port.journal.setOwnedFilePreserved(item, item.stage.path, true);\n }\n return;\n }\n if (!(await this.recoveryQuarantine(item, current, failures))) return;\n } else if (current === 'unknown') {\n return;\n }\n if (item.artifact.original.status === 'absent') return;\n const backup = item.backup;\n if (!backup) return;\n try {\n if ((await this.port.readOwnedFile(item, backup.path)) !== item.artifact.original.contents) return;\n await this.port.assertParentChain(item);\n await this.port.assertExpectedAbsent(item.artifact.path, item.artifact.path);\n try {\n await this.port.link(backup.path, item.artifact.path);\n } catch (error: unknown) {\n failures.push(error);\n }\n const restored = await this.port.lstatOrAbsent(item.artifact.path);\n if (\n restored !== 'absent' &&\n !restored.isSymbolicLink() &&\n restored.isFile() &&\n backup.identity &&\n sameIdentity(identity(restored), backup.identity)\n ) {\n this.port.journal.recordRestoredIdentity(item, backup.identity);\n }\n } catch (error: unknown) {\n failures.push(error);\n }\n }\n\n private async recoveryQuarantine(\n item: RollbackArtifactView,\n current: ObservedPresentState,\n failures: unknown[],\n ): Promise<boolean> {\n let quarantine = this.port.journal.addQuarantine(\n item,\n join(required(item.namespace).path, `quarantine-rollback-${randomUUID()}`),\n );\n try {\n await this.port.assertParentChain(item);\n await this.port.assertNamespace(item);\n const before = await this.port.observePublic(item);\n if (\n before.status !== 'present' ||\n !sameIdentity(before.identity, current.identity) ||\n before.contents !== current.contents\n ) {\n return false;\n }\n await this.port.assertExpectedAbsent(quarantine.path, item.artifact.path);\n try {\n await this.port.rename(item.artifact.path, quarantine.path);\n } catch (error: unknown) {\n failures.push(error);\n }\n const quarantined = await this.port.lstatOrAbsent(quarantine.path);\n if (quarantined === 'absent') return false;\n quarantine = this.port.journal.confirmOwnedFile(item, quarantine.path, identity(quarantined));\n this.port.journal.setOwnedFilePreserved(item, quarantine.path, true);\n if (!sameIdentity(required(quarantine.identity), current.identity)) {\n await this.restorePreservedQuarantine(item, quarantine, failures);\n return false;\n }\n if ((await this.port.readOwnedFile(item, quarantine.path)) !== current.contents) {\n await this.restorePreservedQuarantine(item, quarantine, failures);\n return false;\n }\n this.port.journal.setOwnedFilePreserved(item, quarantine.path, false);\n return (await this.port.lstatOrAbsent(item.artifact.path)) === 'absent';\n } catch (error: unknown) {\n failures.push(error);\n return false;\n }\n }\n\n private async restorePreservedQuarantine(\n item: RollbackArtifactView,\n quarantine: OwnedFileView,\n failures: unknown[],\n ): Promise<void> {\n const quarantineIdentity = required(quarantine.identity);\n if ((await this.port.lstatOrAbsent(item.artifact.path)) !== 'absent') return;\n try {\n await this.port.link(quarantine.path, item.artifact.path);\n } catch (error: unknown) {\n failures.push(error);\n }\n const destination = await this.port.lstatOrAbsent(item.artifact.path);\n if (destination !== 'absent' && sameIdentity(identity(destination), quarantineIdentity)) {\n this.port.journal.setOwnedFilePreserved(item, quarantine.path, false);\n }\n }\n\n private async verifyOriginal(item: RollbackArtifactView, failures: unknown[]): Promise<boolean> {\n try {\n return this.isConfirmedOriginal(item, await this.port.observePublic(item));\n } catch (error: unknown) {\n failures.push(error);\n return false;\n }\n }\n\n private isConfirmedOriginal(item: RollbackArtifactView, observed: ObservedState): boolean {\n if (!sameArtifactState(observed, item.artifact.original)) return false;\n if (observed.status === 'absent') return true;\n return [item.originalIdentity, item.restoredIdentity].some(\n expected => expected !== undefined && sameIdentity(observed.identity, expected),\n );\n }\n}\n\nfunction recoveryResult(outcome: RecoveryOutcome): readonly string[] {\n if (outcome.failures.length > 0) throw new RecoveryUnitError(outcome.paths, outcome.failures);\n return outcome.paths;\n}\n","import { randomUUID } from 'node:crypto';\nimport { basename, dirname, join } from 'node:path';\nimport type { PlannedOutputArtifact } from '../migrator/migration-plan';\nimport type { StagingArtifactView, StagingPort } from './transaction-unit.ports';\nimport { identity, required } from './transaction-unit.state';\n\nexport interface StagedArtifact {\n readonly artifact: PlannedOutputArtifact;\n readonly stagingPath?: string;\n readonly backupPath?: string;\n}\n\nexport interface StagingUnit {\n stage(artifacts: readonly PlannedOutputArtifact[], signal: AbortSignal): Promise<readonly StagedArtifact[]>;\n}\n\nexport class StagingUnitError extends Error {\n constructor(\n cause: unknown,\n readonly staged: readonly StagedArtifact[],\n ) {\n super(cause instanceof Error ? cause.message : 'Migration transaction staging failed.', { cause });\n this.name = 'StagingUnitError';\n this.staged = Object.freeze([...staged]);\n }\n}\n\nexport class FileSystemStagingUnit implements StagingUnit {\n constructor(private readonly port: StagingPort) {}\n\n public async stage(\n artifacts: readonly PlannedOutputArtifact[],\n signal: AbortSignal,\n ): Promise<readonly StagedArtifact[]> {\n try {\n await this.port.journal.prepare(artifacts);\n const items = this.port.journal.artifacts();\n for (const item of items) await this.ensureParentDirectories(item, signal);\n for (const item of items) await this.createNamespace(item);\n for (const item of items) {\n if (item.artifact.proposed.status === 'absent') continue;\n this.port.assertNotInterrupted(signal);\n const stage = await this.port.createStageFile(item, item.artifact.proposed.contents, signal, item.originalMode);\n const staged = await this.port.readOwnedFile(item, stage.path);\n if (item.artifact.kind === 'template') this.port.validateStagedTemplate(item.artifact.path, staged);\n }\n return stagedArtifacts(this.port.journal.artifacts());\n } catch (error: unknown) {\n throw new StagingUnitError(error, stagedArtifacts(this.port.journal.artifacts()));\n }\n }\n\n private async ensureParentDirectories(item: StagingArtifactView, signal: AbortSignal): Promise<void> {\n for (let index = 0; index < item.directories.length; index++) {\n this.port.assertNotInterrupted(signal);\n const expectation = item.directories[index];\n if (!expectation) continue;\n if (expectation.original !== 'absent') {\n await this.port.assertDirectoryExpectation(expectation.path, expectation.original, item.artifact.path);\n continue;\n }\n const existingCreation = this.port.journal.createdDirectory(expectation.path);\n if (existingCreation) {\n this.port.journal.addCreatedDirectoryPublicPath(expectation.path, item.artifact.path);\n await this.port.assertDirectoryIdentity(\n expectation.path,\n required(existingCreation.identity),\n item.artifact.path,\n );\n continue;\n }\n await this.port.assertExpectedAbsent(expectation.path, item.artifact.path);\n const parentExpectation = item.directories[index - 1];\n if (parentExpectation) await this.port.assertExpectedDirectory(parentExpectation, item);\n try {\n await this.port.mkdir(expectation.path, { mode: 0o755 });\n } catch (error: unknown) {\n this.port.journal.recordUnconfirmedEntry(expectation.path, item.artifact.path);\n throw error;\n }\n this.port.journal.recordCreatedDirectory(expectation.path, item.artifact.path);\n const createdStat = await this.port.lstat(expectation.path);\n if (createdStat.isSymbolicLink() || !createdStat.isDirectory()) {\n throw this.port.concurrentModification(item.artifact.path);\n }\n this.port.journal.confirmCreatedDirectory(expectation.path, identity(createdStat));\n if (parentExpectation) await this.port.assertExpectedDirectory(parentExpectation, item);\n }\n await this.port.assertParentChain(item);\n }\n\n private async createNamespace(item: StagingArtifactView): Promise<void> {\n await this.port.assertParentChain(item);\n const namespacePath = join(dirname(item.artifact.path), `.${basename(item.artifact.path)}.${randomUUID()}.txn`);\n await this.port.assertExpectedAbsent(namespacePath, item.artifact.path);\n try {\n await this.port.mkdir(namespacePath, { mode: 0o700 });\n } catch (error: unknown) {\n this.port.journal.recordUnconfirmedEntry(namespacePath, item.artifact.path);\n throw error;\n }\n this.port.journal.recordNamespace(item, namespacePath);\n const namespaceStat = await this.port.lstat(namespacePath);\n if (namespaceStat.isSymbolicLink() || !namespaceStat.isDirectory()) {\n throw this.port.concurrentModification(item.artifact.path);\n }\n this.port.journal.confirmNamespace(item, identity(namespaceStat));\n await this.port.assertParentChain(item);\n }\n}\n\nfunction stagedArtifacts(items: readonly StagingArtifactView[]): readonly StagedArtifact[] {\n return Object.freeze(items.map(item => stagedArtifact(item)));\n}\n\nfunction stagedArtifact(item: StagingArtifactView): StagedArtifact {\n return Object.freeze({\n artifact: item.artifact,\n ...(item.stagingPath === undefined ? {} : { stagingPath: item.stagingPath }),\n });\n}\n","export type TransactionInterruptionHandler = (signal: NodeJS.Signals) => void;\n\nexport interface TransactionSignalTarget {\n on(signal: NodeJS.Signals, listener: TransactionInterruptionHandler): void;\n off(signal: NodeJS.Signals, listener: TransactionInterruptionHandler): void;\n}\n\nexport interface TransactionSignalRegistrarLike {\n register(handler: TransactionInterruptionHandler): () => void;\n}\n\nconst transactionSignals: readonly NodeJS.Signals[] = ['SIGINT', 'SIGTERM'];\n\nexport class TransactionSignalRegistrar implements TransactionSignalRegistrarLike {\n constructor(private readonly target: TransactionSignalTarget = process) {}\n\n register(handler: TransactionInterruptionHandler): () => void {\n for (const signal of transactionSignals) this.target.on(signal, handler);\n\n let registered = true;\n return () => {\n if (!registered) return;\n registered = false;\n for (const signal of transactionSignals) this.target.off(signal, handler);\n };\n }\n}\n","import { constants } from 'node:fs';\nimport { access, link, lstat, mkdir, open, rename, rmdir, stat, unlink } from 'node:fs/promises';\nimport { dirname, join, resolve } from 'node:path';\nimport { MigrationApplicationError } from '../migrator/migration-application.error';\nimport type { PlannedOutputArtifact } from '../migrator/migration-plan';\nimport { AngularTemplateParser } from '../template/angular-template.parser';\nimport { compareCodeUnits } from '../util/compare-code-units';\nimport type {\n CleanupArtifactView,\n CleanupJournal,\n CleanupPort,\n CommitArtifactView,\n CommitJournal,\n CommitPort,\n CreatedDirectoryView,\n OwnedFileView,\n RollbackArtifactView,\n RollbackJournal,\n RollbackPort,\n StagingArtifactView,\n StagingJournal,\n StagingPort,\n UnconfirmedEntryView,\n} from './transaction-unit.ports';\nimport {\n fileMode,\n identity,\n isEnoent,\n required,\n runtimeArtifact,\n sameArtifactState,\n sameIdentity,\n type CreatedDirectory,\n type DirectoryExpectation,\n type FileIdentity,\n type MigrationTransactionFileHandle,\n type MigrationTransactionOperations,\n type MigrationTransactionStat,\n type ObservedState,\n type OwnedFile,\n type OwnedNamespace,\n type RuntimeArtifact,\n type TransactionUnitContext,\n} from './transaction-unit.state';\n\nexport {\n RecoveryUnitError,\n fileMode,\n identity,\n isDirectoryNotEmpty,\n isEnoent,\n pathDepth,\n recoveryOutcome,\n recoveryUnitError,\n required,\n runtimeArtifact,\n sameArtifactState,\n sameIdentity,\n sortedUnique,\n} from './transaction-unit.state';\nexport type {\n CreatedDirectory,\n DirectoryExpectation,\n FileIdentity,\n MigrationTransactionFileHandle,\n MigrationTransactionOperations,\n MigrationTransactionStat,\n ObservedPresentState,\n ObservedState,\n OwnedFile,\n OwnedNamespace,\n RecoveryOutcome,\n RuntimeArtifact,\n TransactionUnitContext,\n} from './transaction-unit.state';\n\nexport const nodeTransactionOperations: MigrationTransactionOperations = {\n access,\n link,\n lstat,\n mkdir,\n open: (target, flags) => open(target, flags),\n rename,\n rmdir,\n stat,\n unlink,\n};\n\nexport class TransactionUnitSession {\n private readonly context: TransactionUnitContext;\n\n constructor(\n private readonly operations: MigrationTransactionOperations = nodeTransactionOperations,\n private readonly parser: AngularTemplateParser = new AngularTemplateParser(),\n ownershipChanged: () => void = () => undefined,\n ) {\n this.context = {\n items: [],\n createdDirectories: new Map(),\n unconfirmedEntries: new Map(),\n recoveryFailures: [],\n restored: new Map(),\n ownershipChanged,\n };\n }\n\n public stagingPort(): StagingPort {\n const journal: StagingJournal = Object.freeze({\n prepare: (artifacts: readonly PlannedOutputArtifact[]) => this.prepare(artifacts),\n artifacts: () => Object.freeze(this.context.items.map(stagingArtifactView)),\n createdDirectory: (path: string) => createdDirectoryView(this.context.createdDirectories.get(path)),\n addCreatedDirectoryPublicPath: (path: string, publicPath: string) =>\n required(this.context.createdDirectories.get(path)).publicPaths.add(publicPath),\n recordUnconfirmedEntry: (path: string, publicPath: string) => this.recordUnconfirmedEntry(path, publicPath),\n recordCreatedDirectory: (path: string, publicPath: string) => this.recordCreatedDirectory(path, publicPath),\n confirmCreatedDirectory: (path: string, expected: FileIdentity) => {\n required(this.context.createdDirectories.get(path)).identity = expected;\n },\n recordNamespace: (item: StagingArtifactView, path: string) => this.recordNamespace(item.artifact, path),\n confirmNamespace: (item: StagingArtifactView, expected: FileIdentity) => {\n required(this.runtimeArtifact(item.artifact).namespace).identity = expected;\n },\n });\n return Object.freeze({\n journal,\n assertDirectoryExpectation: (\n path: string,\n expected: Exclude<DirectoryExpectation['original'], 'absent'>,\n publicPath: string,\n ) => this.assertDirectoryExpectation(path, expected, publicPath),\n assertDirectoryIdentity: (path: string, expected: FileIdentity, publicPath: string) =>\n this.assertDirectoryIdentity(path, expected, publicPath),\n assertExpectedAbsent: (path: string, publicPath: string) => this.assertExpectedAbsent(path, publicPath),\n assertExpectedDirectory: (expectation: DirectoryExpectation, item: StagingArtifactView) =>\n this.assertExpectedDirectory(expectation, this.runtimeArtifact(item.artifact), this.context),\n assertNotInterrupted: (signal: AbortSignal) => this.assertNotInterrupted(signal),\n assertParentChain: (item: StagingArtifactView) =>\n this.assertParentChain(this.runtimeArtifact(item.artifact), this.context),\n concurrentModification: (publicPath: string, cause?: unknown) => this.concurrentModification(publicPath, cause),\n createStageFile: (item: StagingArtifactView, contents: string, signal: AbortSignal, mode?: number) =>\n this.createStageFile(this.runtimeArtifact(item.artifact), contents, signal, mode),\n lstat: (path: string) => this.operations.lstat(path),\n mkdir: (path: string, options?: { readonly recursive?: boolean; readonly mode?: number }) =>\n this.operations.mkdir(path, options),\n readOwnedFile: (item: StagingArtifactView, ownedPath: string) => {\n const runtime = this.runtimeArtifact(item.artifact);\n return this.readOwnedFile(runtime, this.ownedFile(runtime, ownedPath));\n },\n validateStagedTemplate: (publicPath: string, contents: string) =>\n this.validateStagedTemplate(publicPath, contents),\n });\n }\n\n public commitPort(): CommitPort {\n const journal: CommitJournal = Object.freeze({\n artifact: (artifact: PlannedOutputArtifact) => commitArtifactView(this.runtimeArtifact(artifact)),\n artifacts: () => Object.freeze(this.context.items.map(commitArtifactView)),\n addQuarantine: (item: CommitArtifactView, path: string) =>\n ownedFileView(this.addQuarantine(this.runtimeArtifact(item.artifact), path)),\n confirmOwnedFile: (item: CommitArtifactView, ownedPath: string, expected: FileIdentity) =>\n ownedFileView(this.confirmOwnedFile(this.runtimeArtifact(item.artifact), ownedPath, expected)),\n setOwnedFilePreserved: (item: CommitArtifactView, ownedPath: string, preserve: boolean) => {\n this.ownedFile(this.runtimeArtifact(item.artifact), ownedPath).preserve = preserve;\n },\n recordInstalledIdentity: (item: CommitArtifactView, expected: FileIdentity) => {\n this.runtimeArtifact(item.artifact).installedIdentity = expected;\n },\n recordRecoveryFailure: (error: unknown) => this.context.recoveryFailures.push(error),\n });\n return Object.freeze({\n journal,\n assertExpectedAbsent: (path: string, publicPath: string) => this.assertExpectedAbsent(path, publicPath),\n assertNamespace: (item: CommitArtifactView) => this.assertNamespace(this.runtimeArtifact(item.artifact)),\n assertNotInterrupted: (signal: AbortSignal) => this.assertNotInterrupted(signal),\n assertOwnedIdentity: (item: CommitArtifactView, ownedPath: string) => {\n const runtime = this.runtimeArtifact(item.artifact);\n return this.assertOwnedIdentity(runtime, this.ownedFile(runtime, ownedPath));\n },\n assertParentChain: (item: CommitArtifactView) =>\n this.assertParentChain(this.runtimeArtifact(item.artifact), this.context),\n concurrentModification: (publicPath: string, cause?: unknown) => this.concurrentModification(publicPath, cause),\n createBackupFile: (item: CommitArtifactView, contents: string, signal: AbortSignal, mode?: number) =>\n this.createBackupFile(this.runtimeArtifact(item.artifact), contents, signal, mode),\n link: (existingPath: string, newPath: string) => this.operations.link(existingPath, newPath),\n lstatOrAbsent: (path: string) => this.lstatOrAbsent(path),\n observePublic: (item: CommitArtifactView) =>\n this.observePublic(this.runtimeArtifact(item.artifact), this.context),\n ownershipFailure: (publicPath: string) => this.ownershipFailure(publicPath),\n readOwnedFile: (item: CommitArtifactView, ownedPath: string) => {\n const runtime = this.runtimeArtifact(item.artifact);\n return this.readOwnedFile(runtime, this.ownedFile(runtime, ownedPath));\n },\n rename: (source: string, destination: string) => this.operations.rename(source, destination),\n });\n }\n\n public rollbackPort(): RollbackPort {\n const journal: RollbackJournal = Object.freeze({\n artifact: (artifact: PlannedOutputArtifact) => rollbackArtifactView(this.runtimeArtifact(artifact)),\n artifacts: () => Object.freeze(this.context.items.map(rollbackArtifactView)),\n recoveryFailures: () => Object.freeze([...this.context.recoveryFailures]),\n addQuarantine: (item: RollbackArtifactView, path: string) =>\n ownedFileView(this.addQuarantine(this.runtimeArtifact(item.artifact), path)),\n confirmOwnedFile: (item: RollbackArtifactView, ownedPath: string, expected: FileIdentity) =>\n ownedFileView(this.confirmOwnedFile(this.runtimeArtifact(item.artifact), ownedPath, expected)),\n setOwnedFilePreserved: (item: RollbackArtifactView, ownedPath: string, preserve: boolean) => {\n this.ownedFile(this.runtimeArtifact(item.artifact), ownedPath).preserve = preserve;\n },\n recordRestoredIdentity: (item: RollbackArtifactView, expected: FileIdentity) => {\n this.runtimeArtifact(item.artifact).restoredIdentity = expected;\n },\n recordRestored: (item: RollbackArtifactView, restored: boolean) => {\n this.context.restored.set(this.runtimeArtifact(item.artifact), restored);\n },\n });\n return Object.freeze({\n journal,\n assertExpectedAbsent: (path: string, publicPath: string) => this.assertExpectedAbsent(path, publicPath),\n assertNamespace: (item: RollbackArtifactView) => this.assertNamespace(this.runtimeArtifact(item.artifact)),\n assertParentChain: (item: RollbackArtifactView) =>\n this.assertParentChain(this.runtimeArtifact(item.artifact), this.context),\n link: (existingPath: string, newPath: string) => this.operations.link(existingPath, newPath),\n lstatOrAbsent: (path: string) => this.lstatOrAbsent(path),\n observePublic: (item: RollbackArtifactView) =>\n this.observePublic(this.runtimeArtifact(item.artifact), this.context),\n readOwnedFile: (item: RollbackArtifactView, ownedPath: string) => {\n const runtime = this.runtimeArtifact(item.artifact);\n return this.readOwnedFile(runtime, this.ownedFile(runtime, ownedPath));\n },\n rename: (source: string, destination: string) => this.operations.rename(source, destination),\n });\n }\n\n public cleanupPort(): CleanupPort {\n const journal: CleanupJournal = Object.freeze({\n artifact: (artifact: PlannedOutputArtifact) => cleanupArtifactView(this.runtimeArtifact(artifact)),\n artifacts: () => Object.freeze(this.context.items.map(cleanupArtifactView)),\n createdDirectories: () =>\n Object.freeze([...this.context.createdDirectories.values()].map(directory => createdDirectoryView(directory)!)),\n unconfirmedEntries: () => this.unconfirmedEntryViews(),\n restored: (item: CleanupArtifactView) => this.context.restored.get(this.runtimeArtifact(item.artifact)),\n markOwnedFileAbsent: (item: CleanupArtifactView, ownedPath: string) => {\n this.ownedFile(this.runtimeArtifact(item.artifact), ownedPath).exists = false;\n },\n markNamespaceAbsent: (item: CleanupArtifactView) => {\n required(this.runtimeArtifact(item.artifact).namespace).exists = false;\n },\n markCreatedDirectoryAbsent: (path: string) => {\n required(this.context.createdDirectories.get(path)).exists = false;\n this.context.ownershipChanged();\n },\n finishArtifactCleanup: () => this.context.ownershipChanged(),\n });\n return Object.freeze({\n journal,\n assertNamespace: (item: CleanupArtifactView) => this.assertNamespace(this.runtimeArtifact(item.artifact)),\n closeReadHandles: (item: CleanupArtifactView, failures: unknown[]) =>\n this.closeReadHandles(this.runtimeArtifact(item.artifact), failures),\n closeOpenHandle: (item: CleanupArtifactView, failures: unknown[]) =>\n this.closeOpenHandle(this.runtimeArtifact(item.artifact), failures),\n lstat: (path: string) => this.operations.lstat(path),\n lstatOrAbsent: (path: string) => this.lstatOrAbsent(path),\n observePublic: (item: CleanupArtifactView) =>\n this.observePublic(this.runtimeArtifact(item.artifact), this.context),\n rmdir: (path: string) => this.operations.rmdir(path),\n unlink: (path: string) => this.operations.unlink(path),\n });\n }\n\n public async prepareForPreflight(artifacts: readonly PlannedOutputArtifact[]): Promise<void> {\n await this.prepare(artifacts);\n }\n\n public hasOwnedArtifacts(): boolean {\n return (\n [...this.context.createdDirectories.values()].some(directory => directory.exists) ||\n this.context.items.some(\n item =>\n item.namespace?.exists ||\n item.stage?.exists ||\n item.backup?.exists ||\n item.quarantines.some(quarantine => quarantine.exists),\n )\n );\n }\n\n private async prepare(artifacts: readonly PlannedOutputArtifact[]): Promise<void> {\n const ordered = [...artifacts].sort((left, right) => compareCodeUnits(resolve(left.path), resolve(right.path)));\n for (let index = 1; index < ordered.length; index++) {\n const previous = ordered[index - 1];\n const current = ordered[index];\n if (!previous || !current || previous.path !== current.path) continue;\n throw new MigrationApplicationError('path-collision', `Migration paths collide: ${current.path}`, [current.path]);\n }\n\n for (const artifact of ordered) {\n let item: RuntimeArtifact | undefined;\n try {\n const directories = await this.inspectDirectoryChain(dirname(artifact.path), artifact.path);\n item = { artifact, directories, quarantines: [], ownedFiles: [], readHandles: new Set() };\n const current = await this.observePublic(item);\n if (!sameArtifactState(current, artifact.original)) throw this.concurrentModification(artifact.path);\n if (current.status === 'present') {\n item.originalIdentity = current.identity;\n item.originalMode = current.mode;\n }\n this.context.items.push(item);\n } catch (error: unknown) {\n const closeFailures: unknown[] = [];\n if (item) await this.closeReadHandles(item, closeFailures);\n const failure = this.attachRecoveryFailures(artifact.path, error, closeFailures);\n if (failure instanceof MigrationApplicationError) throw failure;\n throw new MigrationApplicationError(\n 'transaction-io',\n `Could not verify migration destination: ${artifact.path}`,\n [artifact.path],\n { cause: failure },\n );\n }\n }\n }\n\n private async inspectDirectoryChain(parent: string, publicPath: string): Promise<readonly DirectoryExpectation[]> {\n const result: DirectoryExpectation[] = [];\n let missing = false;\n for (const candidate of directoryChain(parent)) {\n if (missing) {\n result.push({ path: candidate, original: 'absent' });\n continue;\n }\n try {\n const candidateStat = await this.operations.lstat(candidate);\n const isImmediateParent = candidate === resolve(parent);\n if (\n (!candidateStat.isSymbolicLink() && !candidateStat.isDirectory()) ||\n (isImmediateParent && candidateStat.isSymbolicLink())\n ) {\n throw new MigrationApplicationError(\n 'unsupported-path-type',\n `Migration destination parent must be a directory: ${candidate}`,\n [publicPath],\n );\n }\n if (candidateStat.isSymbolicLink()) {\n const followed = await this.operations.stat(candidate);\n if (!followed.isDirectory()) {\n throw new MigrationApplicationError(\n 'unsupported-path-type',\n `Migration destination ancestor must resolve to a directory: ${candidate}`,\n [publicPath],\n );\n }\n result.push({\n path: candidate,\n original: {\n identity: identity(candidateStat),\n kind: 'symbolic-link',\n followedIdentity: identity(followed),\n },\n });\n } else {\n result.push({ path: candidate, original: { identity: identity(candidateStat), kind: 'directory' } });\n }\n } catch (error: unknown) {\n if (!isEnoent(error)) throw error;\n missing = true;\n result.push({ path: candidate, original: 'absent' });\n }\n }\n const nearestExisting = [...result].reverse().find(item => item.original !== 'absent');\n if (nearestExisting) await this.operations.access(nearestExisting.path, constants.W_OK | constants.X_OK);\n return result;\n }\n\n private async createStageFile(\n item: RuntimeArtifact,\n contents: string,\n signal: AbortSignal,\n mode?: number,\n ): Promise<OwnedFileView> {\n await this.assertNamespace(item);\n const namespace = required(item.namespace);\n const owned = this.registerOwnedFile(item, join(namespace.path, 'stage'));\n item.stage = owned;\n await this.writeOwnedFile(item, owned, contents, signal, mode);\n return ownedFileView(owned);\n }\n\n private async createBackupFile(\n item: RuntimeArtifact,\n contents: string,\n signal: AbortSignal,\n mode?: number,\n ): Promise<OwnedFileView> {\n await this.assertNamespace(item);\n const namespace = required(item.namespace);\n const owned = this.registerOwnedFile(item, join(namespace.path, 'backup'));\n item.backup = owned;\n await this.writeOwnedFile(item, owned, contents, signal, mode);\n return ownedFileView(owned);\n }\n\n private registerOwnedFile(item: RuntimeArtifact, path: string): OwnedFile {\n const owned: OwnedFile = {\n path,\n publicPath: item.artifact.path,\n exists: false,\n preserve: false,\n };\n item.ownedFiles.push(owned);\n return owned;\n }\n\n private async writeOwnedFile(\n item: RuntimeArtifact,\n owned: OwnedFile,\n contents: string,\n signal: AbortSignal,\n mode?: number,\n ): Promise<void> {\n await this.assertExpectedAbsent(owned.path, item.artifact.path);\n const handle = await this.operations.open(owned.path, 'wx');\n owned.exists = true;\n item.openHandle = handle;\n this.context.ownershipChanged();\n if (mode !== undefined) await handle.chmod(mode);\n owned.identity = identity(await handle.stat());\n this.assertNotInterrupted(signal);\n await handle.writeFile(contents, 'utf8');\n this.assertNotInterrupted(signal);\n await handle.sync();\n this.assertNotInterrupted(signal);\n await handle.close();\n item.openHandle = undefined;\n this.assertNotInterrupted(signal);\n await this.assertOwnedIdentity(item, owned);\n }\n\n private runtimeArtifact(artifact: PlannedOutputArtifact): RuntimeArtifact {\n return runtimeArtifact(this.context, artifact);\n }\n\n private ownedFile(item: RuntimeArtifact, path: string): OwnedFile {\n const owned = item.ownedFiles.find(candidate => candidate.path === path);\n if (owned !== undefined) return owned;\n throw new MigrationApplicationError(\n 'internal-invariant',\n `Migration transaction journal contains an unknown invocation-owned file: ${path}`,\n [item.artifact.path],\n );\n }\n\n private addQuarantine(item: RuntimeArtifact, path: string): OwnedFile {\n const quarantine = this.registerOwnedFile(item, path);\n item.quarantines.push(quarantine);\n return quarantine;\n }\n\n private confirmOwnedFile(item: RuntimeArtifact, path: string, expected: FileIdentity): OwnedFile {\n const owned = this.ownedFile(item, path);\n owned.exists = true;\n owned.identity = expected;\n return owned;\n }\n\n private recordNamespace(artifact: PlannedOutputArtifact, path: string): void {\n const item = this.runtimeArtifact(artifact);\n item.namespace = { path, publicPath: item.artifact.path, exists: true };\n this.context.ownershipChanged();\n }\n\n private recordCreatedDirectory(path: string, publicPath: string): void {\n this.context.createdDirectories.set(path, {\n path,\n publicPaths: new Set([publicPath]),\n exists: true,\n });\n this.context.ownershipChanged();\n }\n\n private recordUnconfirmedEntry(path: string, publicPath: string): void {\n const publicPaths = this.context.unconfirmedEntries.get(path) ?? new Set<string>();\n publicPaths.add(publicPath);\n this.context.unconfirmedEntries.set(path, publicPaths);\n }\n\n private unconfirmedEntryViews(): readonly UnconfirmedEntryView[] {\n return Object.freeze(\n [...this.context.unconfirmedEntries].map(([path, publicPaths]) =>\n Object.freeze({ path, publicPaths: Object.freeze([...publicPaths]) }),\n ),\n );\n }\n\n private async closeOpenHandle(item: RuntimeArtifact, failures: unknown[]): Promise<void> {\n if (!item.openHandle) return;\n try {\n await item.openHandle.close();\n } catch (error: unknown) {\n failures.push(error);\n }\n item.openHandle = undefined;\n }\n\n private validateStagedTemplate(publicPath: string, contents: string): void {\n if (this.parser.parse(contents, publicPath).status !== 'parse-error') return;\n throw new MigrationApplicationError(\n 'internal-invariant',\n `Staged template failed Angular validation: ${publicPath}`,\n [publicPath],\n );\n }\n\n private async observePublic(item: RuntimeArtifact, context?: TransactionUnitContext): Promise<ObservedState> {\n await this.assertParentChain(item, context);\n const before = await this.lstatOrAbsent(item.artifact.path);\n if (before === 'absent') return { status: 'absent' };\n if (before.isSymbolicLink() || !before.isFile()) {\n throw new MigrationApplicationError(\n 'unsupported-path-type',\n `Migration destination must be a regular file: ${item.artifact.path}`,\n [item.artifact.path],\n );\n }\n const beforeIdentity = identity(before);\n const handle = await this.operations.open(item.artifact.path, 'r');\n const contents = await this.readThroughHandle(item, handle, async () => {\n const handleBefore = identity(await handle.stat());\n if (!sameIdentity(beforeIdentity, handleBefore)) throw this.concurrentModification(item.artifact.path);\n const read = await handle.readFile({ encoding: 'utf8' });\n const handleAfter = identity(await handle.stat());\n if (!sameIdentity(handleBefore, handleAfter)) throw this.concurrentModification(item.artifact.path);\n return read;\n });\n const after = await this.lstatOrAbsent(item.artifact.path);\n if (\n after === 'absent' ||\n after.isSymbolicLink() ||\n !after.isFile() ||\n !sameIdentity(beforeIdentity, identity(after))\n ) {\n throw this.concurrentModification(item.artifact.path);\n }\n await this.assertParentChain(item, context);\n return { status: 'present', contents, identity: beforeIdentity, mode: fileMode(before) };\n }\n\n private async readOwnedFile(item: RuntimeArtifact, owned: OwnedFile): Promise<string> {\n await this.assertOwnedIdentity(item, owned);\n const expected = required(owned.identity);\n const handle = await this.operations.open(owned.path, 'r');\n const contents = await this.readThroughHandle(item, handle, async () => {\n const before = identity(await handle.stat());\n if (!sameIdentity(before, expected)) throw this.ownershipFailure(owned.publicPath);\n const read = await handle.readFile({ encoding: 'utf8' });\n const after = identity(await handle.stat());\n if (!sameIdentity(after, expected)) throw this.ownershipFailure(owned.publicPath);\n return read;\n });\n await this.assertOwnedIdentity(item, owned);\n return contents;\n }\n\n private async readThroughHandle<T>(\n item: RuntimeArtifact,\n handle: MigrationTransactionFileHandle,\n read: () => Promise<T>,\n ): Promise<T> {\n item.readHandles.add(handle);\n let value: T | undefined;\n let readFailure: unknown;\n let readFailed = false;\n try {\n value = await read();\n } catch (error: unknown) {\n readFailed = true;\n readFailure = error;\n }\n const closeFailures: unknown[] = [];\n for (let attempt = 0; attempt < 2 && item.readHandles.has(handle); attempt++) {\n try {\n await handle.close();\n item.readHandles.delete(handle);\n } catch (error: unknown) {\n closeFailures.push(error);\n }\n }\n if (readFailed) throw this.attachRecoveryFailures(item.artifact.path, readFailure, closeFailures);\n if (closeFailures.length > 0) {\n throw new MigrationApplicationError(\n 'transaction-io',\n `Could not close a migration read handle: ${item.artifact.path}`,\n [item.artifact.path],\n { cause: closeFailures[0], recoveryFailures: closeFailures.slice(1) },\n );\n }\n return value as T;\n }\n\n private attachRecoveryFailures(publicPath: string, error: unknown, recoveryFailures: readonly unknown[]): unknown {\n if (recoveryFailures.length === 0) return error;\n if (error instanceof MigrationApplicationError) {\n return new MigrationApplicationError(error.code, error.message, error.paths, {\n cause: error.cause ?? error,\n recoveryFailures: [...error.recoveryFailures, ...recoveryFailures],\n });\n }\n return new MigrationApplicationError(\n 'transaction-io',\n `Could not read migration state: ${publicPath}`,\n [publicPath],\n {\n cause: error,\n recoveryFailures,\n },\n );\n }\n\n private async assertOwnedIdentity(item: RuntimeArtifact, owned: OwnedFile): Promise<void> {\n await this.assertNamespace(item);\n if (!owned.identity) throw this.ownershipFailure(owned.publicPath);\n const ownedStat = await this.operations.lstat(owned.path);\n if (ownedStat.isSymbolicLink() || !ownedStat.isFile() || !sameIdentity(identity(ownedStat), owned.identity)) {\n throw this.ownershipFailure(owned.publicPath);\n }\n await this.assertNamespace(item);\n }\n\n private async assertNamespace(item: RuntimeArtifact): Promise<void> {\n const namespace = required(item.namespace);\n const expectedIdentity = required(namespace.identity);\n const namespaceStat = await this.operations.lstat(namespace.path);\n if (\n namespaceStat.isSymbolicLink() ||\n !namespaceStat.isDirectory() ||\n !sameIdentity(identity(namespaceStat), expectedIdentity)\n ) {\n throw this.ownershipFailure(namespace.publicPath);\n }\n }\n\n private async assertParentChain(item: RuntimeArtifact, context?: TransactionUnitContext): Promise<void> {\n for (const expectation of item.directories) await this.assertExpectedDirectory(expectation, item, context);\n }\n\n private async assertExpectedDirectory(\n expectation: DirectoryExpectation,\n item: RuntimeArtifact,\n context?: TransactionUnitContext,\n ): Promise<void> {\n const created = context?.createdDirectories.get(expectation.path);\n if (created?.exists) {\n await this.assertDirectoryIdentity(expectation.path, required(created.identity), item.artifact.path);\n return;\n }\n if (expectation.original === 'absent') {\n await this.assertExpectedAbsent(expectation.path, item.artifact.path);\n return;\n }\n await this.assertDirectoryExpectation(expectation.path, expectation.original, item.artifact.path);\n }\n\n private async assertDirectoryExpectation(\n path: string,\n expected: Exclude<DirectoryExpectation['original'], 'absent'>,\n publicPath: string,\n ): Promise<void> {\n let pathStat: MigrationTransactionStat;\n try {\n pathStat = await this.operations.lstat(path);\n } catch (error: unknown) {\n throw this.concurrentModification(publicPath, error);\n }\n const kind = pathStat.isSymbolicLink() ? 'symbolic-link' : pathStat.isDirectory() ? 'directory' : undefined;\n if (kind !== expected.kind || !sameIdentity(identity(pathStat), expected.identity)) {\n throw this.concurrentModification(publicPath);\n }\n if (expected.kind === 'symbolic-link') {\n let followed: MigrationTransactionStat;\n try {\n followed = await this.operations.stat(path);\n } catch (error: unknown) {\n throw this.concurrentModification(publicPath, error);\n }\n if (!followed.isDirectory() || !sameIdentity(identity(followed), expected.followedIdentity)) {\n throw this.concurrentModification(publicPath);\n }\n }\n }\n\n private async assertDirectoryIdentity(path: string, expected: FileIdentity, publicPath: string): Promise<void> {\n let pathStat: MigrationTransactionStat;\n try {\n pathStat = await this.operations.lstat(path);\n } catch (error: unknown) {\n throw this.concurrentModification(publicPath, error);\n }\n if (pathStat.isSymbolicLink() || !pathStat.isDirectory() || !sameIdentity(identity(pathStat), expected)) {\n throw this.concurrentModification(publicPath);\n }\n }\n\n private async assertExpectedAbsent(path: string, publicPath: string): Promise<void> {\n try {\n await this.operations.lstat(path);\n } catch (error: unknown) {\n if (isEnoent(error)) return;\n throw error;\n }\n throw this.concurrentModification(publicPath);\n }\n\n private async lstatOrAbsent(path: string): Promise<MigrationTransactionStat | 'absent'> {\n try {\n return await this.operations.lstat(path);\n } catch (error: unknown) {\n if (isEnoent(error)) return 'absent';\n throw error;\n }\n }\n\n private async closeReadHandles(item: RuntimeArtifact, failures: unknown[]): Promise<void> {\n for (const handle of item.readHandles) {\n try {\n await handle.close();\n item.readHandles.delete(handle);\n } catch (error: unknown) {\n failures.push(error);\n }\n }\n }\n\n private assertNotInterrupted(signal: AbortSignal): void {\n if (!signal.aborted) return;\n throw signal.reason instanceof Error ? signal.reason : new Error('Migration transaction interrupted.');\n }\n\n private concurrentModification(publicPath: string, cause?: unknown): MigrationApplicationError {\n return new MigrationApplicationError(\n 'concurrent-modification',\n `Migration destination changed after planning: ${publicPath}`,\n [publicPath],\n cause === undefined ? undefined : { cause },\n );\n }\n\n private ownershipFailure(publicPath: string): MigrationApplicationError {\n return new MigrationApplicationError(\n 'transaction-io',\n `Migration transaction ownership could not be confirmed: ${publicPath}`,\n [publicPath],\n );\n }\n}\n\nfunction directoryChain(path: string): readonly string[] {\n const result: string[] = [];\n let current = resolve(path);\n while (true) {\n result.unshift(current);\n const parent = dirname(current);\n if (parent === current) return result;\n current = parent;\n }\n}\n\nfunction frozenIdentity(value: FileIdentity | undefined): FileIdentity | undefined {\n return value === undefined ? undefined : Object.freeze({ ...value });\n}\n\nfunction ownedFileView(owned: OwnedFile): OwnedFileView {\n return Object.freeze({\n path: owned.path,\n publicPath: owned.publicPath,\n ...(owned.identity === undefined ? {} : { identity: frozenIdentity(owned.identity) }),\n exists: owned.exists,\n preserve: owned.preserve,\n });\n}\n\nfunction ownedNamespaceView(namespace: OwnedNamespace | undefined) {\n if (namespace === undefined) return undefined;\n return Object.freeze({\n path: namespace.path,\n publicPath: namespace.publicPath,\n ...(namespace.identity === undefined ? {} : { identity: frozenIdentity(namespace.identity) }),\n exists: namespace.exists,\n });\n}\n\nfunction directoryExpectationView(expectation: DirectoryExpectation): DirectoryExpectation {\n if (expectation.original === 'absent') return Object.freeze({ path: expectation.path, original: 'absent' });\n return Object.freeze({\n path: expectation.path,\n original: Object.freeze({\n ...expectation.original,\n identity: frozenIdentity(expectation.original.identity)!,\n ...(expectation.original.kind === 'symbolic-link'\n ? { followedIdentity: frozenIdentity(expectation.original.followedIdentity)! }\n : {}),\n }),\n });\n}\n\nfunction stagingArtifactView(item: RuntimeArtifact): StagingArtifactView {\n return Object.freeze({\n artifact: item.artifact,\n directories: Object.freeze(item.directories.map(directoryExpectationView)),\n ...(item.originalMode === undefined ? {} : { originalMode: item.originalMode }),\n ...(item.stage === undefined ? {} : { stagingPath: item.stage.path }),\n });\n}\n\nfunction commitArtifactView(item: RuntimeArtifact): CommitArtifactView {\n return Object.freeze({\n artifact: item.artifact,\n ...(item.originalIdentity === undefined ? {} : { originalIdentity: frozenIdentity(item.originalIdentity) }),\n ...(item.namespace === undefined ? {} : { namespace: ownedNamespaceView(item.namespace) }),\n ...(item.stage === undefined ? {} : { stage: ownedFileView(item.stage) }),\n ...(item.backup === undefined ? {} : { backup: ownedFileView(item.backup) }),\n quarantines: Object.freeze(item.quarantines.map(ownedFileView)),\n ...(item.installedIdentity === undefined ? {} : { installedIdentity: frozenIdentity(item.installedIdentity) }),\n });\n}\n\nfunction rollbackArtifactView(item: RuntimeArtifact): RollbackArtifactView {\n return Object.freeze({\n artifact: item.artifact,\n ...(item.originalIdentity === undefined ? {} : { originalIdentity: frozenIdentity(item.originalIdentity) }),\n ...(item.namespace === undefined ? {} : { namespace: ownedNamespaceView(item.namespace) }),\n ...(item.stage === undefined ? {} : { stage: ownedFileView(item.stage) }),\n ...(item.backup === undefined ? {} : { backup: ownedFileView(item.backup) }),\n ...(item.installedIdentity === undefined ? {} : { installedIdentity: frozenIdentity(item.installedIdentity) }),\n ...(item.restoredIdentity === undefined ? {} : { restoredIdentity: frozenIdentity(item.restoredIdentity) }),\n });\n}\n\nfunction cleanupArtifactView(item: RuntimeArtifact): CleanupArtifactView {\n return Object.freeze({\n artifact: item.artifact,\n directories: Object.freeze(item.directories.map(directoryExpectationView)),\n ...(item.originalIdentity === undefined ? {} : { originalIdentity: frozenIdentity(item.originalIdentity) }),\n ...(item.namespace === undefined ? {} : { namespace: ownedNamespaceView(item.namespace) }),\n ownedFiles: Object.freeze(item.ownedFiles.map(ownedFileView)),\n ...(item.backup === undefined ? {} : { backupPath: item.backup.path }),\n ...(item.restoredIdentity === undefined ? {} : { restoredIdentity: frozenIdentity(item.restoredIdentity) }),\n });\n}\n\nfunction createdDirectoryView(directory: CreatedDirectory | undefined): CreatedDirectoryView | undefined {\n if (directory === undefined) return undefined;\n return Object.freeze({\n path: directory.path,\n ...(directory.identity === undefined ? {} : { identity: frozenIdentity(directory.identity) }),\n publicPaths: Object.freeze([...directory.publicPaths]),\n exists: directory.exists,\n });\n}\n","import { MigrationApplicationError, type MigrationApplicationErrorCode } from '../migrator/migration-application.error';\nimport type { MigrationPlan } from '../migrator/migration-plan';\nimport { AngularTemplateParser } from '../template/angular-template.parser';\nimport { compareCodeUnits } from '../util/compare-code-units';\nimport { FileSystemCleanupUnit } from './cleanup.unit';\nimport { CommitUnitError, FileSystemCommitUnit, type CommittedArtifact } from './commit.unit';\nimport { FileSystemRollbackUnit } from './rollback.unit';\nimport { FileSystemStagingUnit, StagingUnitError, type StagedArtifact } from './staging.unit';\nimport { TransactionSignalRegistrar, type TransactionSignalRegistrarLike } from './transaction-signal.registrar';\nimport {\n RecoveryUnitError,\n TransactionUnitSession,\n nodeTransactionOperations,\n type MigrationTransactionFileHandle,\n type MigrationTransactionOperations,\n type MigrationTransactionStat,\n type RecoveryOutcome,\n} from './transaction-unit.session';\n\nexport type { MigrationTransactionFileHandle, MigrationTransactionOperations, MigrationTransactionStat };\n\ninterface PreflightSeal {\n readonly plan: MigrationPlan;\n readonly contents: string;\n}\n\nclass TransactionInterruptedError extends Error {\n constructor(readonly signal: NodeJS.Signals) {\n super(`Migration transaction interrupted by ${signal}.`);\n this.name = 'TransactionInterruptedError';\n }\n}\n\nexport class MigrationTransaction {\n private interruptedBy: NodeJS.Signals | undefined;\n private unregisterSignals: (() => void) | undefined;\n private preflightSeal: PreflightSeal | undefined;\n private activePreflight: symbol | undefined;\n private applying = false;\n\n constructor(\n private readonly operations: MigrationTransactionOperations = nodeTransactionOperations,\n private readonly signalRegistrar: TransactionSignalRegistrarLike = new TransactionSignalRegistrar(),\n private readonly parser: AngularTemplateParser = new AngularTemplateParser(),\n ) {}\n\n public async preflight(plan: MigrationPlan): Promise<void> {\n if (this.applying) throw this.invalidTransition('preflight', plan);\n if (this.activePreflight !== undefined) {\n throw new MigrationApplicationError(\n 'internal-invariant',\n 'Migration transaction cannot preflight while another preflight is active.',\n sortedUnique(plan.artifacts.map(artifact => artifact.path)),\n );\n }\n const owner = Symbol('preflight');\n this.activePreflight = owner;\n this.preflightSeal = undefined;\n try {\n this.rejectParseErrors(plan);\n const session = new TransactionUnitSession(this.operations, this.parser);\n await session.prepareForPreflight(plan.artifacts);\n if (this.activePreflight !== owner) throw this.invalidTransition('preflight', plan);\n this.preflightSeal = { plan, contents: planContents(plan) };\n } finally {\n if (this.activePreflight === owner) this.activePreflight = undefined;\n }\n }\n\n public async apply(plan: MigrationPlan): Promise<void> {\n this.assertPreflightSeal(plan);\n this.preflightSeal = undefined;\n if (plan.artifacts.length === 0) return;\n if (this.applying) throw this.invalidTransition('apply', plan);\n\n this.applying = true;\n this.interruptedBy = undefined;\n const controller = new AbortController();\n const session = new TransactionUnitSession(this.operations, this.parser, () => {\n this.syncSignalScope(session, controller);\n });\n const stagingUnit = new FileSystemStagingUnit(session.stagingPort());\n const commitUnit = new FileSystemCommitUnit(session.commitPort());\n const rollbackUnit = new FileSystemRollbackUnit(session.rollbackPort());\n\n let staged: readonly StagedArtifact[] = [];\n try {\n staged = await stagingUnit.stage(plan.artifacts, controller.signal);\n } catch (error: unknown) {\n const stagingError = error instanceof StagingUnitError ? error : undefined;\n staged = stagingError?.staged ?? staged;\n const recovery = await this.runCleanup(session, staged, 'recovery');\n this.finishApplication();\n throw this.decorateFailure(stagingError?.cause ?? error, recovery);\n }\n\n let committed: readonly CommittedArtifact[] = [];\n try {\n committed = await commitUnit.commit(staged, controller.signal);\n this.assertNotInterrupted(controller.signal);\n } catch (error: unknown) {\n const commitError = error instanceof CommitUnitError ? error : undefined;\n staged = commitError?.staged ?? staged;\n committed = commitError?.committed ?? committed;\n const rollback = await this.runRollback(rollbackUnit, [...committed].reverse());\n const cleanup = await this.runCleanup(session, staged, 'recovery');\n this.finishApplication();\n throw this.decorateFailure(commitError?.cause ?? error, mergeRecovery(rollback, cleanup));\n }\n\n const finalization = await this.runCleanup(session, staged, 'committed');\n this.finishApplication();\n if (finalization.paths.length > 0 || finalization.failures.length > 0) {\n const cause = finalization.failures[0] ?? new Error('Transaction cleanup could not be confirmed.');\n throw new MigrationApplicationError(\n this.interruptedBy ? 'transaction-interrupted' : 'transaction-io',\n this.interruptedBy\n ? 'Migration transaction was interrupted during cleanup.'\n : 'Migration committed, but cleanup was incomplete.',\n finalization.paths,\n { cause, recoveryFailures: finalization.failures.slice(1) },\n );\n }\n if (this.interruptedBy) {\n throw new MigrationApplicationError('transaction-interrupted', 'Migration transaction was interrupted.', [], {\n cause: new TransactionInterruptedError(this.interruptedBy),\n });\n }\n }\n\n private rejectParseErrors(plan: MigrationPlan): void {\n const paths = plan.files\n .flatMap(file => file.results.filter(result => result.status === 'parse-error').map(result => result.fileName))\n .filter((path, index, all) => all.indexOf(path) === index)\n .sort(compareCodeUnits);\n if (paths.length === 0) return;\n throw new MigrationApplicationError(\n 'internal-invariant',\n 'A migration plan with template parse errors cannot be applied.',\n paths,\n );\n }\n\n private assertPreflightSeal(plan: MigrationPlan): void {\n const seal = this.preflightSeal;\n if (seal?.plan === plan && seal.contents === planContents(plan)) return;\n throw this.invalidTransition('apply', plan);\n }\n\n private invalidTransition(action: 'preflight' | 'apply', plan: MigrationPlan): MigrationApplicationError {\n return new MigrationApplicationError(\n 'internal-invariant',\n action === 'apply'\n ? 'Migration transaction apply requires the exact plan that passed preflight.'\n : 'Migration transaction cannot preflight while application is active.',\n sortedUnique(plan.artifacts.map(artifact => artifact.path)),\n );\n }\n\n private async runRollback(\n rollbackUnit: FileSystemRollbackUnit,\n committed: readonly CommittedArtifact[],\n ): Promise<RecoveryOutcome> {\n try {\n return { paths: await rollbackUnit.rollback(committed), failures: [] };\n } catch (error: unknown) {\n if (error instanceof RecoveryUnitError) return { paths: error.paths, failures: error.failures };\n return { paths: [], failures: [error] };\n }\n }\n\n private async runCleanup(\n session: TransactionUnitSession,\n staged: readonly StagedArtifact[],\n kind: 'committed' | 'recovery',\n ): Promise<RecoveryOutcome> {\n try {\n return { paths: await new FileSystemCleanupUnit(session.cleanupPort(), kind).cleanup(staged), failures: [] };\n } catch (error: unknown) {\n if (error instanceof RecoveryUnitError) return { paths: error.paths, failures: error.failures };\n return { paths: [], failures: [error] };\n }\n }\n\n private decorateFailure(error: unknown, recovery: RecoveryOutcome): MigrationApplicationError {\n const interrupted = this.interruptedBy !== undefined || error instanceof TransactionInterruptedError;\n const applicationError = error instanceof MigrationApplicationError ? error : undefined;\n const code: MigrationApplicationErrorCode = interrupted\n ? 'transaction-interrupted'\n : (applicationError?.code ?? 'transaction-io');\n const validationPaths =\n applicationError && applicationError.code !== 'transaction-io' ? applicationError.paths : [];\n const paths = sortedUnique([...validationPaths, ...recovery.paths]);\n const cause = applicationError?.cause ?? error;\n const recoveryFailures = [...(applicationError?.recoveryFailures ?? []), ...recovery.failures];\n return new MigrationApplicationError(\n code,\n interrupted\n ? 'Migration transaction was interrupted.'\n : (applicationError?.message ?? 'Migration transaction failed.'),\n paths,\n { cause, recoveryFailures },\n );\n }\n\n private syncSignalScope(session: TransactionUnitSession, controller: AbortController): void {\n const hasOwnedArtifacts = session.hasOwnedArtifacts();\n if (hasOwnedArtifacts && !this.unregisterSignals) {\n this.unregisterSignals = this.signalRegistrar.register(signal => {\n this.interruptedBy ??= signal;\n if (!controller.signal.aborted) controller.abort(new TransactionInterruptedError(signal));\n });\n } else if (!hasOwnedArtifacts) {\n this.unregisterSignalHandlers();\n }\n }\n\n private finishApplication(): void {\n this.unregisterSignalHandlers();\n this.applying = false;\n }\n\n private unregisterSignalHandlers(): void {\n this.unregisterSignals?.();\n this.unregisterSignals = undefined;\n }\n\n private assertNotInterrupted(signal: AbortSignal): void {\n if (!signal.aborted) return;\n throw signal.reason instanceof Error ? signal.reason : new Error('Migration transaction interrupted.');\n }\n}\n\nfunction planContents(plan: MigrationPlan): string {\n return JSON.stringify(plan);\n}\n\nfunction mergeRecovery(...outcomes: readonly RecoveryOutcome[]): RecoveryOutcome {\n return {\n paths: sortedUnique(outcomes.flatMap(outcome => outcome.paths)),\n failures: Object.freeze(outcomes.flatMap(outcome => outcome.failures)),\n };\n}\n\nfunction sortedUnique(paths: Iterable<string>): readonly string[] {\n return [...new Set(paths)].sort(compareCodeUnits);\n}\n","import type { MigrationApplication } from '../report/migration-report';\nimport { MigrationApplicationError } from '../migrator/migration-application.error';\nimport type { ValidatedProjectPlan } from './validated-project-plan';\n\nexport interface AppliedProject {\n readonly validated: ValidatedProjectPlan;\n readonly application: MigrationApplication;\n}\n\nexport function appliedProject(project: AppliedProject): AppliedProject {\n const mode = project.validated.rendered.analyzed.manifest.invocation.options.mode;\n const coherent =\n mode === 'plan'\n ? project.application.status === 'skipped' && project.application.reason === 'plan-only'\n : !(project.application.status === 'skipped' && project.application.reason === 'plan-only');\n if (!coherent) {\n throw new MigrationApplicationError(\n 'internal-invariant',\n `Application result is incompatible with validated manifest mode \"${mode}\".`,\n );\n }\n return Object.freeze({\n validated: project.validated,\n application: Object.freeze({ ...project.application }),\n });\n}\n","import type { MigrationMode } from '../../migrator/migration-mode';\nimport { MigrationApplicationError } from '../../migrator/migration-application.error';\nimport { MigrationTransaction } from '../../transaction/migration-transaction';\nimport { appliedProject, type AppliedProject } from '../applied-project';\nimport type { ApplyStage } from '../migration-pipeline';\nimport type { ValidatedProjectPlan } from '../validated-project-plan';\n\nexport type MigrationTransactionPort = Pick<MigrationTransaction, 'preflight' | 'apply'>;\n\nexport class ApplyProjectStage implements ApplyStage {\n constructor(\n private readonly mode: MigrationMode,\n private readonly transaction: MigrationTransactionPort = new MigrationTransaction(),\n ) {}\n\n public async run(validated: ValidatedProjectPlan): Promise<AppliedProject> {\n const manifestMode = validated.rendered.analyzed.manifest.invocation.options.mode;\n if (this.mode !== manifestMode) {\n throw new MigrationApplicationError(\n 'internal-invariant',\n `Apply stage mode \"${this.mode}\" differs from validated manifest mode \"${manifestMode}\".`,\n );\n }\n const plan = validated.plan;\n const hasParseError = plan.files.some(file => file.results.some(result => result.status === 'parse-error'));\n if (this.mode === 'plan') {\n if (!hasParseError) await this.transaction.preflight(plan);\n return appliedProject({ validated, application: { status: 'skipped', reason: 'plan-only' } });\n }\n if (hasParseError) {\n return appliedProject({ validated, application: { status: 'skipped', reason: 'parse-errors' } });\n }\n\n await this.transaction.preflight(plan);\n if (plan.artifacts.length > 0) await this.transaction.apply(plan);\n return appliedProject({ validated, application: { status: 'applied' } });\n }\n}\n","import { readdir, stat } from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { createGitIgnoreMatcher } from '../../lib/gitignore.helper';\nimport { logger } from '../../logger';\nimport { compareCodeUnits } from '../../util/compare-code-units';\nimport type { DiscoverStage } from '../migration-pipeline';\nimport {\n projectManifest,\n type ManifestTemplate,\n type MigrationInvocation,\n type ProjectManifest,\n} from '../project-manifest';\nimport type { DiscoveryEntry, DiscoveryFileSystem } from './discovery-file-system.port';\nimport type { IgnoreMatcher, IgnoreMatcherFactory } from './ignore-matcher.port';\n\nconst nodeFileSystem: DiscoveryFileSystem = Object.freeze({\n async kind(candidate: string) {\n const candidateStat = await stat(candidate);\n if (candidateStat.isFile()) return 'file';\n if (candidateStat.isDirectory()) return 'directory';\n return 'other';\n },\n async entries(directory: string) {\n const entries = await readdir(directory, { withFileTypes: true });\n return entries.map((entry): DiscoveryEntry => ({\n name: entry.name,\n kind: entry.isFile() ? 'file' : entry.isDirectory() ? 'directory' : 'other',\n }));\n },\n});\n\nconst gitIgnoreMatcherFactory: IgnoreMatcherFactory = Object.freeze({\n load: createGitIgnoreMatcher,\n});\n\nexport class DiscoverProjectStage implements DiscoverStage {\n constructor(\n private readonly fileSystem: DiscoveryFileSystem = nodeFileSystem,\n private readonly ignoreMatchers: IgnoreMatcherFactory = gitIgnoreMatcherFactory,\n ) {}\n\n public async run(invocation: MigrationInvocation): Promise<ProjectManifest> {\n const inputProbePath = preserveTrailingSeparator(invocation.canonicalInputPath, invocation.inputPath);\n const inputKind = await this.fileSystem.kind(inputProbePath);\n let templates: readonly ManifestTemplate[];\n\n if (inputKind === 'file') {\n templates = this.singleFile(invocation);\n } else if (inputKind === 'directory') {\n templates = await this.folderTemplates(invocation);\n } else {\n throw new Error(`Unsupported input type: ${invocation.inputPath}`);\n }\n\n return projectManifest({ invocation, templates });\n }\n\n private singleFile(invocation: MigrationInvocation): readonly ManifestTemplate[] {\n if (path.extname(invocation.canonicalInputPath).toLowerCase() !== '.html') {\n throw new Error(`Unsupported file type: ${invocation.inputPath}`);\n }\n if (path.extname(invocation.canonicalOutputPath).toLowerCase() !== '.html') {\n throw new Error('Single-file output path must have a .html extension.');\n }\n return [{ inputPath: invocation.canonicalInputPath, outputPath: invocation.canonicalOutputPath }];\n }\n\n private async folderTemplates(invocation: MigrationInvocation): Promise<readonly ManifestTemplate[]> {\n const root = invocation.canonicalInputPath;\n const matcher = await this.ignoreMatchers.load(root, invocation.inputPath);\n const exclusions = this.excludedPaths(invocation);\n const inputs = await this.collectInputs(root, invocation.inputPath, matcher, exclusions);\n inputs.sort(compareCodeUnits);\n return inputs.map(inputPath => ({\n inputPath,\n outputPath: path.join(invocation.canonicalOutputPath, path.relative(root, inputPath)),\n }));\n }\n\n private async collectInputs(\n directory: string,\n displayDirectory: string,\n matcher: IgnoreMatcher,\n exclusions: ReadonlySet<string>,\n ): Promise<string[]> {\n const entries = [...(await this.fileSystem.entries(directory))].sort((left, right) =>\n compareCodeUnits(left.name, right.name),\n );\n const inputs: string[] = [];\n\n for (const entry of entries) {\n const candidate = path.join(directory, entry.name);\n const displayCandidate = path.join(displayDirectory, entry.name);\n logger.debug(`Processing ${displayCandidate}`);\n const ignored = entry.kind === 'directory' ? matcher.ignoresDirectory(candidate) : matcher.ignores(candidate);\n if (ignored || exclusions.has(path.normalize(candidate))) continue;\n const kind = entry.kind === 'other' ? await this.fileSystem.kind(candidate) : entry.kind;\n if (entry.kind === 'other' && kind === 'directory' && matcher.ignoresDirectory(candidate)) continue;\n\n if (kind === 'directory') {\n inputs.push(...(await this.collectInputs(candidate, displayCandidate, matcher, exclusions)));\n } else if (kind === 'file' && path.extname(entry.name).toLowerCase() === '.html') {\n inputs.push(path.normalize(path.resolve(candidate)));\n }\n }\n\n return inputs;\n }\n\n private excludedPaths(invocation: MigrationInvocation): ReadonlySet<string> {\n const candidates = [invocation.options.stylesheetPath, invocation.options.reportPath]\n .filter((candidate): candidate is string => candidate !== undefined)\n .map(candidate => path.normalize(path.resolve(candidate)));\n const outputRoot = invocation.canonicalOutputPath;\n if (path.relative(invocation.canonicalInputPath, outputRoot) !== '') candidates.push(outputRoot);\n return new Set(candidates);\n }\n}\n\nfunction preserveTrailingSeparator(canonicalPath: string, rawPath: string): string {\n return /[\\\\/]$/u.test(rawPath) && !/[\\\\/]$/u.test(canonicalPath) ? `${canonicalPath}${path.sep}` : canonicalPath;\n}\n","import fs from 'fs-extra';\nimport ignore from 'ignore';\nimport path from 'path';\nimport { logger } from '../logger';\nimport type { IgnoreMatcher } from '../pipeline/discover/ignore-matcher.port';\n\nexport async function createGitIgnoreMatcher(root: string, displayRoot: string = root): Promise<IgnoreMatcher> {\n const matcher = ignore();\n const gitignorePath = path.join(root, '.gitignore');\n if (await fs.pathExists(gitignorePath)) {\n matcher.add(await fs.readFile(gitignorePath, 'utf8'));\n logger.debug(`Loaded .gitignore file from ${path.join(displayRoot, '.gitignore')}`);\n }\n const relativeIgnorePath = (candidate: string): string => path.relative(root, candidate).split(path.sep).join('/');\n return Object.freeze({\n ignores: (candidate: string) => matcher.ignores(relativeIgnorePath(candidate)),\n ignoresDirectory: (candidate: string) => matcher.ignores(`${relativeIgnorePath(candidate)}/`),\n });\n}\n","import type { PipelineStageName } from './migration-pipeline';\n\nexport type { PipelineStageName } from './migration-pipeline';\n\nexport class PipelineStageError extends Error {\n constructor(\n readonly stage: PipelineStageName,\n override readonly cause: unknown,\n ) {\n super(`Migration pipeline ${stage} stage failed.`, { cause });\n this.name = 'PipelineStageError';\n }\n}\n","import type { AppliedProject } from './applied-project';\nimport type { AnalyzedProject } from './analyzed-project';\nimport { PipelineStageError } from './pipeline-stage.error';\nimport type { MigrationInvocation, ProjectManifest } from './project-manifest';\nimport type { RenderedProject } from './rendered-project';\nimport type { ValidatedProjectPlan } from './validated-project-plan';\n\nexport type PipelineStageName = 'discover' | 'analyze' | 'render' | 'validate' | 'apply';\n\nexport interface DiscoverStage {\n run(invocation: MigrationInvocation): Promise<ProjectManifest>;\n}\n\nexport interface AnalyzeStage {\n run(manifest: ProjectManifest): Promise<AnalyzedProject>;\n}\n\nexport interface RenderStage {\n run(analyzed: AnalyzedProject): Promise<RenderedProject>;\n}\n\nexport interface ValidateStage {\n prevalidate(invocation: MigrationInvocation): Promise<void>;\n run(rendered: RenderedProject): Promise<ValidatedProjectPlan>;\n}\n\nexport interface ApplyStage {\n run(plan: ValidatedProjectPlan): Promise<AppliedProject>;\n}\n\nexport type MigrationPipelineResult = AppliedProject;\n\nexport class MigrationPipeline {\n constructor(\n private readonly discover: DiscoverStage,\n private readonly analyze: AnalyzeStage,\n private readonly render: RenderStage,\n private readonly validate: ValidateStage,\n private readonly apply: ApplyStage,\n ) {}\n\n public async run(invocation: MigrationInvocation): Promise<MigrationPipelineResult> {\n await this.validate.prevalidate(invocation);\n const manifest = await runStage('discover', () => this.discover.run(invocation));\n const analyzed = await runStage('analyze', () => this.analyze.run(manifest));\n const rendered = await runStage('render', () => this.render.run(analyzed));\n const validated = await runStage('validate', () => this.validate.run(rendered));\n const applied = await runStage('apply', () => this.apply.run(validated));\n\n return applied;\n }\n}\n\nasync function runStage<T>(stage: PipelineStageName, action: () => Promise<T>): Promise<T> {\n try {\n return await action();\n } catch (error: unknown) {\n if (error instanceof PipelineStageError) throw error;\n throw new PipelineStageError(stage, error);\n }\n}\n","import path from 'node:path';\nimport type { ConversionResult } from '../analyzer/conversion-result';\nimport type { LocatedFlexLayoutInput } from '../analyzer/flex-layout-attribute.analyzer';\nimport type { FileMigrationResult } from '../migrator/file-migration-result';\nimport { compareCodeUnits } from '../util/compare-code-units';\nimport type {\n FileReport,\n MigrationApplication,\n MigrationMode,\n MigrationReport,\n MigrationSummary,\n ReportResult,\n StylesheetReport,\n} from './migration-report';\n\ntype PathApi = typeof path.posix;\n\nexport interface StylesheetMigrationResult {\n readonly path: string;\n readonly change: StylesheetReport['change'];\n}\n\nexport class MigrationReportBuilder {\n public build(\n inputRoot: string,\n outputRoot: string,\n target: 'css' | 'tailwind',\n mode: MigrationMode,\n application: MigrationApplication,\n durationMs: number,\n files: readonly FileMigrationResult[],\n stylesheet?: StylesheetMigrationResult,\n ): MigrationReport {\n const pathApi = this.pathApi(\n inputRoot,\n outputRoot,\n stylesheet?.path ?? '',\n ...files.flatMap(file => [file.inputPath, file.outputPath]),\n );\n const singleFile = files.length === 1 && this.samePath(pathApi, inputRoot, files[0]?.inputPath ?? '');\n const fileReports = files\n .map(file => this.fileReport(pathApi, inputRoot, singleFile, file))\n .sort((left, right) => compareCodeUnits(left.path, right.path));\n const reportPaths = this.reportPaths(pathApi, inputRoot, outputRoot, singleFile);\n const summary = this.summary(fileReports);\n\n return {\n schemaVersion: 2,\n mode,\n target,\n application,\n input: reportPaths.input,\n output: reportPaths.output,\n durationMs: Math.trunc(durationMs),\n summary,\n files: fileReports,\n ...(target === 'css' && stylesheet\n ? { stylesheet: this.stylesheetReport(pathApi, inputRoot, singleFile, stylesheet) }\n : {}),\n };\n }\n\n private stylesheetReport(\n pathApi: PathApi,\n inputRoot: string,\n singleFile: boolean,\n stylesheet: StylesheetMigrationResult,\n ): StylesheetReport {\n const inputIdentity = this.absolutePath(pathApi, inputRoot);\n const base = singleFile ? pathApi.dirname(inputIdentity) : inputIdentity;\n const relativePath = pathApi.relative(base, this.absolutePath(pathApi, stylesheet.path));\n const displayPath = pathApi.isAbsolute(relativePath) ? pathApi.basename(stylesheet.path) : relativePath;\n\n return { path: this.forwardSlashes(pathApi, displayPath), change: stylesheet.change };\n }\n\n private pathApi(...values: readonly string[]): PathApi {\n if (values.some(value => /^[A-Za-z]:[\\\\/]/.test(value) || value.includes('\\\\'))) return path.win32;\n if (values.some(value => value.includes('/'))) return path.posix;\n return path;\n }\n\n private samePath(pathApi: PathApi, left: string, right: string): boolean {\n return this.absolutePath(pathApi, left) === this.absolutePath(pathApi, right);\n }\n\n private fileReport(pathApi: PathApi, inputRoot: string, singleFile: boolean, file: FileMigrationResult): FileReport {\n const relativePath = singleFile\n ? pathApi.basename(inputRoot)\n : pathApi.relative(this.absolutePath(pathApi, inputRoot), this.absolutePath(pathApi, file.inputPath));\n return {\n path: this.forwardSlashes(pathApi, relativePath),\n changed: file.changed,\n results: file.results.map(result => this.result(result)),\n };\n }\n\n private result(result: ConversionResult): ReportResult {\n if (result.status === 'parse-error') {\n return {\n status: result.status,\n offset: result.source.start,\n code: result.code,\n reason: result.reason,\n };\n }\n\n const input = result.input as LocatedFlexLayoutInput;\n if (result.status === 'converted') {\n return {\n status: result.status,\n directive: input.directive,\n sourceName: input.sourceName,\n offset: input.source.start,\n };\n }\n\n return {\n status: result.status,\n directive: input.directive,\n sourceName: input.sourceName,\n offset: input.source.start,\n code: result.code,\n reason: result.reason,\n suggestion: result.suggestion,\n };\n }\n\n private reportPaths(\n pathApi: PathApi,\n inputRoot: string,\n outputRoot: string,\n singleFile: boolean,\n ): { readonly input: string; readonly output: string } {\n const inputIdentity = this.absolutePath(pathApi, inputRoot);\n const base = singleFile ? pathApi.dirname(inputIdentity) : inputIdentity;\n const input = singleFile ? pathApi.basename(inputRoot) : '.';\n const relativeOutput = pathApi.relative(base, this.absolutePath(pathApi, outputRoot));\n const output = pathApi.isAbsolute(relativeOutput) ? pathApi.basename(outputRoot) : relativeOutput || '.';\n\n return {\n input: this.forwardSlashes(pathApi, input),\n output: this.forwardSlashes(pathApi, output),\n };\n }\n\n private forwardSlashes(pathApi: PathApi, value: string): string {\n return value.split(pathApi.sep).join('/');\n }\n\n private absolutePath(pathApi: PathApi, value: string): string {\n return pathApi.normalize(pathApi.resolve(value));\n }\n\n private summary(files: readonly FileReport[]): MigrationSummary {\n const resultCounts = {\n converted: 0,\n review: 0,\n unsupported: 0,\n invalid: 0,\n parseErrors: 0,\n };\n\n for (const result of files.flatMap(file => file.results)) {\n if (result.status === 'parse-error') resultCounts.parseErrors += 1;\n else resultCounts[result.status] += 1;\n }\n\n return {\n filesScanned: files.length,\n filesChanged: files.filter(file => file.changed).length,\n ...resultCounts,\n };\n }\n}\n","import * as path from 'node:path';\nimport type { MigrationInvocation } from './project-manifest';\n\ninterface InvocationPathRoot {\n readonly canonical: string;\n readonly raw: string;\n}\n\ntype PathBearingError = Error & {\n path?: unknown;\n dest?: unknown;\n};\n\nexport function remapInvocationErrorPaths(error: unknown, invocation: MigrationInvocation): unknown {\n if (!(error instanceof Error)) return error;\n\n const roots = invocationRoots(invocation);\n const pathBearingError = error as PathBearingError;\n remapErrorPath(pathBearingError, 'path', roots);\n remapErrorPath(pathBearingError, 'dest', roots);\n return error;\n}\n\nfunction invocationRoots(invocation: MigrationInvocation): readonly InvocationPathRoot[] {\n return [\n { canonical: invocation.canonicalInputPath, raw: invocation.inputPath },\n { canonical: invocation.canonicalOutputPath, raw: invocation.outputPath },\n ].sort((left, right) => right.canonical.length - left.canonical.length);\n}\n\nfunction remapErrorPath(error: PathBearingError, field: 'path' | 'dest', roots: readonly InvocationPathRoot[]): void {\n const original = error[field];\n if (typeof original !== 'string') return;\n\n const mapped = mappedInvocationPath(original, roots);\n if (mapped === original) return;\n\n error.message = error.message.replaceAll(original, () => mapped);\n error[field] = mapped;\n}\n\nfunction mappedInvocationPath(candidate: string, roots: readonly InvocationPathRoot[]): string {\n if (!path.isAbsolute(candidate)) return candidate;\n\n for (const root of roots) {\n const relativePath = path.relative(root.canonical, candidate);\n if (relativePath === '') return root.raw;\n if (relativePath === '..' || relativePath.startsWith(`..${path.sep}`) || path.isAbsolute(relativePath)) continue;\n return path.join(root.raw, relativePath);\n }\n\n return candidate;\n}\n","import type { MigrationReport } from '../report/migration-report';\nimport { MigrationReportBuilder } from '../report/migration-report.builder';\nimport type { AppliedProject } from './applied-project';\nimport { remapInvocationErrorPaths } from './invocation-error-path.mapper';\nimport type { MigrationPipeline } from './migration-pipeline';\nimport { PipelineStageError } from './pipeline-stage.error';\nimport type { MigrationInvocation } from './project-manifest';\n\nexport type MigrationExecutionPipeline = Pick<MigrationPipeline, 'run'>;\n\ntype ReportBuilder = Pick<MigrationReportBuilder, 'build'>;\n\nexport class MigrationRunner {\n constructor(\n private readonly pipeline: MigrationExecutionPipeline,\n private readonly reports: ReportBuilder = new MigrationReportBuilder(),\n private readonly now: () => number = Date.now,\n ) {}\n\n public async run(invocation: MigrationInvocation): Promise<MigrationReport> {\n const startedAt = this.now();\n const applied = await this.execute(invocation);\n const durationMs = this.now() - startedAt;\n const { validated, application } = applied;\n const { plan, rendered, stylesheet } = validated;\n\n return this.reports.build(\n rendered.analyzed.manifest.invocation.inputPath,\n rendered.analyzed.manifest.invocation.outputPath,\n plan.target,\n rendered.analyzed.manifest.invocation.options.mode,\n application,\n durationMs,\n plan.files,\n stylesheet,\n );\n }\n\n private async execute(invocation: MigrationInvocation): Promise<AppliedProject> {\n try {\n return await this.pipeline.run(invocation);\n } catch (error: unknown) {\n if (!(error instanceof PipelineStageError)) throw error;\n if (error.stage === 'apply') throw error.cause;\n throw remapInvocationErrorPaths(error.cause, invocation);\n }\n }\n}\n","import type { TemplateAttribute } from './template.model';\n\nexport function templateAttributeKeys(attribute: TemplateAttribute): ReadonlySet<string> {\n const semanticKey = attribute.name.toLowerCase();\n const rawName = attribute.rawName.toLowerCase();\n const rawKey =\n attribute.binding !== 'property'\n ? rawName\n : rawName.startsWith('[') && rawName.endsWith(']')\n ? rawName.slice(1, -1)\n : rawName.startsWith('bind-')\n ? rawName.slice('bind-'.length)\n : rawName;\n return new Set([rawKey, semanticKey]);\n}\n","export type SrcsetValueValidation =\n { readonly status: 'valid'; readonly value: string } | { readonly status: 'invalid'; readonly reason: string };\n\nexport function validateSingleSrcsetUrl(value: string): SrcsetValueValidation {\n if (value.length === 0) {\n return { status: 'invalid', reason: 'A responsive image source cannot be empty.' };\n }\n if (value.includes('{{') || value.includes('}}')) {\n return { status: 'invalid', reason: 'Interpolation is not a literal responsive image URL.' };\n }\n if ([...value].some(character => character === ',' || character.charCodeAt(0) <= 32 || character === '\\u007f')) {\n return {\n status: 'invalid',\n reason: 'The value is not one descriptor-free srcset URL.',\n };\n }\n return { status: 'valid', value };\n}\n","import type { PlannedConversion } from '../render/conversion-renderer';\nimport type { LocatedFlexLayoutInput } from '../analyzer/flex-layout-attribute.analyzer';\nimport type { DiagnosticCode } from '../analyzer/conversion-result';\nimport { ORIENTATION_BREAKPOINTS } from '../analyzer/flex-layout.catalog';\nimport { BreakpointCatalog, type BreakpointDefinition } from '../breakpoint/breakpoint-catalog';\nimport { compareCodeUnits } from '../util/compare-code-units';\nimport type {\n ResponsiveImageContext,\n ResponsiveImagePlanningResult,\n ResponsiveImageSource,\n} from './responsive-image.model';\nimport { validateSingleSrcsetUrl } from './srcset-value';\n\ninterface Failure {\n readonly status: 'review' | 'unsupported' | 'invalid';\n readonly code: DiagnosticCode;\n readonly reason: string;\n readonly suggestion: string;\n}\n\nconst standardAliases = new Set([\n 'xs',\n 'sm',\n 'md',\n 'lg',\n 'xl',\n 'lt-sm',\n 'lt-md',\n 'lt-lg',\n 'lt-xl',\n 'gt-xs',\n 'gt-sm',\n 'gt-md',\n 'gt-lg',\n]);\nconst optionalAliases = new Set<string>(ORIENTATION_BREAKPOINTS);\n\nfunction unresolved(inputs: readonly LocatedFlexLayoutInput[], failure: Failure): ResponsiveImagePlanningResult {\n return {\n status: 'unresolved',\n plans: inputs.map(\n input =>\n ({\n ...failure,\n input,\n }) satisfies PlannedConversion,\n ),\n };\n}\n\nfunction breakpointFailure(alias: string): Failure {\n if (alias.length === 0 || (!optionalAliases.has(alias) && alias !== 'print')) {\n return {\n status: 'unsupported',\n code: 'custom-breakpoint',\n reason: `Responsive image breakpoint \"${alias}\" is not a standard viewport alias.`,\n suggestion: 'Migrate the responsive image source manually.',\n };\n }\n return {\n status: 'unsupported',\n code: 'breakpoint-unverified',\n reason: `Responsive image breakpoint \"${alias}\" is not supported by native image migration.`,\n suggestion: 'Keep this responsive image family unchanged.',\n };\n}\n\nexport class ResponsiveImagePlanner {\n private readonly catalog = new BreakpointCatalog();\n\n plan(\n inputs: readonly LocatedFlexLayoutInput[],\n context: ResponsiveImageContext,\n enabled: boolean,\n ): ResponsiveImagePlanningResult {\n if (!enabled) {\n return unresolved(inputs, {\n status: 'unsupported',\n code: 'target-unsupported',\n reason: 'Responsive image migration is not enabled.',\n suggestion: 'Rerun with --responsive-images after reviewing picture-wrapper selector risk.',\n });\n }\n\n if (context.element.name.toLowerCase() !== 'img') {\n return unresolved(inputs, {\n status: 'review',\n code: 'context-unverified',\n reason: 'Responsive image inputs are only safe to migrate on an img element.',\n suggestion: 'Remove or migrate the input manually.',\n });\n }\n if (context.element.structural || context.ancestors.some(ancestor => ancestor.name.toLowerCase() === 'picture')) {\n return unresolved(inputs, {\n status: 'review',\n code: 'context-unverified',\n reason: 'The image has structural syntax or is already inside a picture element.',\n suggestion: 'Keep this responsive image family unchanged.',\n });\n }\n if (\n context.element.source.start !== context.element.startTag.start ||\n context.element.source.end < context.element.startTag.end\n ) {\n return unresolved(inputs, {\n status: 'review',\n code: 'context-unverified',\n reason: 'The image does not have one unambiguous replacement range.',\n suggestion: 'Keep this responsive image family unchanged.',\n });\n }\n if (inputs.some(input => input.binding !== 'literal')) {\n return unresolved(inputs, {\n status: 'review',\n code: 'dynamic-binding',\n reason: 'Dynamic responsive image sources cannot become literal source elements.',\n suggestion: 'Keep the binding or replace it with a literal URL before migrating.',\n });\n }\n\n const aliases = inputs.map(input => input.breakpoint ?? '');\n const unsupportedAlias = aliases.find(alias => !standardAliases.has(alias));\n if (unsupportedAlias !== undefined) return unresolved(inputs, breakpointFailure(unsupportedAlias));\n if (new Set(aliases).size !== aliases.length) {\n return unresolved(inputs, {\n status: 'review',\n code: 'responsive-precedence-unverified',\n reason: 'More than one responsive image input owns the same breakpoint.',\n suggestion: 'Remove duplicate responsive image inputs before migrating.',\n });\n }\n\n const sources: ResponsiveImageSource[] = [];\n for (const input of inputs) {\n const validation = validateSingleSrcsetUrl(input.value);\n if (validation.status === 'invalid') {\n return unresolved(inputs, {\n status: 'invalid',\n code: 'invalid-value',\n reason: validation.reason,\n suggestion: 'Use one literal, descriptor-free URL or migrate this image manually.',\n });\n }\n const classification = this.catalog.classify(input.breakpoint ?? '');\n if (classification.kind !== 'verified') {\n return unresolved(inputs, breakpointFailure(input.breakpoint ?? ''));\n }\n sources.push({ input, definition: classification.definition as BreakpointDefinition, url: validation.value });\n }\n\n const fallbackAttributes = context.element.attributes.filter(attribute => attribute.name === 'src');\n const literalFallback = fallbackAttributes.filter(\n attribute => attribute.binding === 'literal' && attribute.rawName.toLowerCase() === 'src',\n );\n const boundFallback = fallbackAttributes.filter(\n attribute =>\n attribute.binding === 'property' &&\n attribute.bindingTarget === 'property' &&\n attribute.rawName.toLowerCase() === '[src]',\n );\n if (fallbackAttributes.length !== literalFallback.length + boundFallback.length || fallbackAttributes.length > 1) {\n return unresolved(inputs, {\n status: 'review',\n code: 'context-unverified',\n reason: 'The fallback image source has conflicting or unsupported ownership.',\n suggestion: 'Keep one literal src or property [src] fallback before migrating.',\n });\n }\n\n sources.sort(\n (left, right) =>\n right.definition.priority - left.definition.priority ||\n compareCodeUnits(left.definition.alias, right.definition.alias),\n );\n return {\n status: 'converted',\n plan: {\n element: context.element,\n sources,\n fallback: literalFallback.length ? 'literal' : boundFallback.length ? 'bound' : 'absent',\n },\n };\n }\n}\n","import type { EditDiagnostic, EditResult, SourceEdit } from './source-edit';\nimport { compareCodeUnits } from '../util/compare-code-units';\n\nexport class SourceEditor {\n apply(source: string, edits: readonly SourceEdit[]): EditResult {\n const diagnostics = this.validate(source, edits);\n if (diagnostics.length) return { status: 'invalid', diagnostics };\n\n const orderedEdits = [...edits].sort(\n (left, right) => right.range.start - left.range.start || compareCodeUnits(right.inputId, left.inputId),\n );\n\n let output = source;\n for (const edit of orderedEdits) {\n output = output.slice(0, edit.range.start) + edit.text + output.slice(edit.range.end);\n }\n\n return { status: 'applied', output };\n }\n\n private validate(source: string, edits: readonly SourceEdit[]): EditDiagnostic[] {\n const invalidRanges = edits\n .filter(\n edit =>\n !Number.isInteger(edit.range.start) ||\n !Number.isInteger(edit.range.end) ||\n edit.range.start < 0 ||\n edit.range.end < edit.range.start ||\n edit.range.end > source.length,\n )\n .map(edit => ({\n code: 'invalid-range' as const,\n message: `Edit ${edit.inputId} has a range outside the source.`,\n inputIds: [edit.inputId],\n }));\n\n if (invalidRanges.length) return invalidRanges;\n\n const byStart = [...edits].sort(\n (left, right) => left.range.start - right.range.start || left.range.end - right.range.end,\n );\n\n for (let index = 0; index < byStart.length; index++) {\n const left = byStart[index];\n if (!left) continue;\n\n for (let nextIndex = index + 1; nextIndex < byStart.length; nextIndex++) {\n const right = byStart[nextIndex];\n if (!right || right.range.start > left.range.end) break;\n\n if (left.range.start < right.range.end && right.range.start < left.range.end) {\n const inputIds = [left.inputId, right.inputId].sort();\n return [\n {\n code: 'overlapping-edits',\n message: `Edits ${inputIds[0]} and ${inputIds[1]} overlap.`,\n inputIds,\n },\n ];\n }\n }\n }\n\n return [];\n }\n}\n","export function encodeHtmlAttribute(value: string): string {\n return value\n .replaceAll('&', '&amp;')\n .replaceAll('\"', '&quot;')\n .replaceAll('\\r', '&#13;')\n .replaceAll('\\n', '&#10;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;');\n}\n","import type { SourceEdit } from '../edit/source-edit';\nimport { SourceEditor } from '../edit/source-editor';\nimport type { MediaClause } from '../breakpoint/breakpoint-catalog';\nimport { encodeHtmlAttribute } from './html-attribute.encoder';\nimport type { ResponsiveImagePlan, ResponsiveImageSource } from './responsive-image.model';\n\nfunction mediaClause(clause: MediaClause): string {\n const conditions: string[] = [];\n if (clause.min !== undefined) conditions.push(`(min-width: ${clause.min}px)`);\n if (clause.max !== undefined) conditions.push(`(max-width: ${clause.max}px)`);\n if (clause.orientation !== undefined) conditions.push(`(orientation: ${clause.orientation})`);\n return conditions.join(' and ');\n}\n\nfunction mediaValue(source: ResponsiveImageSource): string {\n const { media } = source.definition;\n const clauses = media.clauses.map(mediaClause).filter(Boolean);\n if (!clauses.length) return media.type;\n return `${media.type} and ${clauses.map(clause => (clauses.length > 1 ? `(${clause})` : clause)).join(', ')}`;\n}\n\nfunction removalStart(source: string, elementStart: number, attributeStart: number): number {\n let start = attributeStart;\n while (start > elementStart && /\\s/u.test(source[start - 1] ?? '')) start--;\n return start;\n}\n\nexport class PictureRenderer {\n render(source: string, plan: ResponsiveImagePlan, innerEdits: readonly SourceEdit[] = []): string {\n const { element } = plan;\n const imageSource = source.slice(element.source.start, element.source.end);\n const removalEdits: SourceEdit[] = plan.sources.map(responsiveSource => ({\n range: {\n start: removalStart(source, element.startTag.start, responsiveSource.input.source.start) - element.source.start,\n end: responsiveSource.input.source.end - element.source.start,\n },\n text: '',\n inputId: responsiveSource.input.id,\n }));\n const localInnerEdits = innerEdits.map(edit => ({\n ...edit,\n range: {\n start: edit.range.start - element.source.start,\n end: edit.range.end - element.source.start,\n },\n }));\n const edited = new SourceEditor().apply(imageSource, [...removalEdits, ...localInnerEdits]);\n if (edited.status === 'invalid') {\n throw new Error(`Cannot compose responsive image edits: ${edited.diagnostics[0]?.message ?? 'invalid edit'}`);\n }\n\n const sourceTags = plan.sources.map(\n responsiveSource =>\n `<source media=\"${encodeHtmlAttribute(mediaValue(responsiveSource))}\" srcset=\"${encodeHtmlAttribute(responsiveSource.url)}\">`,\n );\n const lineEnding = imageSource.includes('\\r\\n') ? '\\r\\n' : '\\n';\n if (!imageSource.includes('\\n')) {\n return `<picture>${sourceTags.join('')}${edited.output}</picture>`;\n }\n\n const lineStart = Math.max(source.lastIndexOf('\\n', element.source.start - 1) + 1, 0);\n const linePrefix = source.slice(lineStart, element.source.start);\n const baseIndentation = /^[\\t ]*$/u.test(linePrefix) ? linePrefix : '';\n const attributeIndentation = imageSource.match(/\\r?\\n([\\t ]+)\\S/u)?.[1];\n const indentation =\n attributeIndentation?.startsWith(baseIndentation) && attributeIndentation.length > baseIndentation.length\n ? attributeIndentation\n : `${baseIndentation} `;\n return `<picture>${lineEnding}${sourceTags.map(tag => `${indentation}${tag}`).join(lineEnding)}${lineEnding}${indentation}${edited.output}${lineEnding}${baseIndentation}</picture>`;\n }\n}\n","import type { FlexLayoutInput } from '../analyzer/flex-layout-attribute.analyzer';\nimport type { GridDeclaration, GridParseResult, GridSemanticPlan } from './grid-semantic.model';\n\nconst contentAlignment = new Set([\n 'center',\n 'space-around',\n 'space-between',\n 'space-evenly',\n 'end',\n 'start',\n 'stretch',\n]);\nconst itemAlignment = new Set(['start', 'center', 'end', 'stretch']);\n\nfunction parsed(\n role: GridSemanticPlan['role'],\n declarations: readonly GridDeclaration[],\n displayDependency = role !== 'child',\n inline?: boolean,\n): GridParseResult {\n return {\n status: 'parsed',\n plan: Object.freeze({\n role,\n declarations: Object.freeze(declarations.map(declaration => Object.freeze(declaration))),\n displayDependency,\n ...(inline === undefined ? {} : { inline }),\n }),\n };\n}\n\nfunction declaration(property: GridDeclaration['property'], value: string): GridDeclaration {\n return { property, value };\n}\n\nfunction alignment(value: string, prefix: 'align' | 'justify'): GridParseResult {\n const [rawMain, rawCross] = (value || 'start stretch').split(' ');\n const main = rawMain !== undefined && contentAlignment.has(rawMain) ? rawMain : 'start';\n const cross = rawCross !== undefined && itemAlignment.has(rawCross) ? rawCross : 'stretch';\n return parsed('container', [declaration(`${prefix}-content`, main), declaration(`${prefix}-items`, cross)]);\n}\n\nfunction tracks(value: string, axis: 'columns' | 'rows'): GridParseResult {\n let normalized = value || 'none';\n const auto = normalized.endsWith('!');\n if (auto) normalized = normalized.slice(0, normalized.indexOf('!'));\n return parsed('container', [declaration(`grid-${auto ? 'auto' : 'template'}-${axis}`, normalized)]);\n}\n\nexport function parseGridValue(input: FlexLayoutInput): GridParseResult {\n if (input.binding === 'property') {\n return {\n status: 'review',\n code: 'dynamic-binding',\n reason: 'Bound Grid values cannot be evaluated statically.',\n };\n }\n\n switch (input.directive) {\n case 'gdAlignColumns':\n return alignment(input.value, 'align');\n case 'gdAlignRows':\n return alignment(input.value, 'justify');\n case 'gdAreas': {\n const rows = (input.value || 'none').split('|').map(row => `\"${row.trim()}\"`);\n return parsed('container', [declaration('grid-template-areas', rows.join(' '))]);\n }\n case 'gdAuto': {\n let [direction, dense] = (input.value || 'initial').split(' ');\n if (!['column', 'row', 'dense'].includes(direction ?? '')) direction = 'row';\n dense = dense === 'dense' && direction !== 'dense' ? ' dense' : '';\n return parsed('container', [declaration('grid-auto-flow', `${direction}${dense}`)]);\n }\n case 'gdColumns':\n return tracks(input.value, 'columns');\n case 'gdRows':\n return tracks(input.value, 'rows');\n case 'gdGap':\n return parsed('container', [declaration('grid-gap', input.value || '0')]);\n case 'gdArea':\n return parsed('child', [declaration('grid-area', input.value || 'auto')], false);\n case 'gdColumn':\n return parsed('child', [declaration('grid-column', input.value || 'auto')], false);\n case 'gdRow':\n return parsed('child', [declaration('grid-row', input.value || 'auto')], false);\n case 'gdGridAlign': {\n const [rawRow, rawColumn] = (input.value || 'stretch').split(' ');\n const row = rawRow !== undefined && itemAlignment.has(rawRow) ? rawRow : 'stretch';\n const column = rawColumn !== undefined && itemAlignment.has(rawColumn) ? rawColumn : 'stretch';\n return parsed('child', [declaration('justify-self', row), declaration('align-self', column)], false);\n }\n case 'gdInline':\n return parsed('modifier', [], true, input.value !== 'false');\n default:\n return {\n status: 'invalid',\n code: 'invalid-value',\n reason: `${input.directive} is not a Grid directive.`,\n };\n }\n}\n","import type { LocatedFlexLayoutInput } from '../../analyzer/flex-layout-attribute.analyzer';\nimport { cssPropertiesOverlap } from '../css-property-ownership';\nimport type { SourcePropertyEvidence } from '../source-property-evidence';\nimport type { LiteralStyleDeclaration, ResponsiveStyleValueResult } from './responsive-style.model';\n\nconst interpolation = /\\{\\{[\\s\\S]*\\}\\}/u;\nconst dashedOrdinaryProperty = /^-?[a-z][a-z\\d-]*$/iu;\nconst rendererProperty = /^[a-z][a-z\\d]*$/u;\nconst customProperty = /^--[a-z\\d_-]+$/iu;\nconst unitSuffixes = new Set(['px', '%', 'em', 'rem', 'vw', 'vh', 'vmin', 'vmax', 'deg', 's', 'ms']);\nconst unitlessNumber = /^[+-]?(?:(?:\\d+(?:\\.\\d*)?)|(?:\\.\\d+))(?:e[+-]?\\d+)?$/iu;\nconst sanitizerSensitiveFunction = /(?:^|[^a-z\\d_-])(?:url|expression|image|(?:-webkit-)?image-set)\\s*\\(/iu;\nconst targetBuildFunction = /(?:^|[^a-z\\d_-])(?:--alpha|--theme|--spacing|theme)\\s*\\(/iu;\nconst urlScheme = /(?:https?|data|blob|file|javascript):/iu;\n\ninterface NormalizedProperty {\n readonly property: string;\n readonly unit?: string;\n}\n\nexport const responsiveStyleExactKeyAliasReason =\n \"Distinct exact ngStyle keys alias the same browser CSS property, so Angular's activation-history-dependent removal order cannot be represented exactly.\";\n\nfunction normalizeProperty(property: string): NormalizedProperty | undefined {\n if (property.startsWith('--')) return customProperty.test(property) ? { property } : undefined;\n const parts = property.split('.');\n if (parts.length > 2) return undefined;\n const sourceName = parts[0] ?? '';\n const name = sourceName.includes('-')\n ? dashedOrdinaryProperty.test(sourceName)\n ? sourceName.toLowerCase()\n : undefined\n : rendererProperty.test(sourceName)\n ? sourceName\n : undefined;\n if (name === undefined) return undefined;\n const unit = parts[1];\n if (unit === undefined) return { property: name };\n const normalizedUnit = unit.toLowerCase();\n return unitSuffixes.has(normalizedUnit) ? { property: name, unit: normalizedUnit } : undefined;\n}\n\nfunction transformUpstreamRawList(value: string): ResponsiveStyleValueResult {\n const rawDeclarations = String(value)\n .trim()\n .split(';')\n .map(item => item.trim())\n .filter(Boolean);\n const declarationsByExactProperty = new Map<string, LiteralStyleDeclaration>();\n for (const rawDeclaration of rawDeclarations) {\n const [rawKey, ...rawValues] = rawDeclaration.split(':');\n if (rawValues.length === 0) {\n return {\n status: 'unverified',\n reason: 'Upstream semicolon splitting produced a style entry without a property separator.',\n };\n }\n const property = (rawKey ?? '').replace(/['\"]/gu, '').trim();\n const transformedValue = rawValues.join(':').replace(/['\"]/gu, '').trim().replace(/;/u, '');\n if (!property || !transformedValue) {\n return {\n status: 'unverified',\n reason: 'Upstream raw-string transformation produced an empty style key or value.',\n };\n }\n declarationsByExactProperty.set(property, { property, value: transformedValue });\n }\n return { status: 'parsed', value: { declarations: [...declarationsByExactProperty.values()] } };\n}\n\nfunction declarationsHaveExactKeyAliases(declarations: readonly LiteralStyleDeclaration[]): boolean {\n const exactKeyByAppliedProperty = new Map<string, string>();\n for (const declaration of declarations) {\n const normalized = normalizeProperty(declaration.property);\n if (normalized === undefined) continue;\n const previous = exactKeyByAppliedProperty.get(normalized.property);\n if (previous !== undefined && previous !== declaration.property) return true;\n exactKeyByAppliedProperty.set(normalized.property, declaration.property);\n }\n return false;\n}\n\nexport function responsiveStyleValuesHaveExactKeyAliases(values: readonly string[]): boolean {\n const declarations: LiteralStyleDeclaration[] = [];\n for (const value of values) {\n const transformed = transformUpstreamRawList(value);\n if (transformed.status === 'parsed') declarations.push(...transformed.value.declarations);\n }\n return declarationsHaveExactKeyAliases(declarations);\n}\n\nfunction normalizeDeclaration(\n declaration: LiteralStyleDeclaration,\n evidence: SourcePropertyEvidence,\n): LiteralStyleDeclaration | undefined {\n const normalized = normalizeProperty(declaration.property);\n if (!normalized || !declaration.value) return undefined;\n if (\n sanitizerSensitiveFunction.test(declaration.value) ||\n targetBuildFunction.test(declaration.value) ||\n urlScheme.test(declaration.value)\n )\n return undefined;\n const value =\n normalized.unit === undefined\n ? declaration.value\n : unitlessNumber.test(declaration.value)\n ? `${declaration.value}${normalized.unit}`\n : undefined;\n if (value === undefined) return undefined;\n const result = { property: normalized.property, value };\n return evidence.classifyStyleDeclaration(result).status === 'verified' ? result : undefined;\n}\n\nexport function parseLiteralResponsiveStyleValue(\n value: string,\n evidence: SourcePropertyEvidence,\n): ResponsiveStyleValueResult {\n const transformed = transformUpstreamRawList(value);\n if (transformed.status === 'unverified') return transformed;\n if (declarationsHaveExactKeyAliases(transformed.value.declarations)) {\n return { status: 'unverified', reason: responsiveStyleExactKeyAliasReason };\n }\n const declarationsByProperty = new Map<string, LiteralStyleDeclaration>();\n for (const declaration of transformed.value.declarations) {\n const normalized = normalizeDeclaration(declaration, evidence);\n if (!normalized) {\n const priorityText = evidence.classifyStyleDeclaration(declaration);\n return {\n status: 'unverified',\n reason:\n priorityText.status === 'unverified' && priorityText.priorityText\n ? `The declaration for ${JSON.stringify(declaration.property)} contains priority text that Angular NgStyle does not apply.`\n : `The declaration for ${JSON.stringify(declaration.property)} cannot be sanitized and encoded exactly.`,\n };\n }\n declarationsByProperty.set(normalized.property, normalized);\n }\n const declarations = [...declarationsByProperty.values()];\n for (const [index, declaration] of declarations.entries()) {\n const overlapping = declarations\n .slice(index + 1)\n .find(candidate => cssPropertiesOverlap(declaration.property, candidate.property));\n if (overlapping !== undefined) {\n return {\n status: 'unverified',\n reason: `The properties ${JSON.stringify(declaration.property)} and ${JSON.stringify(overlapping.property)} have overlapping CSS property ownership.`,\n };\n }\n }\n return { status: 'parsed', value: { declarations } };\n}\n\nexport function parseResponsiveStyleValue(\n input: LocatedFlexLayoutInput,\n evidence: SourcePropertyEvidence,\n): ResponsiveStyleValueResult {\n if (input.binding !== 'literal') {\n return { status: 'unverified', reason: 'Responsive style property bindings may depend on runtime state.' };\n }\n if (input.directive !== 'ngStyle') {\n return { status: 'unverified', reason: 'Deprecated responsive style aliases are not converted.' };\n }\n if (!input.breakpoint) return { status: 'unverified', reason: 'A responsive style alias is required.' };\n if (interpolation.test(input.value)) {\n return { status: 'unverified', reason: 'Responsive style interpolation may depend on runtime state.' };\n }\n return parseLiteralResponsiveStyleValue(input.value, evidence);\n}\n","import type { LocatedFlexLayoutInput } from '../../analyzer/flex-layout-attribute.analyzer';\nimport {\n BreakpointCatalog,\n mediaDefinitionsIntersect,\n type BreakpointClassification,\n} from '../../breakpoint/breakpoint-catalog';\nimport type { UnresolvedSemanticPlan } from '../semantic-plan';\nimport type {\n ExtendedFamilyPlan,\n ExtendedFamilyPlanRequest,\n ExtendedResponsiveKind,\n ExtendedResponsiveState,\n} from './responsive-class.model';\nimport {\n responsiveStyleExactKeyAliasReason,\n responsiveStyleValuesHaveExactKeyAliases,\n} from './responsive-style-value.parser';\n\ntype ClassifiedMember<T> =\n | { readonly input: LocatedFlexLayoutInput; readonly state: ExtendedResponsiveState<T> }\n | { readonly input: LocatedFlexLayoutInput; readonly plan: UnresolvedSemanticPlan };\n\ntype ClassifiedState<T> = Extract<ClassifiedMember<T>, { readonly state: ExtendedResponsiveState<T> }>;\n\nfunction dynamicBinding(input: LocatedFlexLayoutInput): UnresolvedSemanticPlan {\n return {\n status: 'review',\n input,\n code: 'dynamic-binding',\n reason: 'Angular property bindings and interpolation may depend on runtime state.',\n suggestion: 'Replace the binding manually or make it a literal before migration.',\n };\n}\n\nfunction deprecatedAlias(input: LocatedFlexLayoutInput, kind: ExtendedResponsiveKind): UnresolvedSemanticPlan {\n return {\n status: 'review',\n input,\n code: 'semantic-unsupported',\n reason: `Deprecated responsive ${kind} aliases have version-dependent behavior.`,\n suggestion: `Keep the deprecated alias or migrate the complete responsive ${kind} family manually.`,\n };\n}\n\nfunction unresolvedBreakpoint(\n input: LocatedFlexLayoutInput,\n classification: Exclude<BreakpointClassification, { readonly kind: 'verified' }>,\n): UnresolvedSemanticPlan {\n if (classification.kind === 'custom') {\n return {\n status: 'review',\n input,\n code: 'custom-breakpoint',\n reason: `The breakpoint alias ${classification.alias} may be registered by the project.`,\n suggestion: 'Provide its media query or migrate this responsive family manually.',\n };\n }\n\n const kind = classification.kind === 'print' ? 'print' : 'optional';\n return {\n status: 'review',\n input,\n code: 'breakpoint-unverified',\n reason: `The ${kind} breakpoint alias ${classification.alias} is not enabled by explicit migration configuration.`,\n suggestion:\n classification.kind === 'print'\n ? 'Verify the source printWithBreakpoints value, then rerun with --print-with-breakpoints.'\n : 'Verify that the source enables orientation breakpoints, then rerun with --orientation-breakpoints.',\n };\n}\n\nfunction unverifiedValue(\n input: LocatedFlexLayoutInput,\n kind: ExtendedResponsiveKind,\n token: string | undefined,\n reason: string,\n): UnresolvedSemanticPlan {\n if (kind === 'style') {\n return {\n status: 'review',\n input,\n code: 'style-value-unverified',\n reason,\n suggestion: 'Keep the complete responsive style family or replace unsafe declarations before migration.',\n };\n }\n\n return {\n status: 'review',\n input,\n code: 'tailwind-candidate-unverified',\n reason:\n token === undefined\n ? reason\n : `The first unverified token is ${JSON.stringify(token)}. It may be an application or plugin class. ${reason}`,\n suggestion: 'Keep the complete responsive class family or replace unverified classes before migration.',\n };\n}\n\nfunction contextUnverified(input: LocatedFlexLayoutInput): UnresolvedSemanticPlan {\n return {\n status: 'review',\n input,\n code: 'context-unverified',\n reason: 'Another member of this responsive family is unresolved.',\n suggestion: 'Migrate the complete responsive family together manually.',\n };\n}\n\nfunction responsivePrecedenceUnverified(input: LocatedFlexLayoutInput): UnresolvedSemanticPlan {\n return {\n status: 'review',\n input,\n code: 'responsive-precedence-unverified',\n reason: 'The responsive family contains different values in intersecting activation ranges.',\n suggestion: 'Make intersecting values identical or migrate the complete responsive family manually.',\n };\n}\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n\nexport class ExtendedFamilyPlanner {\n constructor(private readonly catalog = new BreakpointCatalog()) {}\n\n plan<T>(request: ExtendedFamilyPlanRequest<T>): ExtendedFamilyPlan<T> {\n const members = request.inputs\n .map(input => this.classify(input, request.kind, request.valueParser))\n .sort((left, right) => this.compare(left.input, right.input));\n\n if (!members.every((member): member is ClassifiedState<T> => 'state' in member)) {\n return {\n status: 'unresolved',\n plans: members.map(member => ('plan' in member ? member.plan : contextUnverified(member.input))),\n };\n }\n\n const states = members.map(member => member.state);\n if (request.kind === 'style' && responsiveStyleValuesHaveExactKeyAliases(states.map(state => state.input.value))) {\n return {\n status: 'unresolved',\n plans: states.map(state =>\n unverifiedValue(state.input, request.kind, undefined, responsiveStyleExactKeyAliasReason),\n ),\n };\n }\n if (this.hasConflictingStates(states, request.equals)) {\n return {\n status: 'unresolved',\n plans: states.map(state => responsivePrecedenceUnverified(state.input)),\n };\n }\n\n return { status: 'converted', states };\n }\n\n private classify<T>(\n input: LocatedFlexLayoutInput,\n kind: ExtendedResponsiveKind,\n valueParser: ExtendedFamilyPlanRequest<T>['valueParser'],\n ): ClassifiedMember<T> {\n if (input.binding !== 'literal' || /\\{\\{[\\s\\S]*\\}\\}/u.test(input.value)) {\n return { input, plan: dynamicBinding(input) };\n }\n const expectedDirective = kind === 'class' ? 'ngClass' : 'ngStyle';\n if (input.directive !== expectedDirective) return { input, plan: deprecatedAlias(input, kind) };\n if (input.breakpoint === undefined) return { input, plan: deprecatedAlias(input, kind) };\n\n const breakpoint = this.catalog.classify(input.breakpoint);\n if (breakpoint.kind !== 'verified') return { input, plan: unresolvedBreakpoint(input, breakpoint) };\n\n const parsed = valueParser(input);\n if (parsed.status === 'unverified') {\n return { input, plan: unverifiedValue(input, kind, parsed.token, parsed.reason) };\n }\n\n return {\n input,\n state: {\n input,\n activation: { kind: 'media', definition: breakpoint.definition },\n value: parsed.value,\n },\n };\n }\n\n private hasConflictingStates<T>(\n states: readonly ExtendedResponsiveState<T>[],\n equals: (left: T, right: T) => boolean,\n ): boolean {\n return states.some((left, leftIndex) =>\n states\n .slice(leftIndex + 1)\n .some(\n right =>\n !equals(left.value, right.value) &&\n mediaDefinitionsIntersect(left.activation.definition.media, right.activation.definition.media),\n ),\n );\n }\n\n private compare(left: LocatedFlexLayoutInput, right: LocatedFlexLayoutInput): number {\n const leftPriority = this.breakpointPriority(left.breakpoint);\n const rightPriority = this.breakpointPriority(right.breakpoint);\n if (leftPriority !== rightPriority) return rightPriority - leftPriority;\n\n const aliasOrder = compareText(left.breakpoint ?? '', right.breakpoint ?? '');\n return aliasOrder || compareText(left.id, right.id);\n }\n\n private breakpointPriority(alias: string | undefined): number {\n if (alias === undefined) return Number.NEGATIVE_INFINITY;\n const classification = this.catalog.classify(alias);\n return classification.kind === 'verified' ? classification.definition.priority : Number.NEGATIVE_INFINITY;\n }\n}\n","const cssWhitespace = /[\\t\\n\\f\\r ]/u;\nconst hexDigit = /[\\da-f]/iu;\n\nexport interface LiteralStyleDeclaration {\n readonly property: string;\n readonly value: string;\n}\n\nexport type LiteralStyleParseResult =\n | { readonly status: 'parsed'; readonly declarations: readonly LiteralStyleDeclaration[] }\n | { readonly status: 'unverified'; readonly reason: string };\n\nfunction splitDeclarations(value: string): readonly string[] | undefined {\n const declarations: string[] = [];\n let current = '';\n let quote: '\"' | \"'\" | undefined;\n let parentheses = 0;\n let brackets = 0;\n let braces = 0;\n\n for (let index = 0; index < value.length; index += 1) {\n const character = value[index];\n const next = value[index + 1];\n if (character === undefined) continue;\n\n if (quote) {\n current += character;\n if (character === '\\\\') {\n if (next === undefined) return undefined;\n current += next;\n index += 1;\n } else if (character === quote) {\n quote = undefined;\n }\n continue;\n }\n\n if (character === '/' && next === '*') {\n const commentEnd = value.indexOf('*/', index + 2);\n if (commentEnd < 0) return undefined;\n current += ' ';\n index = commentEnd + 1;\n continue;\n }\n if (character === '\"' || character === \"'\") {\n quote = character;\n current += character;\n continue;\n }\n if (character === '\\\\') {\n if (next === undefined || next === '\\n' || next === '\\r' || next === '\\f') return undefined;\n current += character + next;\n index += 1;\n continue;\n }\n\n if (character === '(') parentheses += 1;\n else if (character === ')') {\n if (parentheses === 0) return undefined;\n parentheses -= 1;\n } else if (character === '[') brackets += 1;\n else if (character === ']') {\n if (brackets === 0) return undefined;\n brackets -= 1;\n } else if (character === '{') braces += 1;\n else if (character === '}') {\n if (braces === 0) return undefined;\n braces -= 1;\n }\n\n if (character === ';' && parentheses === 0 && brackets === 0 && braces === 0) {\n declarations.push(current);\n current = '';\n } else {\n current += character;\n }\n }\n\n if (quote || parentheses !== 0 || brackets !== 0 || braces !== 0) return undefined;\n declarations.push(current);\n return declarations;\n}\n\nfunction declarationColon(declaration: string): number | undefined {\n let quote: '\"' | \"'\" | undefined;\n let parentheses = 0;\n let brackets = 0;\n let braces = 0;\n\n for (let index = 0; index < declaration.length; index += 1) {\n const character = declaration[index];\n if (character === undefined) continue;\n if (quote) {\n if (character === '\\\\') index += 1;\n else if (character === quote) quote = undefined;\n continue;\n }\n if (character === '\"' || character === \"'\") {\n quote = character;\n continue;\n }\n if (character === '\\\\') {\n index += 1;\n continue;\n }\n if (character === '(') parentheses += 1;\n else if (character === ')') parentheses -= 1;\n else if (character === '[') brackets += 1;\n else if (character === ']') brackets -= 1;\n else if (character === '{') braces += 1;\n else if (character === '}') braces -= 1;\n else if (character === ':' && parentheses === 0 && brackets === 0 && braces === 0) return index;\n }\n return undefined;\n}\n\nfunction decodeIdentifier(value: string): string | undefined {\n const trimmed = value.trim();\n if (!trimmed) return undefined;\n\n let decoded = '';\n for (let index = 0; index < trimmed.length; index += 1) {\n const character = trimmed[index];\n if (character === undefined) continue;\n if (cssWhitespace.test(character)) return undefined;\n if (character !== '\\\\') {\n decoded += character;\n continue;\n }\n\n const next = trimmed[index + 1];\n if (next === undefined || next === '\\n' || next === '\\r' || next === '\\f') return undefined;\n let hex = '';\n let cursor = index + 1;\n while (hex.length < 6 && cursor < trimmed.length && hexDigit.test(trimmed[cursor] ?? '')) {\n hex += trimmed[cursor];\n cursor += 1;\n }\n if (hex) {\n const codePoint = Number.parseInt(hex, 16);\n decoded +=\n codePoint === 0 || codePoint > 0x10ffff || (codePoint >= 0xd800 && codePoint <= 0xdfff)\n ? '\\uFFFD'\n : String.fromCodePoint(codePoint);\n if (cssWhitespace.test(trimmed[cursor] ?? '')) {\n if (trimmed[cursor] === '\\r' && trimmed[cursor + 1] === '\\n') cursor += 1;\n cursor += 1;\n }\n index = cursor - 1;\n continue;\n }\n\n decoded += next;\n index += 1;\n }\n return decoded;\n}\n\nexport function literalStyleMayControlDisplay(value: string): boolean {\n const result = parseLiteralStyleDeclarations(value);\n if (result.status === 'unverified') return true;\n\n return result.declarations.some(declaration => declaration.property.toLowerCase() === 'display');\n}\n\nexport function parseLiteralStyleDeclarations(value: string): LiteralStyleParseResult {\n const segments = splitDeclarations(value);\n if (!segments) {\n return { status: 'unverified', reason: 'The literal style has malformed or unbalanced delimiters.' };\n }\n\n const declarations: LiteralStyleDeclaration[] = [];\n\n for (const segment of segments) {\n if (!segment.trim()) continue;\n const colon = declarationColon(segment);\n if (colon === undefined) {\n return { status: 'unverified', reason: 'A literal style declaration is missing its property separator.' };\n }\n const property = decodeIdentifier(segment.slice(0, colon));\n if (!property) {\n return { status: 'unverified', reason: 'A literal style declaration has an ambiguous property name.' };\n }\n declarations.push({ property, value: segment.slice(colon + 1).trim() });\n }\n\n return { status: 'parsed', declarations };\n}\n","import type { LocatedFlexLayoutInput } from '../../analyzer/flex-layout-attribute.analyzer';\nimport type { SourceClassTokenEvidence, SourcePropertyEvidence } from '../source-property-evidence';\n\nexport interface SemanticResponsiveClassValue {\n readonly tokens: readonly SourceClassTokenEvidence[];\n}\n\nexport type SemanticResponsiveClassValueResult =\n | { readonly status: 'parsed'; readonly value: SemanticResponsiveClassValue }\n | { readonly status: 'unverified'; readonly token?: string; readonly reason: string };\n\nconst interpolation = /\\{\\{[\\s\\S]*\\}\\}/u;\n\nexport function parseLiteralResponsiveClassValue(\n value: string,\n evidence: SourcePropertyEvidence,\n): SemanticResponsiveClassValueResult {\n if (interpolation.test(value)) {\n return { status: 'unverified', reason: 'Responsive class interpolation may depend on runtime state.' };\n }\n const sources = [...new Set(value.split(/\\s+/u).filter(Boolean))];\n const tokens: SourceClassTokenEvidence[] = [];\n for (const source of sources) {\n const classification = evidence.classifyClassToken(source);\n if (classification.status === 'unverified') {\n return {\n status: 'unverified',\n token: source,\n reason: `The class token ${JSON.stringify(source)} is not a compiler-proven built-in Tailwind utility and may be an application or plugin class. ${classification.reason}`,\n };\n }\n tokens.push(classification.evidence);\n }\n return { status: 'parsed', value: { tokens } };\n}\n\nexport function parseResponsiveClassValue(\n input: LocatedFlexLayoutInput,\n evidence: SourcePropertyEvidence,\n): SemanticResponsiveClassValueResult {\n if (input.binding !== 'literal') {\n return { status: 'unverified', reason: 'Responsive class property bindings may depend on runtime state.' };\n }\n if (input.directive !== 'ngClass') {\n return { status: 'unverified', reason: 'Deprecated responsive class aliases are not converted.' };\n }\n if (!input.breakpoint) return { status: 'unverified', reason: 'A responsive class alias is required.' };\n return parseLiteralResponsiveClassValue(input.value, evidence);\n}\n","import type { LocatedFlexLayoutInput } from '../../analyzer/flex-layout-attribute.analyzer';\nimport { templateAttributeKeys } from '../../template/template-attribute';\nimport type { TemplateAttribute } from '../../template/template.model';\nimport { cssPropertiesOverlap } from '../css-property-ownership';\nimport { parseLiteralStyleDeclarations } from '../literal-style-declaration';\nimport type { SourceClassTokenEvidence, SourcePropertyEvidence } from '../source-property-evidence';\nimport type { UnresolvedSemanticPlan } from '../semantic-plan';\nimport type { ExtendedFamilyPlan, ExtendedResponsiveState } from './responsive-class.model';\nimport { parseLiteralResponsiveClassValue, type SemanticResponsiveClassValue } from './responsive-class-value.parser';\nimport type { ResponsiveStyleValue } from './responsive-style.model';\nimport {\n parseLiteralResponsiveStyleValue,\n responsiveStyleExactKeyAliasReason,\n responsiveStyleValuesHaveExactKeyAliases,\n} from './responsive-style-value.parser';\n\ninterface ExtendedSemanticRequestBase {\n readonly attributes: readonly TemplateAttribute[];\n}\n\nexport type ExtendedSemanticPlanRequest =\n | (ExtendedSemanticRequestBase & {\n readonly kind: 'class';\n readonly familyPlan: ExtendedFamilyPlan<SemanticResponsiveClassValue>;\n })\n | (ExtendedSemanticRequestBase & {\n readonly kind: 'style';\n readonly familyPlan: ExtendedFamilyPlan<ResponsiveStyleValue>;\n });\n\nexport type ExtendedSemanticPlan =\n | {\n readonly status: 'resolved';\n readonly ownerInputId?: string;\n readonly retainedTokens: readonly SourceClassTokenEvidence[];\n }\n | { readonly status: 'unresolved'; readonly plans: readonly UnresolvedSemanticPlan[] };\n\ntype AnyExtendedState =\n ExtendedResponsiveState<SemanticResponsiveClassValue> | ExtendedResponsiveState<ResponsiveStyleValue>;\n\nfunction boundClassAuthority(attribute: TemplateAttribute): boolean {\n if (attribute.binding !== 'property') return false;\n if (attribute.bindingTarget === 'class') return true;\n return [...templateAttributeKeys(attribute)].some(\n key =>\n key === 'class' ||\n key === 'ngclass' ||\n key === 'attr.class' ||\n key.startsWith('class.') ||\n key.startsWith('ngclass.') ||\n key.startsWith('attr.class.'),\n );\n}\n\nfunction boundStyleAuthority(attribute: TemplateAttribute): boolean {\n if (attribute.binding !== 'property') return false;\n if (attribute.bindingTarget === 'style') return true;\n return [...templateAttributeKeys(attribute)].some(\n key =>\n key === 'style' ||\n key === 'ngstyle' ||\n key === 'attr.style' ||\n key.startsWith('style.') ||\n key.startsWith('ngstyle.') ||\n key.startsWith('attr.style.'),\n );\n}\n\nfunction literalStyleAuthority(attribute: TemplateAttribute): boolean {\n return attribute.binding === 'literal' && templateAttributeKeys(attribute).has('style');\n}\n\nfunction unsuffixedAuthority(\n attributes: readonly TemplateAttribute[],\n key: 'ngclass' | 'ngstyle',\n): TemplateAttribute | undefined {\n return attributes.find(attribute => templateAttributeKeys(attribute).has(key));\n}\n\nfunction equalClassValues(left: SemanticResponsiveClassValue, right: SemanticResponsiveClassValue): boolean {\n return (\n left.tokens.length === right.tokens.length &&\n left.tokens.every((token, index) => token.source === right.tokens[index]?.source)\n );\n}\n\nfunction diagnostic(\n input: LocatedFlexLayoutInput,\n code: 'bound-class' | 'class-conflict' | 'tailwind-candidate-unverified' | 'style-value-unverified',\n reason: string,\n suggestion: string,\n): UnresolvedSemanticPlan {\n return { status: 'review', input, code, reason, suggestion };\n}\n\nexport class ExtendedSemanticPlanner {\n constructor(private readonly evidence: SourcePropertyEvidence) {}\n\n plan(request: ExtendedSemanticPlanRequest): ExtendedSemanticPlan {\n if (request.familyPlan.status === 'unresolved') {\n return { status: 'unresolved', plans: request.familyPlan.plans };\n }\n if (request.kind === 'class') return this.planClass(request.familyPlan.states, request.attributes);\n return this.planStyle(request.familyPlan.states, request.attributes);\n }\n\n private planClass(\n states: readonly ExtendedResponsiveState<SemanticResponsiveClassValue>[],\n attributes: readonly TemplateAttribute[],\n ): ExtendedSemanticPlan {\n const fallback = unsuffixedAuthority(attributes, 'ngclass');\n if (fallback !== undefined) {\n if (fallback.binding !== 'literal') {\n return this.unresolved(\n states,\n 'bound-class',\n 'A bound unsuffixed ngClass value is the runtime fallback for this responsive family.',\n 'Make the complete ngClass family literal or migrate its replacement behavior manually.',\n );\n }\n const parsed = parseLiteralResponsiveClassValue(fallback.value, this.evidence);\n if (parsed.status === 'unverified') {\n return {\n status: 'unresolved',\n plans: states.map(state =>\n diagnostic(\n state.input,\n 'tailwind-candidate-unverified',\n `The unsuffixed ngClass fallback cannot be translated exactly. ${parsed.reason}`,\n 'Keep the complete ngClass family or replace the fallback with proven Tailwind candidates.',\n ),\n ),\n };\n }\n if (parsed.value.tokens.length > 0) {\n if (states.every(state => equalClassValues(state.value, parsed.value))) {\n return { status: 'resolved', retainedTokens: parsed.value.tokens };\n }\n return this.unresolved(\n states,\n 'class-conflict',\n 'The literal unsuffixed ngClass fallback is replaced, not merged, when a responsive value activates.',\n 'Migrate the complete ngClass fallback and responsive replacement family manually.',\n );\n }\n }\n\n const hasOutput = states.some(state => state.value.tokens.length > 0);\n if (hasOutput && attributes.some(boundClassAuthority)) {\n return this.unresolved(\n states,\n 'bound-class',\n 'Generated responsive classes cannot be merged safely with a bound class value.',\n 'Merge the generated classes into the class binding manually.',\n );\n }\n return {\n status: 'resolved',\n ...(hasOutput && states[0] !== undefined ? { ownerInputId: states[0].input.id } : {}),\n retainedTokens: [],\n };\n }\n\n private planStyle(\n states: readonly ExtendedResponsiveState<ResponsiveStyleValue>[],\n attributes: readonly TemplateAttribute[],\n ): ExtendedSemanticPlan {\n if (responsiveStyleValuesHaveExactKeyAliases(states.map(state => state.input.value))) {\n return {\n status: 'unresolved',\n plans: states.map(state =>\n diagnostic(\n state.input,\n 'style-value-unverified',\n responsiveStyleExactKeyAliasReason,\n 'Keep the complete responsive style family or normalize its exact property key before migration.',\n ),\n ),\n };\n }\n const fallback = unsuffixedAuthority(attributes, 'ngstyle');\n if (fallback !== undefined) {\n if (fallback.binding !== 'literal') {\n return this.unresolved(\n states,\n 'class-conflict',\n 'A bound unsuffixed ngStyle value is the runtime fallback for this responsive family.',\n 'Make the complete ngStyle family literal or migrate its replacement behavior manually.',\n );\n }\n const parsed = parseLiteralResponsiveStyleValue(fallback.value, this.evidence);\n if (parsed.status === 'unverified') {\n return {\n status: 'unresolved',\n plans: states.map(state =>\n diagnostic(\n state.input,\n 'style-value-unverified',\n `The unsuffixed ngStyle fallback cannot be translated exactly. ${parsed.reason}`,\n 'Keep the complete ngStyle family or replace the fallback with an exact literal style map.',\n ),\n ),\n };\n }\n if (parsed.value.declarations.length > 0 || fallback.value.length > 0) {\n return this.unresolved(\n states,\n 'class-conflict',\n 'The literal unsuffixed ngStyle raw-string fallback is replaced at runtime and cannot remain after Flex-Layout is removed.',\n 'Translate and remove the complete ngStyle fallback together with its responsive replacement family.',\n );\n }\n }\n\n const hasOutput = states.some(state => state.value.declarations.length > 0);\n if (hasOutput && attributes.some(boundClassAuthority)) {\n return this.unresolved(\n states,\n 'bound-class',\n 'Generated responsive classes cannot be merged safely with a bound class value.',\n 'Merge the generated classes into the class binding manually.',\n );\n }\n if (hasOutput && attributes.some(boundStyleAuthority)) {\n return this.unresolved(\n states,\n 'class-conflict',\n 'A bound style authority may control a property generated by this responsive style family.',\n 'Remove or reconcile the bound style before migrating this family.',\n );\n }\n const generatedProperties = new Set(\n states.flatMap(state => state.value.declarations.map(declaration => declaration.property)),\n );\n if (hasOutput && this.literalStyleConflicts(attributes, generatedProperties)) {\n return this.unresolved(\n states,\n 'class-conflict',\n 'A literal fallback style may control a property generated by this responsive style family.',\n 'Remove or reconcile the overlapping fallback declaration before migrating this family.',\n );\n }\n return {\n status: 'resolved',\n ...(hasOutput && states[0] !== undefined ? { ownerInputId: states[0].input.id } : {}),\n retainedTokens: [],\n };\n }\n\n private literalStyleConflicts(\n attributes: readonly TemplateAttribute[],\n generatedProperties: ReadonlySet<string>,\n ): boolean {\n return attributes.filter(literalStyleAuthority).some(attribute => {\n const parsed = parseLiteralStyleDeclarations(attribute.value);\n if (parsed.status === 'unverified') return true;\n return parsed.declarations.some(declaration =>\n [...generatedProperties].some(property => cssPropertiesOverlap(declaration.property, property)),\n );\n });\n }\n\n private unresolved(\n states: readonly AnyExtendedState[],\n code: 'bound-class' | 'class-conflict',\n reason: string,\n suggestion: string,\n ): ExtendedSemanticPlan {\n return {\n status: 'unresolved',\n plans: states.map(state => diagnostic(state.input, code, reason, suggestion)),\n };\n }\n}\n","import type { LocatedFlexLayoutInput } from '../analyzer/flex-layout-attribute.analyzer';\nimport { mediaRangesIntersect, type BreakpointCatalog, type MediaRange } from '../breakpoint/breakpoint-catalog';\nimport type { FlexFillSemantics } from '../flex/flex-fill.semantic';\nimport type { FlexItemSemantics } from '../flex/flex-item.semantic';\nimport type { FlexOffsetSemantics } from '../flex/flex-offset.semantic';\nimport type { LayoutAlignmentSemantics } from '../flex/layout-align.semantic';\nimport type { LayoutSemantics } from '../flex/layout.semantic';\nimport type { GridSemanticPlan } from '../grid/grid-semantic.model';\nimport { templateAttributeKeys } from '../template/template-attribute';\nimport type { SemanticConversionContext } from './conversion-context';\nimport { cssPropertiesOverlap, cssPropertyOwnershipCovers } from './css-property-ownership';\nimport { literalStyleMayControlDisplay, parseLiteralStyleDeclarations } from './literal-style-declaration';\nimport {\n directiveFamily,\n type DirectiveFamily,\n type ExtendedClassSemantics,\n type ExtendedStyleSemantics,\n type ResolvedSemanticPlan,\n type UnresolvedSemanticPlan,\n type SemanticActivation,\n type SuppressedSemanticEffect,\n type VisibilitySemantics,\n} from './semantic-plan';\nimport { type SourceClassTokenEvidence, type SourcePropertyEvidence } from './source-property-evidence';\n\nexport type SemanticCompositionPlan = ResolvedSemanticPlan | UnresolvedSemanticPlan;\n\ntype PropertyAuthority = 'source-class' | 'source-inline' | 'semantic-replacement';\n\ninterface PropertyEffect {\n readonly planId: string;\n readonly family: DirectiveFamily;\n readonly activation: SemanticActivation;\n readonly properties: readonly string[];\n readonly important: boolean;\n readonly authority: PropertyAuthority;\n readonly suppressible: boolean;\n readonly retained: boolean;\n readonly signature: string;\n readonly display?: { readonly intent: 'shown' | 'hidden' | 'unverified'; readonly value?: string };\n}\n\ninterface SourceAuthority {\n readonly input: LocatedFlexLayoutInput;\n readonly family: 'extended-class' | 'extended-style';\n readonly range: MediaRange;\n readonly properties: readonly string[] | undefined;\n readonly mayControlDisplay: boolean;\n}\n\ninterface NumericRange {\n readonly min: number;\n readonly max: number;\n}\n\nconst extendedClassDirectives = new Set<LocatedFlexLayoutInput['directive']>(['class', 'ngClass']);\nconst extendedStyleDirectives = new Set<LocatedFlexLayoutInput['directive']>(['style', 'ngStyle']);\nconst restorationDisplays = new Set([\n 'inline',\n 'block',\n 'inline-block',\n 'flow-root',\n 'flex',\n 'inline-flex',\n 'grid',\n 'inline-grid',\n 'contents',\n 'table',\n 'inline-table',\n 'table-caption',\n 'table-cell',\n 'table-column',\n 'table-column-group',\n 'table-footer-group',\n 'table-header-group',\n 'table-row-group',\n 'table-row',\n 'list-item',\n]);\n\nfunction numericRange(range: MediaRange): NumericRange {\n return {\n min: range.min ?? Number.NEGATIVE_INFINITY,\n max: range.max ?? Number.POSITIVE_INFINITY,\n };\n}\n\nfunction activationRange(activation: SemanticActivation): MediaRange {\n return activation.kind === 'base' ? {} : activation.definition.range;\n}\n\nfunction sameActivation(left: SemanticActivation, right: SemanticActivation): boolean {\n if (left.kind !== right.kind) return false;\n if (left.kind === 'base' || right.kind === 'base') return true;\n return (\n left.definition.range.min === right.definition.range.min && left.definition.range.max === right.definition.range.max\n );\n}\n\nfunction rangesCover(target: MediaRange, ranges: readonly MediaRange[]): boolean {\n const numericTarget = numericRange(target);\n const clipped = ranges\n .filter(range => mediaRangesIntersect(target, range))\n .map(range => {\n const numeric = numericRange(range);\n return {\n min: Math.max(numericTarget.min, numeric.min),\n max: Math.min(numericTarget.max, numeric.max),\n };\n })\n .sort((left, right) => left.min - right.min);\n const first = clipped[0];\n if (!first || first.min !== numericTarget.min) return false;\n let coveredUntil = first.max;\n for (const range of clipped.slice(1)) {\n if (range.min > coveredUntil) return false;\n coveredUntil = Math.max(coveredUntil, range.max);\n }\n return coveredUntil >= numericTarget.max;\n}\n\nfunction propertySetsOverlap(left: readonly string[], right: readonly string[]): boolean {\n return left.some(leftProperty => right.some(rightProperty => cssPropertiesOverlap(leftProperty, rightProperty)));\n}\n\nfunction propertiesEqual(left: readonly string[], right: readonly string[]): boolean {\n return left.length === right.length && left.every((property, index) => property === right[index]);\n}\n\nfunction contextUnverified(input: LocatedFlexLayoutInput, reason: string): UnresolvedSemanticPlan {\n return {\n status: 'review',\n input,\n code: 'context-unverified',\n reason,\n suggestion: 'Migrate the coupled responsive families together manually.',\n };\n}\n\nfunction generatedOwnershipUnverified(input: LocatedFlexLayoutInput): UnresolvedSemanticPlan {\n return {\n status: 'review',\n input,\n code: 'context-unverified',\n reason: 'Generated responsive families have overlapping CSS ownership without one provable precedence.',\n suggestion: 'Migrate the coupled responsive families together manually.',\n };\n}\n\nfunction displayRestorationUnverified(input: LocatedFlexLayoutInput, reason: string): UnresolvedSemanticPlan {\n return {\n status: 'review',\n input,\n code: 'display-restoration-unverified',\n reason,\n suggestion: 'Provide one unambiguous visible display value or migrate this visibility family manually.',\n };\n}\n\nfunction partialDisplayContextUnverified(input: LocatedFlexLayoutInput): UnresolvedSemanticPlan {\n return {\n status: 'review',\n input,\n code: 'context-unverified',\n reason: 'Partially overlapping responsive layout and visibility displays have unverified cascade precedence.',\n suggestion: 'Migrate the coupled layout and visibility ranges together manually.',\n };\n}\n\nfunction authority(family: DirectiveFamily): PropertyAuthority {\n if (family === 'extended-class') return 'source-class';\n if (\n family === 'extended-style' ||\n family === 'layout' ||\n family === 'layout-align' ||\n family === 'flex-item' ||\n family === 'flex-align' ||\n family === 'flex-fill' ||\n family === 'flex-offset' ||\n family === 'flex-order' ||\n family === 'visibility'\n ) {\n return 'source-inline';\n }\n return 'semantic-replacement';\n}\n\nfunction displayIntent(value: string | undefined): PropertyEffect['display'] {\n if (value === undefined) return undefined;\n if (value === 'none') return { intent: 'hidden', value };\n return restorationDisplays.has(value) ? { intent: 'shown', value } : { intent: 'unverified', value };\n}\n\nfunction makeEffect(\n plan: ResolvedSemanticPlan,\n activation: SemanticActivation,\n properties: readonly string[],\n signature: string,\n options: {\n readonly important?: boolean;\n readonly suppressible?: boolean;\n readonly retained?: boolean;\n readonly display?: PropertyEffect['display'];\n } = {},\n): PropertyEffect {\n return {\n planId: plan.input.id,\n family: plan.family,\n activation,\n properties,\n important: options.important ?? false,\n authority: authority(plan.family),\n suppressible: options.suppressible ?? false,\n retained: options.retained ?? false,\n signature,\n ...(options.display === undefined ? {} : { display: options.display }),\n };\n}\n\nfunction ordinaryPropertyGroups(\n plan: ResolvedSemanticPlan,\n): readonly { properties: readonly string[]; signature: string; display?: PropertyEffect['display'] }[] {\n switch (plan.family) {\n case 'layout': {\n const value = plan.value as LayoutSemantics;\n return [\n { properties: ['display'], signature: value.display, display: displayIntent(value.display) },\n { properties: ['flex-direction'], signature: value.direction },\n ...(value.explicitWrap ? [{ properties: ['flex-wrap'], signature: value.wrap }] : []),\n { properties: ['box-sizing'], signature: value.boxSizing },\n ];\n }\n case 'layout-gap':\n return [{ properties: ['gap'], signature: 'gap' }];\n case 'layout-align': {\n const value = plan.value as LayoutAlignmentSemantics;\n return [\n { properties: ['justify-content'], signature: value.main },\n { properties: ['align-items'], signature: value.items },\n { properties: ['align-content'], signature: value.content },\n { properties: ['display'], signature: value.layout.display, display: displayIntent(value.layout.display) },\n { properties: ['flex-direction'], signature: value.layout.direction },\n ...(value.layout.explicitWrap ? [{ properties: ['flex-wrap'], signature: value.layout.wrap }] : []),\n { properties: ['box-sizing'], signature: value.layout.boxSizing },\n ...(value.stretchMaximum === undefined\n ? []\n : [{ properties: [`max-${value.stretchMaximum}`], signature: '100%' }]),\n ];\n }\n case 'flex-item': {\n const value = plan.value as FlexItemSemantics;\n const flex =\n value.basis.kind === 'computed'\n ? [\n { properties: ['flex-grow'], signature: value.grow },\n { properties: ['flex-shrink'], signature: value.shrink },\n { properties: ['flex-basis'], signature: value.basis.value },\n ]\n : [{ properties: ['flex'], signature: `${value.grow} ${value.shrink} ${value.basis.value}` }];\n return [\n ...flex,\n ...(value.min === undefined ? [] : [{ properties: [`min-${value.axis}`], signature: value.min }]),\n ...(value.max === undefined ? [] : [{ properties: [`max-${value.axis}`], signature: value.max }]),\n { properties: ['box-sizing'], signature: value.boxSizing },\n ];\n }\n case 'flex-align':\n return [{ properties: ['align-self'], signature: 'align-self' }];\n case 'flex-fill': {\n const value = plan.value as FlexFillSemantics;\n return [\n { properties: ['margin'], signature: value.margin },\n { properties: ['width'], signature: value.width },\n { properties: ['height'], signature: value.height },\n { properties: ['min-width'], signature: value.minWidth },\n { properties: ['min-height'], signature: value.minHeight },\n ];\n }\n case 'flex-offset': {\n const value = plan.value as FlexOffsetSemantics;\n return [\n {\n properties: [value.axis === 'inline-start' ? 'margin-inline-start' : 'margin-top'],\n signature: value.length,\n },\n ];\n }\n case 'flex-order':\n return [{ properties: ['order'], signature: 'order' }];\n default: {\n const value = plan.value as GridSemanticPlan;\n if (!('declarations' in value)) return [];\n return [\n ...(value.role === 'container' && plan.emitGridDisplay !== false\n ? [{ properties: ['display'], signature: 'grid', display: displayIntent('grid') }]\n : value.role === 'modifier'\n ? [\n {\n properties: ['display'],\n signature: value.inline ? 'inline-grid' : 'grid',\n display: displayIntent(value.inline ? 'inline-grid' : 'grid'),\n },\n ]\n : []),\n ...value.declarations.map(declaration => ({\n properties: [declaration.property],\n signature: `${declaration.property}:${declaration.value}`,\n })),\n ];\n }\n }\n}\n\nfunction semanticEffects(plan: ResolvedSemanticPlan): readonly PropertyEffect[] {\n if (plan.family === 'visibility') return [];\n if (plan.family === 'extended-class') {\n const value = plan.value as ExtendedClassSemantics;\n const emitted = value.emit\n ? value.states.flatMap((state, stateIndex) =>\n state.activations.flatMap(activation =>\n state.tokens.flatMap((token, tokenIndex) => {\n if (token.properties.length === 0) return [];\n const controlsDisplay = token.properties.some(property => cssPropertiesOverlap(property, 'display'));\n return [\n makeEffect(plan, activation, token.properties, `class:${stateIndex}:${tokenIndex}:${token.source}`, {\n important: token.important,\n suppressible: true,\n display:\n token.display === undefined\n ? controlsDisplay\n ? { intent: 'unverified' }\n : undefined\n : displayIntent(token.display),\n }),\n ];\n }),\n ),\n )\n : [];\n const retained = value.retainedTokens.flatMap((token, tokenIndex) => {\n if (token.properties.length === 0) return [];\n const controlsDisplay = token.properties.some(property => cssPropertiesOverlap(property, 'display'));\n return [\n makeEffect(plan, { kind: 'base' }, token.properties, `retained:${tokenIndex}:${token.source}`, {\n important: token.important,\n retained: true,\n display:\n token.display === undefined\n ? controlsDisplay\n ? { intent: 'unverified' }\n : undefined\n : displayIntent(token.display),\n }),\n ];\n });\n return [...emitted, ...retained];\n }\n if (plan.family === 'extended-style') {\n const value = plan.value as ExtendedStyleSemantics;\n return value.emit\n ? value.states.flatMap((state, stateIndex) =>\n state.activations.flatMap(activation =>\n state.declarations.map((declaration, declarationIndex) =>\n makeEffect(\n plan,\n activation,\n [declaration.property],\n `style:${stateIndex}:${declarationIndex}:${declaration.property}:${declaration.value}`,\n {\n suppressible: true,\n display: cssPropertiesOverlap(declaration.property, 'display')\n ? declaration.property === 'display'\n ? displayIntent(declaration.value)\n : { intent: 'unverified' }\n : undefined,\n },\n ),\n ),\n ),\n )\n : [];\n }\n return plan.activations.flatMap(activation =>\n ordinaryPropertyGroups(plan).map(group =>\n makeEffect(plan, activation, group.properties, group.signature, { display: group.display }),\n ),\n );\n}\n\nfunction sourceAuthorities(\n plans: readonly SemanticCompositionPlan[],\n catalog: BreakpointCatalog,\n evidence: SourcePropertyEvidence,\n): readonly SourceAuthority[] {\n const authorities: SourceAuthority[] = [];\n for (const plan of plans) {\n const input = plan.input;\n const family = extendedClassDirectives.has(input.directive)\n ? 'extended-class'\n : extendedStyleDirectives.has(input.directive)\n ? 'extended-style'\n : undefined;\n if (family === undefined) continue;\n const classification = input.breakpoint === undefined ? undefined : catalog.classify(input.breakpoint);\n const range = classification?.kind === 'verified' ? classification.definition.range : {};\n if (input.binding !== 'literal') {\n authorities.push({ input, family, range, properties: undefined, mayControlDisplay: true });\n continue;\n }\n if (family === 'extended-class') {\n const tokens = input.value.split(/[\\t\\n\\f\\r ]+/u).filter(Boolean);\n const classifications = tokens.map(token => evidence.classifyClassToken(token));\n const properties = classifications.some(item => item.status === 'unverified')\n ? undefined\n : classifications.flatMap(item => (item.status === 'verified' ? item.evidence.properties : []));\n authorities.push({\n input,\n family,\n range,\n properties,\n mayControlDisplay:\n properties === undefined || properties.some(property => cssPropertiesOverlap(property, 'display')),\n });\n continue;\n }\n const parsed = parseLiteralStyleDeclarations(input.value);\n const properties =\n parsed.status === 'parsed' ? parsed.declarations.map(declaration => declaration.property) : undefined;\n authorities.push({\n input,\n family,\n range,\n properties,\n mayControlDisplay:\n properties === undefined || properties.some(property => cssPropertiesOverlap(property, 'display')),\n });\n }\n return authorities;\n}\n\nfunction isSuppressed(effect: PropertyEffect, plansById: ReadonlyMap<string, SemanticCompositionPlan>): boolean {\n const plan = plansById.get(effect.planId);\n if (plan?.status !== 'converted') return true;\n return (plan.suppressedEffects ?? []).some(\n suppression =>\n suppression.important === effect.important &&\n sameActivation(suppression.activation, effect.activation) &&\n propertiesEqual(suppression.properties, effect.properties),\n );\n}\n\nfunction addSuppression(plan: ResolvedSemanticPlan, effect: PropertyEffect): ResolvedSemanticPlan {\n const suppression: SuppressedSemanticEffect = {\n activation: effect.activation,\n properties: effect.properties,\n important: effect.important,\n };\n const existing = plan.suppressedEffects ?? [];\n return existing.some(\n item =>\n item.important === suppression.important &&\n sameActivation(item.activation, suppression.activation) &&\n propertiesEqual(item.properties, suppression.properties),\n )\n ? plan\n : { ...plan, suppressedEffects: [...existing, suppression] };\n}\n\nfunction updatePlans(\n plans: readonly SemanticCompositionPlan[],\n unsafeFamilies: ReadonlySet<DirectiveFamily>,\n diagnostic: (input: LocatedFlexLayoutInput) => UnresolvedSemanticPlan,\n suppressed: readonly PropertyEffect[] = [],\n): readonly SemanticCompositionPlan[] {\n const suppressedByPlan = new Map<string, PropertyEffect[]>();\n for (const effect of suppressed) {\n const items = suppressedByPlan.get(effect.planId) ?? [];\n items.push(effect);\n suppressedByPlan.set(effect.planId, items);\n }\n return plans.map(plan => {\n if (plan.status !== 'converted') return plan;\n if (unsafeFamilies.has(plan.family)) return diagnostic(plan.input);\n return (suppressedByPlan.get(plan.input.id) ?? []).reduce(addSuppression, plan);\n });\n}\n\nfunction attributeControlsDisplay(attribute: SemanticConversionContext['attributeEvidence'][number]): boolean {\n const keys = templateAttributeKeys(attribute);\n if (attribute.binding === 'literal') return keys.has('style') && literalStyleMayControlDisplay(attribute.value);\n return [...keys].some(\n key => key === 'style' || key === 'ngstyle' || key === 'style.display' || key.startsWith('style.display.'),\n );\n}\n\nfunction plainBaseDisplay(descriptor: SourceClassTokenEvidence): boolean {\n return descriptor.activation.kind === 'base' && !descriptor.important && descriptor.display === descriptor.source;\n}\n\n/** Resolves cross-family CSS ownership while values are still target-free semantic plans. */\nexport class SemanticFamilyCompositionPlanner {\n constructor(\n private readonly catalog: BreakpointCatalog,\n private readonly evidence: SourcePropertyEvidence,\n ) {}\n\n compose(\n inputPlans: readonly SemanticCompositionPlan[],\n context: SemanticConversionContext,\n ): readonly SemanticCompositionPlan[] {\n const allEffects = inputPlans.flatMap(plan => (plan.status === 'converted' ? semanticEffects(plan) : []));\n const sources = sourceAuthorities(inputPlans, this.catalog, this.evidence);\n let plans = this.composeGeneratedProperties(inputPlans, allEffects, sources);\n plans = this.composeExtendedDisplayWithLayout(plans, allEffects, sources);\n return this.composeVisibility(plans, allEffects, sources, context);\n }\n\n private activeEffects(\n plans: readonly SemanticCompositionPlan[],\n allEffects: readonly PropertyEffect[],\n ): readonly PropertyEffect[] {\n const plansById = new Map(plans.map(plan => [plan.input.id, plan]));\n return allEffects.filter(effect => !isSuppressed(effect, plansById));\n }\n\n private composeGeneratedProperties(\n plans: readonly SemanticCompositionPlan[],\n allEffects: readonly PropertyEffect[],\n sources: readonly SourceAuthority[],\n ): readonly SemanticCompositionPlan[] {\n const candidates = this.activeEffects(plans, allEffects).filter(effect => effect.family !== 'visibility');\n const unsafe = new Set<DirectiveFamily>();\n const suppressed: PropertyEffect[] = [];\n\n for (const source of sources) {\n const current = plans.find(plan => plan.input.id === source.input.id);\n if (current?.status === 'converted') continue;\n for (const candidate of candidates) {\n if (\n mediaRangesIntersect(source.range, activationRange(candidate.activation)) &&\n (source.properties === undefined || propertySetsOverlap(source.properties, candidate.properties))\n ) {\n unsafe.add(candidate.family);\n }\n }\n }\n\n for (const candidate of candidates.filter(effect => effect.authority === 'source-class')) {\n const writers = candidates.filter(\n writer =>\n writer.authority !== 'source-class' &&\n writer.family !== candidate.family &&\n mediaRangesIntersect(activationRange(writer.activation), activationRange(candidate.activation)) &&\n propertySetsOverlap(writer.properties, candidate.properties),\n );\n if (!writers.length) continue;\n if (writers.some(writer => writer.authority === 'semantic-replacement')) {\n unsafe.add(candidate.family);\n for (const writer of writers) unsafe.add(writer.family);\n continue;\n }\n const ownerFamilies = new Set(writers.map(writer => writer.family));\n const ownershipIsProven =\n !candidate.important &&\n ownerFamilies.size === 1 &&\n candidate.properties.every(property =>\n rangesCover(\n activationRange(candidate.activation),\n writers\n .filter(writer =>\n writer.properties.some(ownerProperty => cssPropertyOwnershipCovers(ownerProperty, property)),\n )\n .map(writer => activationRange(writer.activation)),\n ),\n );\n if (ownershipIsProven && candidate.suppressible) {\n suppressed.push(candidate);\n continue;\n }\n unsafe.add(candidate.family);\n for (const writer of writers) unsafe.add(writer.family);\n }\n\n const writers = candidates.filter(candidate => candidate.authority !== 'source-class');\n for (let leftIndex = 0; leftIndex < writers.length; leftIndex += 1) {\n const left = writers[leftIndex];\n if (left === undefined) continue;\n for (const right of writers.slice(leftIndex + 1)) {\n if (\n left.family === right.family ||\n (!left.family.startsWith('extended-') && !right.family.startsWith('extended-')) ||\n !mediaRangesIntersect(activationRange(left.activation), activationRange(right.activation)) ||\n !propertySetsOverlap(left.properties, right.properties) ||\n (left.authority === 'source-inline' &&\n right.authority === 'source-inline' &&\n left.signature === right.signature)\n ) {\n continue;\n }\n unsafe.add(left.family);\n unsafe.add(right.family);\n }\n }\n\n return updatePlans(plans, unsafe, generatedOwnershipUnverified, suppressed);\n }\n\n private composeExtendedDisplayWithLayout(\n inputPlans: readonly SemanticCompositionPlan[],\n allEffects: readonly PropertyEffect[],\n sources: readonly SourceAuthority[],\n ): readonly SemanticCompositionPlan[] {\n let plans = inputPlans;\n let effects = this.activeEffects(plans, allEffects);\n const classRanges = effects\n .filter(effect => effect.family === 'extended-class' && effect.display !== undefined)\n .map(effect => activationRange(effect.activation));\n const styleRanges = effects\n .filter(effect => effect.family === 'extended-style' && effect.display !== undefined)\n .map(effect => activationRange(effect.activation));\n const importantClassRanges = effects\n .filter(effect => effect.family === 'extended-class' && effect.display !== undefined && effect.important)\n .map(effect => activationRange(effect.activation));\n const unresolvedRange = (family: SourceAuthority['family']): readonly MediaRange[] =>\n sources.flatMap(source => {\n const current = plans.find(plan => plan.input.id === source.input.id);\n return source.family === family && current?.status !== 'converted' && source.mayControlDisplay\n ? [source.range]\n : [];\n });\n const unresolvedClassRanges = unresolvedRange('extended-class');\n const unresolvedStyleRanges = unresolvedRange('extended-style');\n const affected = new Set<DirectiveFamily>();\n if (\n classRanges.some(\n target => styleRanges.some(range => mediaRangesIntersect(target, range)) && !rangesCover(target, styleRanges),\n ) ||\n importantClassRanges.some(target => styleRanges.some(range => mediaRangesIntersect(target, range)))\n ) {\n affected.add('extended-class');\n affected.add('extended-style');\n }\n if (styleRanges.some(target => unresolvedClassRanges.some(range => mediaRangesIntersect(target, range)))) {\n affected.add('extended-style');\n }\n if (classRanges.some(target => unresolvedStyleRanges.some(range => mediaRangesIntersect(target, range)))) {\n affected.add('extended-class');\n }\n const classSuppressed = effects.filter(\n effect =>\n effect.family === 'extended-class' &&\n effect.display !== undefined &&\n !effect.important &&\n rangesCover(activationRange(effect.activation), styleRanges),\n );\n plans = updatePlans(\n plans,\n affected,\n input =>\n contextUnverified(\n input,\n 'Responsive class and style display ownership cannot be proven for every overlapping activation range.',\n ),\n classSuppressed,\n );\n\n effects = this.activeEffects(plans, allEffects);\n const layoutRanges = effects\n .filter(effect => effect.family === 'layout' && effect.display?.value !== undefined && !effect.important)\n .map(effect => activationRange(effect.activation));\n const unresolvedLayout = plans.some(\n plan => directiveFamily(plan.input.directive) === 'layout' && plan.status !== 'converted',\n );\n const unresolvedExtendedDisplay = sources.some(source => {\n const current = plans.find(plan => plan.input.id === source.input.id);\n return current?.status !== 'converted' && source.mayControlDisplay;\n });\n const layoutAffected = new Set<DirectiveFamily>();\n const displaySuppressed: PropertyEffect[] = [];\n let layoutOverlapIsUnsafe = false;\n for (const effect of effects.filter(\n candidate => candidate.family === 'extended-class' || candidate.family === 'extended-style',\n )) {\n if (effect.display === undefined) continue;\n const target = activationRange(effect.activation);\n const overlaps = layoutRanges.some(range => mediaRangesIntersect(target, range));\n if (unresolvedLayout) layoutAffected.add(effect.family);\n if ((effect.properties.length !== 1 || effect.properties[0]?.toLowerCase() !== 'display') && overlaps) {\n layoutOverlapIsUnsafe = true;\n layoutAffected.add(effect.family);\n continue;\n }\n if ((effect.family === 'extended-style' || effect.important) && overlaps) {\n layoutOverlapIsUnsafe = true;\n layoutAffected.add(effect.family);\n continue;\n }\n if (rangesCover(target, layoutRanges)) {\n displaySuppressed.push(effect);\n } else if (overlaps) {\n layoutOverlapIsUnsafe = true;\n layoutAffected.add(effect.family);\n }\n }\n if (unresolvedExtendedDisplay || layoutOverlapIsUnsafe) layoutAffected.add('layout');\n return updatePlans(\n plans,\n layoutAffected,\n input =>\n input.directive === 'fxLayout'\n ? contextUnverified(\n input,\n 'An unresolved or partially overlapping responsive class/style family may control display.',\n )\n : contextUnverified(\n input,\n 'The responsive layout and extended display ranges do not have one provable ownership order.',\n ),\n displaySuppressed,\n );\n }\n\n private composeVisibility(\n inputPlans: readonly SemanticCompositionPlan[],\n allEffects: readonly PropertyEffect[],\n sources: readonly SourceAuthority[],\n context: SemanticConversionContext,\n ): readonly SemanticCompositionPlan[] {\n let plans = inputPlans;\n const visibilityPlans = plans.filter(plan => directiveFamily(plan.input.directive) === 'visibility');\n if (!visibilityPlans.length) return plans;\n const visibilityResolved = visibilityPlans.every(plan => plan.status === 'converted');\n let effects = this.activeEffects(plans, allEffects);\n const extendedDisplayFamilies = new Set(\n effects\n .filter(\n effect =>\n (effect.family === 'extended-class' || effect.family === 'extended-style') && effect.display !== undefined,\n )\n .map(effect => effect.family),\n );\n if (!visibilityResolved) {\n return updatePlans(plans, extendedDisplayFamilies, input =>\n contextUnverified(input, 'The visibility family is unresolved and may override display.'),\n );\n }\n\n const visibility = (visibilityPlans[0] as ResolvedSemanticPlan).value as VisibilitySemantics;\n const states = visibility.states;\n const baseIsHidden = states.some(state => state.activation.kind === 'base' && state.intent === 'hidden');\n const hiddenRanges = states.flatMap(state =>\n state.intent === 'hidden' && state.activation.kind === 'media' ? [state.activation.definition.range] : [],\n );\n const shownRanges = states\n .filter(state => state.intent === 'shown')\n .map(state => activationRange(state.activation));\n const visibilityRanges = states.map(state => activationRange(state.activation));\n const unsafe = new Set<DirectiveFamily>();\n const suppressed: PropertyEffect[] = [];\n const visibilityOwnsHiddenRange = (target: MediaRange): boolean =>\n baseIsHidden\n ? !states.some(\n state =>\n state.intent === 'shown' &&\n state.activation.kind === 'media' &&\n mediaRangesIntersect(target, state.activation.definition.range),\n )\n : rangesCover(target, hiddenRanges);\n\n for (const effect of effects.filter(\n candidate => candidate.family === 'extended-class' || candidate.family === 'extended-style',\n )) {\n if (effect.display === undefined) continue;\n const target = activationRange(effect.activation);\n if (effect.retained && visibilityRanges.some(range => mediaRangesIntersect(target, range))) {\n unsafe.add(effect.family);\n continue;\n }\n const overlapsVisibility = visibilityRanges.some(range => mediaRangesIntersect(target, range));\n if (effect.family === 'extended-style' && overlapsVisibility) {\n unsafe.add(effect.family);\n continue;\n }\n if (effect.properties.length !== 1 || effect.properties[0]?.toLowerCase() !== 'display') {\n if (overlapsVisibility) unsafe.add(effect.family);\n continue;\n }\n if (effect.important && overlapsVisibility) {\n unsafe.add(effect.family);\n continue;\n }\n if (visibilityOwnsHiddenRange(target)) {\n suppressed.push(effect);\n continue;\n }\n const partiallyHidden =\n !baseIsHidden &&\n hiddenRanges.some(range => mediaRangesIntersect(target, range)) &&\n !rangesCover(target, hiddenRanges);\n const shownOverridesHidden =\n effect.display.intent !== 'shown' && shownRanges.some(range => mediaRangesIntersect(target, range));\n if (partiallyHidden || shownOverridesHidden) unsafe.add(effect.family);\n }\n if (unsafe.size > 0) unsafe.add('visibility');\n plans = updatePlans(\n plans,\n unsafe,\n input =>\n contextUnverified(\n input,\n 'The responsive class/style display range and visibility range only partially agree on ownership.',\n ),\n suppressed,\n );\n if (unsafe.size > 0) return plans;\n\n effects = this.activeEffects(plans, allEffects);\n const existingDisplays = context.existingClassNames\n .map(className => this.evidence.classifyClassToken(className))\n .flatMap(item => (item.status === 'verified' && item.evidence.display !== undefined ? [item.evidence] : []));\n const responsiveStyleIsUnresolved = sources.some(source => {\n const current = plans.find(plan => plan.input.id === source.input.id);\n return source.family === 'extended-style' && current?.status !== 'converted' && source.mayControlDisplay;\n });\n const hasEffectiveShownRange = !baseIsHidden || states.some(state => state.intent === 'shown');\n let displayReason =\n responsiveStyleIsUnresolved || context.attributeEvidence.some(attributeControlsDisplay)\n ? 'A literal or bound style may control the element display value.'\n : existingDisplays.some(item => item.display === 'hidden') && hasEffectiveShownRange\n ? 'The visible display value cannot be proven from one unambiguous source.'\n : undefined;\n\n const relevantExtended = effects.filter(\n effect =>\n (effect.family === 'extended-class' || effect.family === 'extended-style') &&\n effect.display !== undefined &&\n (effect.family === 'extended-style' ||\n effect.important ||\n !visibilityOwnsHiddenRange(activationRange(effect.activation))),\n );\n const effectiveShownRanges = states.some(state => state.activation.kind === 'base')\n ? shownRanges\n : [{}, ...shownRanges];\n if (\n displayReason === undefined &&\n relevantExtended.some(\n effect =>\n effect.display?.intent !== 'shown' &&\n effectiveShownRanges.some(range => mediaRangesIntersect(activationRange(effect.activation), range)),\n )\n ) {\n displayReason = 'A responsive class/style hidden utility overlaps a visibility state that must be shown.';\n }\n if (\n displayReason === undefined &&\n relevantExtended.some(effect =>\n effectiveShownRanges.some(range => mediaRangesIntersect(activationRange(effect.activation), range)),\n )\n ) {\n displayReason =\n 'Flex-Layout captures the original display during initialization, before responsive ownership is stable.';\n }\n if (displayReason !== undefined) {\n const visibilityIds = new Set(visibilityPlans.map(plan => plan.input.id));\n return plans.map(plan =>\n plan.status === 'converted' && visibilityIds.has(plan.input.id)\n ? displayRestorationUnverified(plan.input, displayReason)\n : plan,\n );\n }\n\n const layoutPlans = plans.filter(\n (plan): plan is ResolvedSemanticPlan => plan.status === 'converted' && plan.family === 'layout',\n );\n const layoutDisplays = layoutPlans.flatMap(plan => {\n const layout = plan.value as LayoutSemantics;\n return plan.activations.map(activation => ({ activation, display: layout.display }));\n });\n const existingRestoration = (() => {\n const descriptor = existingDisplays.length === 1 ? existingDisplays[0] : undefined;\n return descriptor !== undefined &&\n plainBaseDisplay(descriptor) &&\n descriptor.display !== undefined &&\n restorationDisplays.has(descriptor.display)\n ? descriptor.display\n : undefined;\n })();\n const shownOverrides = baseIsHidden\n ? states.filter(state => state.activation.kind === 'media' && state.intent === 'shown')\n : [];\n let restorationDisplay: string | undefined;\n if (shownOverrides.length > 0) {\n const utilities = shownOverrides.map(state => {\n const stateRange = activationRange(state.activation);\n const overlapping = layoutDisplays.some(\n display =>\n display.activation.kind === 'media' &&\n !sameActivation(display.activation, state.activation) &&\n mediaRangesIntersect(display.activation.definition.range, stateRange),\n );\n if (overlapping) return null;\n const exact = layoutDisplays.filter(display => sameActivation(display.activation, state.activation));\n const applicable =\n exact.length > 0 ? exact : layoutDisplays.filter(display => display.activation.kind === 'base');\n const displays = [...new Set(applicable.map(display => display.display))];\n return displays.length === 0 ? existingRestoration : displays.length === 1 ? displays[0] : null;\n });\n const distinct = [...new Set(utilities)];\n if (distinct.length !== 1 || typeof distinct[0] !== 'string') {\n const visibilityIds = new Set(visibilityPlans.map(plan => plan.input.id));\n return plans.map(plan =>\n plan.status === 'converted' && visibilityIds.has(plan.input.id)\n ? displayRestorationUnverified(\n plan.input,\n 'The visible display value cannot be proven from one unambiguous source.',\n )\n : plan,\n );\n }\n restorationDisplay = distinct[0];\n }\n\n const unsafePartial =\n !baseIsHidden &&\n layoutDisplays.some(display => {\n if (display.activation.kind !== 'media') return false;\n const range = display.activation.definition.range;\n return hiddenRanges.some(hidden => mediaRangesIntersect(range, hidden)) && !rangesCover(range, hiddenRanges);\n });\n if (unsafePartial) {\n const ids = new Set([...visibilityPlans, ...layoutPlans].map(plan => plan.input.id));\n return plans.map(plan =>\n plan.status === 'converted' && ids.has(plan.input.id) ? partialDisplayContextUnverified(plan.input) : plan,\n );\n }\n\n const layoutSuppressions = effects.filter(effect => {\n if (effect.family !== 'layout' || effect.display === undefined) return false;\n const target = activationRange(effect.activation);\n return baseIsHidden\n ? !states.some(\n state =>\n state.intent === 'shown' &&\n state.activation.kind === 'media' &&\n mediaRangesIntersect(target, state.activation.definition.range),\n )\n : rangesCover(target, hiddenRanges);\n });\n const visibilityIds = new Set(visibilityPlans.map(plan => plan.input.id));\n plans = plans.map(plan => {\n if (plan.status !== 'converted') return plan;\n if (visibilityIds.has(plan.input.id)) {\n return {\n ...plan,\n value: {\n ...(plan.value as VisibilitySemantics),\n ...(restorationDisplay === undefined ? {} : { restorationDisplay }),\n },\n };\n }\n return layoutSuppressions.filter(effect => effect.planId === plan.input.id).reduce(addSuppression, plan);\n });\n return plans;\n }\n}\n","import type { LocatedFlexLayoutInput } from '../analyzer/flex-layout-attribute.analyzer';\nimport {\n BreakpointCatalog,\n mediaDefinitionsIntersect,\n mediaRangesIntersect,\n type MediaRange,\n} from '../breakpoint/breakpoint-catalog';\nimport type { SemanticConversionContext } from './conversion-context';\nimport { directiveFamily, type DirectiveFamily } from './semantic-plan';\n\nexport type { DirectiveFamily } from './semantic-plan';\n\nexport interface ResponsiveOrchestrationPlan {\n readonly status: 'converted' | 'review' | 'unsupported' | 'invalid';\n readonly input: LocatedFlexLayoutInput;\n}\n\nexport type ResponsivePlanOne<TPlan extends ResponsiveOrchestrationPlan> = (\n input: LocatedFlexLayoutInput,\n context: SemanticConversionContext,\n) => TPlan;\n\nexport type ResponsivePlanExtendedFamily<TPlan extends ResponsiveOrchestrationPlan> = (\n family: 'extended-class' | 'extended-style',\n inputs: readonly LocatedFlexLayoutInput[],\n context: SemanticConversionContext,\n) => readonly TPlan[];\n\nexport interface SemanticTargetPolicy<TPlan extends ResponsiveOrchestrationPlan> {\n emptyPlan(input: LocatedFlexLayoutInput): TPlan;\n targetEligibility(input: LocatedFlexLayoutInput): TPlan | undefined;\n validateActivation(plan: TPlan): TPlan;\n isTargetEligibilityFailure(plan: TPlan): boolean;\n sameOutput(left: TPlan, right: TPlan): boolean;\n contextUnverified(input: LocatedFlexLayoutInput, reason: string): TPlan;\n contextualOutputUnverified(input: LocatedFlexLayoutInput): TPlan;\n responsivePrecedenceUnverified(input: LocatedFlexLayoutInput): TPlan;\n decorate(plan: TPlan): TPlan;\n addPrintFallback(plan: TPlan): TPlan;\n}\n\nconst localLayoutDependents = new Set<DirectiveFamily>(['layout-gap', 'layout-align']);\nconst parentLayoutDependents = new Set<DirectiveFamily>(['flex-item', 'flex-offset']);\n\ninterface NumericRange {\n readonly min: number;\n readonly max: number;\n}\n\nfunction numericRange(range: MediaRange): NumericRange {\n return {\n min: range.min ?? Number.NEGATIVE_INFINITY,\n max: range.max ?? Number.POSITIVE_INFINITY,\n };\n}\n\nfunction mediaRange(range: NumericRange): MediaRange {\n return {\n min: range.min === Number.NEGATIVE_INFINITY ? undefined : range.min,\n max: range.max === Number.POSITIVE_INFINITY ? undefined : range.max,\n };\n}\n\nfunction nextBelow(value: number): number {\n return value - Math.max(1, Math.abs(value)) * Number.EPSILON;\n}\n\nfunction nextAbove(value: number): number {\n return value + Math.max(1, Math.abs(value)) * Number.EPSILON;\n}\n\nfunction subtractRange(source: NumericRange, excluded: NumericRange): readonly NumericRange[] {\n if (source.max < excluded.min || excluded.max < source.min) return [source];\n const remaining: NumericRange[] = [];\n if (source.min < excluded.min) remaining.push({ min: source.min, max: nextBelow(excluded.min) });\n if (excluded.max < source.max) remaining.push({ min: nextAbove(excluded.max), max: source.max });\n return remaining;\n}\n\nfunction effectiveRanges(\n input: LocatedFlexLayoutInput,\n familyInputs: readonly LocatedFlexLayoutInput[],\n catalog: BreakpointCatalog,\n): readonly NumericRange[] {\n if (input.breakpoint) {\n const classification = catalog.classify(input.breakpoint);\n return classification.kind === 'verified' ? [numericRange(classification.definition.range)] : [];\n }\n\n let ranges: readonly NumericRange[] = [{ min: Number.NEGATIVE_INFINITY, max: Number.POSITIVE_INFINITY }];\n for (const sibling of familyInputs) {\n if (!sibling.breakpoint || sibling.binding !== 'literal') continue;\n const classification = catalog.classify(sibling.breakpoint);\n if (classification.kind !== 'verified') continue;\n const excluded = numericRange(classification.definition.range);\n ranges = ranges.flatMap(range => subtractRange(range, excluded));\n }\n return ranges;\n}\n\nfunction rangesCover(target: NumericRange, ranges: readonly NumericRange[]): boolean {\n const clipped = ranges\n .map(range => ({ min: Math.max(target.min, range.min), max: Math.min(target.max, range.max) }))\n .filter(range => range.min <= range.max)\n .sort((left, right) => left.min - right.min);\n if (!clipped.length || clipped[0]?.min !== target.min) return false;\n\n let coveredUntil = clipped[0].max;\n for (const range of clipped.slice(1)) {\n if (range.min > coveredUntil) return false;\n coveredUntil = Math.max(coveredUntil, range.max);\n }\n return coveredUntil >= target.max;\n}\n\nexport class ResponsiveFamilyPlanner<TPlan extends ResponsiveOrchestrationPlan> {\n constructor(\n private readonly catalog: BreakpointCatalog,\n private readonly policy: SemanticTargetPolicy<TPlan>,\n ) {}\n\n plan(\n inputs: readonly LocatedFlexLayoutInput[],\n context: SemanticConversionContext,\n planOne: ResponsivePlanOne<TPlan>,\n planExtendedFamily?: ResponsivePlanExtendedFamily<TPlan>,\n ): readonly TPlan[] {\n return this.planWithDependencies(inputs, context, planOne, true, true, planExtendedFamily);\n }\n\n closeDependencies(\n inputs: readonly LocatedFlexLayoutInput[],\n context: SemanticConversionContext,\n planOne: ResponsivePlanOne<TPlan>,\n ): readonly TPlan[] {\n return this.planWithDependencies(inputs, context, planOne, false, false);\n }\n\n private planWithDependencies(\n inputs: readonly LocatedFlexLayoutInput[],\n context: SemanticConversionContext,\n planOne: ResponsivePlanOne<TPlan>,\n decorate: boolean,\n validateResponsivePrecedence: boolean,\n planExtendedFamily?: ResponsivePlanExtendedFamily<TPlan>,\n ): readonly TPlan[] {\n const groups = new Map<DirectiveFamily, LocatedFlexLayoutInput[]>();\n const ungrouped: LocatedFlexLayoutInput[] = [];\n for (const input of inputs) {\n const family = directiveFamily(input.directive);\n if (!family) {\n ungrouped.push(input);\n continue;\n }\n const members = groups.get(family) ?? [];\n members.push(input);\n groups.set(family, members);\n }\n\n const completeContext: SemanticConversionContext = { ...context, inputs };\n const rawPlansByFamily = new Map<DirectiveFamily, readonly TPlan[]>();\n const layoutInputs = groups.get('layout') ?? [];\n const layoutPlans = this.planFamily(layoutInputs, completeContext, planOne, validateResponsivePrecedence);\n if (layoutInputs.length) rawPlansByFamily.set('layout', layoutPlans);\n\n const parentLayoutInputs = context.parentInputs.filter(input => input.directive === 'fxLayout');\n const parentLayoutSafe = this.isLayoutContextSafe(\n context.parentInputs,\n {\n ...context,\n element: context.parent ?? context.element,\n inputs: context.parentInputs,\n parent: undefined,\n parentInputs: [],\n },\n planOne,\n validateResponsivePrecedence,\n );\n const localLayoutSafe = layoutPlans.every(plan => plan.status === 'converted');\n\n for (const [family, familyInputs] of groups) {\n if (family === 'layout') continue;\n\n let plans: readonly TPlan[];\n if ((family === 'extended-class' || family === 'extended-style') && planExtendedFamily) {\n plans = planExtendedFamily(family, familyInputs, completeContext);\n } else if (localLayoutDependents.has(family)) {\n plans = localLayoutSafe\n ? this.planContextualFamily(\n familyInputs,\n completeContext,\n layoutInputs,\n 'activeLayout',\n planOne,\n validateResponsivePrecedence,\n )\n : this.planBlockedContextFamily(\n familyInputs,\n completeContext,\n planOne,\n 'The responsive layout family contains an unresolved member.',\n !validateResponsivePrecedence,\n );\n } else if (parentLayoutDependents.has(family)) {\n plans = parentLayoutSafe\n ? this.planContextualFamily(\n familyInputs,\n completeContext,\n parentLayoutInputs,\n 'activeParentLayout',\n planOne,\n validateResponsivePrecedence,\n )\n : this.planBlockedContextFamily(\n familyInputs,\n completeContext,\n planOne,\n 'The responsive parent layout family contains an unresolved member.',\n !validateResponsivePrecedence,\n );\n } else {\n plans = this.planFamily(familyInputs, completeContext, planOne, validateResponsivePrecedence);\n }\n rawPlansByFamily.set(family, plans);\n }\n\n const localFamilies = ['layout', 'layout-gap', 'layout-align'] as const;\n const localContextUnresolved = localFamilies.some(family =>\n rawPlansByFamily.get(family)?.some(plan => plan.status !== 'converted'),\n );\n if (localContextUnresolved) {\n for (const family of localFamilies) {\n const plans = rawPlansByFamily.get(family);\n if (!plans) continue;\n rawPlansByFamily.set(\n family,\n plans.map(plan =>\n plan.status === 'converted'\n ? this.policy.contextUnverified(\n plan.input,\n 'The element layout context contains an unresolved dependent directive family.',\n )\n : plan,\n ),\n );\n }\n }\n\n const plansById = new Map<string, TPlan>();\n for (const [family, plans] of rawPlansByFamily) {\n const shouldDecorate = decorate && family !== 'extended-class' && family !== 'extended-style';\n const decoratedPlans = plans.map(plan => (shouldDecorate ? this.policy.decorate(plan) : plan));\n const printAwarePlans = decorate\n ? this.addPrintFallback(groups.get(family) ?? [], decoratedPlans)\n : decoratedPlans;\n for (const plan of printAwarePlans) plansById.set(plan.input.id, plan);\n }\n for (const input of ungrouped) {\n const plan = this.planOneWithEligibility(input, completeContext, planOne);\n plansById.set(input.id, decorate ? this.policy.decorate(plan) : plan);\n }\n return inputs.map(input => {\n const planned = plansById.get(input.id);\n if (planned) return planned;\n const plan = this.planOneWithEligibility(input, completeContext, planOne);\n return decorate ? this.policy.decorate(plan) : plan;\n });\n }\n\n private addPrintFallback(inputs: readonly LocatedFlexLayoutInput[], plans: readonly TPlan[]): readonly TPlan[] {\n const configuredAliases = this.catalog.printWithBreakpoints;\n if (configuredAliases === undefined || plans.some(plan => plan.status !== 'converted')) return plans;\n if (inputs.some(input => input.breakpoint === 'print')) return plans;\n\n const configured = inputs\n .map((input, index) => ({\n input,\n index,\n classification: input.breakpoint === undefined ? undefined : this.catalog.classify(input.breakpoint),\n }))\n .filter(\n (\n item,\n ): item is typeof item & {\n readonly classification: Extract<ReturnType<BreakpointCatalog['classify']>, { readonly kind: 'verified' }>;\n } =>\n item.input.breakpoint !== undefined &&\n configuredAliases.includes(item.input.breakpoint) &&\n item.classification !== undefined &&\n item.classification.kind === 'verified',\n )\n .sort(\n (left, right) =>\n right.classification.definition.priority - left.classification.definition.priority ||\n configuredAliases.indexOf(left.input.breakpoint ?? '') -\n configuredAliases.indexOf(right.input.breakpoint ?? ''),\n );\n const selected = configured[0];\n if (!selected) return plans;\n\n return plans.map((plan, index) =>\n index === selected.index && plan.status === 'converted' ? this.policy.addPrintFallback(plan) : plan,\n );\n }\n\n private planContextualFamily(\n inputs: readonly LocatedFlexLayoutInput[],\n context: SemanticConversionContext,\n layoutInputs: readonly LocatedFlexLayoutInput[],\n contextKey: 'activeLayout' | 'activeParentLayout',\n planOne: ResponsivePlanOne<TPlan>,\n validateResponsivePrecedence: boolean,\n ): readonly TPlan[] {\n const semanticPlans = inputs.map(input => {\n const breakpointPlan = this.planBreakpoint(input, context, planOne);\n if (breakpointPlan.status !== 'converted') return breakpointPlan;\n const explicitLayout = context[contextKey];\n const layoutValues =\n layoutInputs.length === 0 && explicitLayout !== undefined\n ? [explicitLayout]\n : this.layoutValuesFor(input, inputs, layoutInputs);\n if (!layoutValues.length) {\n return this.policy.contextUnverified(input, 'The active responsive layout cannot be resolved for this input.');\n }\n const candidates = layoutValues.map(value => planOne(input, { ...context, [contextKey]: value }));\n const unresolved = candidates.find(candidate => candidate.status !== 'converted');\n if (unresolved) return unresolved;\n const first = candidates[0];\n if (!first || candidates.some(candidate => !this.policy.sameOutput(first, candidate))) {\n return this.policy.contextualOutputUnverified(input);\n }\n return first;\n });\n return this.validateFamily(inputs, semanticPlans, validateResponsivePrecedence);\n }\n\n private isLayoutContextSafe(\n inputs: readonly LocatedFlexLayoutInput[],\n context: SemanticConversionContext,\n planOne: ResponsivePlanOne<TPlan>,\n validateResponsivePrecedence: boolean,\n ): boolean {\n const layoutInputs = inputs.filter(input => input.directive === 'fxLayout');\n if (\n this.planFamily(layoutInputs, context, planOne, validateResponsivePrecedence).some(\n plan => plan.status !== 'converted',\n )\n ) {\n return false;\n }\n\n return (['fxLayoutGap', 'fxLayoutAlign'] as const).every(directive => {\n const familyInputs = inputs.filter(input => input.directive === directive);\n return this.planContextualFamily(\n familyInputs,\n context,\n layoutInputs,\n 'activeLayout',\n planOne,\n validateResponsivePrecedence,\n ).every(plan => plan.status === 'converted');\n });\n }\n\n private planBlockedContextFamily(\n inputs: readonly LocatedFlexLayoutInput[],\n context: SemanticConversionContext,\n planOne: ResponsivePlanOne<TPlan>,\n reason: string,\n preserveExistingDiagnostics = false,\n ): readonly TPlan[] {\n return inputs.map(input => {\n const breakpointPlan = this.planBreakpoint(input, context, planOne);\n if (breakpointPlan.status !== 'converted') return breakpointPlan;\n const existingPlan = preserveExistingDiagnostics\n ? this.planOneWithEligibility(input, context, planOne)\n : breakpointPlan;\n return existingPlan.status === 'converted' ? this.policy.contextUnverified(input, reason) : existingPlan;\n });\n }\n\n private planBreakpoint(\n input: LocatedFlexLayoutInput,\n context: SemanticConversionContext,\n planOne: ResponsivePlanOne<TPlan>,\n ): TPlan {\n const eligibility = this.policy.targetEligibility(input);\n if (eligibility) return eligibility;\n return input.binding === 'literal'\n ? this.policy.validateActivation(this.policy.emptyPlan(input))\n : planOne(input, context);\n }\n\n private layoutValuesFor(\n input: LocatedFlexLayoutInput,\n familyInputs: readonly LocatedFlexLayoutInput[],\n layoutInputs: readonly LocatedFlexLayoutInput[],\n ): readonly string[] {\n const baseLayouts = layoutInputs.filter(layout => !layout.breakpoint);\n const responsiveLayouts = layoutInputs.flatMap(layout => {\n if (!layout.breakpoint) return [];\n const classification = this.catalog.classify(layout.breakpoint);\n return classification.kind === 'verified'\n ? [{ value: layout.value, range: numericRange(classification.definition.range) }]\n : [];\n });\n const values = new Set<string>();\n\n for (const target of effectiveRanges(input, familyInputs, this.catalog)) {\n const activeResponsive = responsiveLayouts.filter(layout =>\n mediaRangesIntersect(mediaRange(target), mediaRange(layout.range)),\n );\n for (const layout of activeResponsive) values.add(layout.value);\n if (\n !rangesCover(\n target,\n activeResponsive.map(layout => layout.range),\n )\n ) {\n if (baseLayouts.length) {\n for (const layout of baseLayouts) values.add(layout.value);\n } else {\n values.add('row');\n }\n }\n }\n return [...values];\n }\n\n private planFamily(\n inputs: readonly LocatedFlexLayoutInput[],\n context: SemanticConversionContext,\n planOne: ResponsivePlanOne<TPlan>,\n validateResponsivePrecedence: boolean,\n ): readonly TPlan[] {\n return this.validateFamily(\n inputs,\n inputs.map(input => this.planOneWithEligibility(input, context, planOne)),\n validateResponsivePrecedence,\n );\n }\n\n private validateFamily(\n inputs: readonly LocatedFlexLayoutInput[],\n semanticPlans: readonly TPlan[],\n validateResponsivePrecedence: boolean,\n ): readonly TPlan[] {\n if (inputs.some(input => input.binding !== 'literal')) {\n return inputs.map((input, index) => {\n const semanticPlan =\n semanticPlans[index] ??\n this.policy.contextUnverified(input, 'The dynamic member of this directive family cannot be planned.');\n if (input.binding !== 'literal') return semanticPlan;\n const breakpointPlan = this.policy.validateActivation(semanticPlan);\n if (this.policy.isTargetEligibilityFailure(breakpointPlan)) return breakpointPlan;\n return this.policy.contextUnverified(input, 'Another member of this responsive directive family is dynamic.');\n });\n }\n\n const supportedPlans = semanticPlans.map(plan => this.policy.validateActivation(plan));\n if (supportedPlans.some(plan => plan.status !== 'converted')) {\n return supportedPlans.map(plan =>\n plan.status === 'converted'\n ? this.policy.contextUnverified(\n plan.input,\n 'Another member of this responsive directive family is unresolved.',\n )\n : plan,\n );\n }\n if (!validateResponsivePrecedence) return supportedPlans;\n\n for (let leftIndex = 0; leftIndex < inputs.length; leftIndex += 1) {\n const leftInput = inputs[leftIndex];\n const leftPlan = supportedPlans[leftIndex];\n if (!leftInput?.breakpoint || !leftPlan) continue;\n const leftClassification = this.catalog.classify(leftInput.breakpoint);\n if (leftClassification.kind !== 'verified') continue;\n\n for (let rightIndex = leftIndex + 1; rightIndex < inputs.length; rightIndex += 1) {\n const rightInput = inputs[rightIndex];\n const rightPlan = supportedPlans[rightIndex];\n if (!rightInput?.breakpoint || !rightPlan) continue;\n const rightClassification = this.catalog.classify(rightInput.breakpoint);\n if (\n rightClassification.kind === 'verified' &&\n mediaDefinitionsIntersect(leftClassification.definition.media, rightClassification.definition.media) &&\n !this.policy.sameOutput(leftPlan, rightPlan)\n ) {\n return inputs.map(input => this.policy.responsivePrecedenceUnverified(input));\n }\n }\n }\n return supportedPlans;\n }\n\n private planOneWithEligibility(\n input: LocatedFlexLayoutInput,\n context: SemanticConversionContext,\n planOne: ResponsivePlanOne<TPlan>,\n ): TPlan {\n return this.policy.targetEligibility(input) ?? planOne(input, context);\n }\n}\n","import type { MediaRange } from '../breakpoint/breakpoint-catalog';\n\nexport interface SourceStyleDeclaration {\n readonly property: string;\n readonly value: string;\n}\n\nexport type SourceTokenActivation =\n | { readonly kind: 'base' }\n | { readonly kind: 'media'; readonly range: MediaRange; readonly mediaType?: 'screen' | 'print' };\n\n/** Target-neutral property evidence derived from one literal source class token. */\nexport interface SourceClassTokenEvidence {\n readonly source: string;\n readonly properties: readonly string[];\n readonly important: boolean;\n readonly activation: SourceTokenActivation;\n readonly display?: string;\n}\n\nexport type SourceClassTokenClassification =\n | { readonly status: 'verified'; readonly evidence: SourceClassTokenEvidence }\n | { readonly status: 'unverified'; readonly reason: string };\n\nexport type SourceStyleDeclarationClassification =\n { readonly status: 'verified' } | { readonly status: 'unverified'; readonly priorityText: boolean };\n\n/**\n * Supplies semantic planning with property/category facts without exposing any\n * target candidate representation or emitter.\n */\nexport interface SourcePropertyEvidence {\n classifyClassToken(token: string): SourceClassTokenClassification;\n classifyStyleDeclaration(declaration: SourceStyleDeclaration): SourceStyleDeclarationClassification;\n}\n\nexport const unknownSourcePropertyEvidence: SourcePropertyEvidence = Object.freeze({\n classifyClassToken: (_token: string): SourceClassTokenClassification => ({\n status: 'unverified',\n reason: 'No source class property evidence is available for this conversion target.',\n }),\n classifyStyleDeclaration: (_declaration: SourceStyleDeclaration): SourceStyleDeclarationClassification => ({\n status: 'unverified',\n priorityText: false,\n }),\n});\n","import type { LocatedFlexLayoutInput } from '../../analyzer/flex-layout-attribute.analyzer';\nimport type { VisibilityIntent } from './visibility.model';\n\nconst invariantMessage = 'Visibility value parser requires a literal fxShow or fxHide input.';\n\nexport function parseVisibilityValue(input: LocatedFlexLayoutInput): VisibilityIntent {\n if (input.binding !== 'literal' || (input.directive !== 'fxShow' && input.directive !== 'fxHide')) {\n throw new Error(invariantMessage);\n }\n\n const shown = input.value !== 'false';\n return input.directive === 'fxHide' ? (shown ? 'hidden' : 'shown') : shown ? 'shown' : 'hidden';\n}\n","import type { LocatedFlexLayoutInput } from '../../analyzer/flex-layout-attribute.analyzer';\nimport {\n BreakpointCatalog,\n mediaDefinitionsIntersect,\n type BreakpointClassification,\n} from '../../breakpoint/breakpoint-catalog';\nimport type { UnresolvedSemanticPlan } from '../semantic-plan';\nimport type { VisibilityState } from './visibility.model';\nimport { parseVisibilityValue } from './visibility-value.parser';\n\nexport type VisibilityFamilyPlan =\n | { readonly status: 'converted'; readonly states: readonly VisibilityState[] }\n | { readonly status: 'unresolved'; readonly plans: readonly UnresolvedSemanticPlan[] };\n\ntype ClassifiedMember =\n | { readonly input: LocatedFlexLayoutInput; readonly state: VisibilityState }\n | { readonly input: LocatedFlexLayoutInput; readonly plan: UnresolvedSemanticPlan };\n\ntype ClassifiedState = Extract<ClassifiedMember, { readonly state: VisibilityState }>;\n\nfunction dynamicBinding(input: LocatedFlexLayoutInput): UnresolvedSemanticPlan {\n return {\n status: 'review',\n input,\n code: 'dynamic-binding',\n reason: 'Angular property bindings may depend on runtime state.',\n suggestion: 'Replace the binding manually or make it a literal before migration.',\n };\n}\n\nfunction unresolvedBreakpoint(\n input: LocatedFlexLayoutInput,\n classification: Exclude<BreakpointClassification, { readonly kind: 'verified' }>,\n): UnresolvedSemanticPlan {\n if (classification.kind === 'custom') {\n return {\n status: 'review',\n input,\n code: 'custom-breakpoint',\n reason: `The breakpoint alias ${classification.alias} may be registered by the project.`,\n suggestion: 'Provide its media query or migrate this responsive input manually.',\n };\n }\n\n const kind = classification.kind === 'print' ? 'print' : 'optional';\n return {\n status: 'review',\n input,\n code: 'breakpoint-unverified',\n reason: `The ${kind} breakpoint alias ${classification.alias} is not enabled by explicit migration configuration.`,\n suggestion:\n classification.kind === 'print'\n ? 'Verify the source printWithBreakpoints value, then rerun with --print-with-breakpoints.'\n : 'Verify that the source enables orientation breakpoints, then rerun with --orientation-breakpoints.',\n };\n}\n\nfunction contextUnverified(input: LocatedFlexLayoutInput): UnresolvedSemanticPlan {\n return {\n status: 'review',\n input,\n code: 'context-unverified',\n reason: 'Another member of this visibility family is unresolved.',\n suggestion: 'Migrate the complete visibility family together manually.',\n };\n}\n\nfunction responsivePrecedenceUnverified(input: LocatedFlexLayoutInput): UnresolvedSemanticPlan {\n return {\n status: 'review',\n input,\n code: 'responsive-precedence-unverified',\n reason: 'The visibility family contains conflicting base or overlapping responsive states.',\n suggestion: 'Simplify the conflicting declarations or migrate this visibility family manually.',\n };\n}\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n\nexport class VisibilityStatePlanner {\n constructor(private readonly catalog = new BreakpointCatalog()) {}\n\n plan(inputs: readonly LocatedFlexLayoutInput[]): VisibilityFamilyPlan {\n const members = inputs\n .map(input => this.classify(input))\n .sort((left, right) => this.compare(left.input, right.input));\n\n if (!members.every((member): member is ClassifiedState => 'state' in member)) {\n return {\n status: 'unresolved',\n plans: members.map(member => ('plan' in member ? member.plan : contextUnverified(member.input))),\n };\n }\n\n const states = members.map(member => member.state);\n if (this.hasConflictingStates(states)) {\n return {\n status: 'unresolved',\n plans: states.map(state => responsivePrecedenceUnverified(state.input)),\n };\n }\n\n return { status: 'converted', states };\n }\n\n private classify(input: LocatedFlexLayoutInput): ClassifiedMember {\n if (input.binding !== 'literal') return { input, plan: dynamicBinding(input) };\n\n if (input.breakpoint === undefined) {\n return {\n input,\n state: { input, intent: parseVisibilityValue(input), activation: { kind: 'base' } },\n };\n }\n\n const classification = this.catalog.classify(input.breakpoint);\n if (classification.kind !== 'verified') {\n return { input, plan: unresolvedBreakpoint(input, classification) };\n }\n\n return {\n input,\n state: {\n input,\n intent: parseVisibilityValue(input),\n activation: { kind: 'media', definition: classification.definition },\n },\n };\n }\n\n private hasConflictingStates(states: readonly VisibilityState[]): boolean {\n const baseStates = states.filter(state => state.activation.kind === 'base');\n if (baseStates.some(state => state.intent !== baseStates[0]?.intent)) return true;\n\n const responsiveStates = states.filter(\n (state): state is VisibilityState & { readonly activation: { readonly kind: 'media' } } =>\n state.activation.kind === 'media',\n );\n return responsiveStates.some((left, leftIndex) =>\n responsiveStates\n .slice(leftIndex + 1)\n .some(\n right =>\n left.intent !== right.intent &&\n mediaDefinitionsIntersect(left.activation.definition.media, right.activation.definition.media),\n ),\n );\n }\n\n private compare(left: LocatedFlexLayoutInput, right: LocatedFlexLayoutInput): number {\n const leftIsBase = left.breakpoint === undefined;\n const rightIsBase = right.breakpoint === undefined;\n if (leftIsBase && !rightIsBase) return -1;\n if (!leftIsBase && rightIsBase) return 1;\n\n const leftPriority = this.breakpointPriority(left.breakpoint);\n const rightPriority = this.breakpointPriority(right.breakpoint);\n if (leftPriority !== rightPriority) return rightPriority - leftPriority;\n\n const aliasOrder = compareText(left.breakpoint ?? '', right.breakpoint ?? '');\n return aliasOrder || compareText(left.id, right.id);\n }\n\n private breakpointPriority(alias: string | undefined): number {\n if (alias === undefined) return Number.POSITIVE_INFINITY;\n const classification = this.catalog.classify(alias);\n return classification.kind === 'verified' ? classification.definition.priority : Number.NEGATIVE_INFINITY;\n }\n}\n","import type { LocatedFlexLayoutInput } from '../analyzer/flex-layout-attribute.analyzer';\nimport { BreakpointCatalog, type BreakpointClassification } from '../breakpoint/breakpoint-catalog';\nimport type { BreakpointMigrationConfig } from '../config/breakpoint-migration-config';\nimport { planFlexAlignSemantics } from '../flex/flex-align.semantic';\nimport { planFlexFillSemantics } from '../flex/flex-fill.semantic';\nimport { planFlexItemSemantics, type FlexItemSemantics } from '../flex/flex-item.semantic';\nimport { planFlexOffsetSemantics } from '../flex/flex-offset.semantic';\nimport { planFlexOrderSemantics } from '../flex/flex-order.semantic';\nimport type { SemanticResult } from '../flex/flex-semantic.model';\nimport { planLayoutAlignment } from '../flex/layout-align.semantic';\nimport { planLayoutGapSemantics } from '../flex/layout-gap.semantic';\nimport { parseLayout } from '../flex/layout.semantic';\nimport { parseGridValue } from '../grid/grid-value.parser';\nimport { templateAttributeKeys } from '../template/template-attribute';\nimport type { TemplateAttribute } from '../template/template.model';\nimport type { SemanticConversionContext } from './conversion-context';\nimport { cssPropertiesOverlap } from './css-property-ownership';\nimport { ExtendedFamilyPlanner } from './extended/extended-family.planner';\nimport { ExtendedSemanticPlanner } from './extended/extended-semantic.planner';\nimport { parseResponsiveClassValue, type SemanticResponsiveClassValue } from './extended/responsive-class-value.parser';\nimport type { ResponsiveStyleValue } from './extended/responsive-style.model';\nimport { parseResponsiveStyleValue } from './extended/responsive-style-value.parser';\nimport { SemanticFamilyCompositionPlanner } from './semantic-family-composition.planner';\nimport { parseLiteralStyleDeclarations } from './literal-style-declaration';\nimport { ResponsiveFamilyPlanner, type SemanticTargetPolicy } from './responsive-family.planner';\nimport {\n directiveFamily,\n type DirectiveFamily,\n type ResolvedSemanticPlan,\n type ResolvedSemanticValue,\n type SemanticDependencyPlan,\n type SemanticPlanningPlan,\n type SemanticActivation,\n type UnresolvedSemanticPlan,\n} from './semantic-plan';\nimport { type SourcePropertyEvidence, unknownSourcePropertyEvidence } from './source-property-evidence';\nimport { VisibilityStatePlanner } from './visibility/visibility-state.planner';\nimport { parseVisibilityValue } from './visibility/visibility-value.parser';\n\nconst flexItemDirectives = new Set<LocatedFlexLayoutInput['directive']>(['fxFlex', 'fxGrow', 'fxShrink']);\nconst visibilityDirectives = new Set<LocatedFlexLayoutInput['directive']>(['fxShow', 'fxHide']);\nconst extendedClassDirectives = new Set<LocatedFlexLayoutInput['directive']>(['class', 'ngClass']);\nconst extendedStyleDirectives = new Set<LocatedFlexLayoutInput['directive']>(['style', 'ngStyle']);\nconst extendedDirectives = new Set<LocatedFlexLayoutInput['directive']>([\n ...extendedClassDirectives,\n ...extendedStyleDirectives,\n]);\nconst gridDirectives = new Set<LocatedFlexLayoutInput['directive']>([\n 'gdAlignColumns',\n 'gdAlignRows',\n 'gdArea',\n 'gdAreas',\n 'gdAuto',\n 'gdColumn',\n 'gdColumns',\n 'gdGap',\n 'gdGridAlign',\n 'gdInline',\n 'gdRow',\n 'gdRows',\n]);\nconst gridContainerDirectives = new Set<LocatedFlexLayoutInput['directive']>([\n 'gdAlignColumns',\n 'gdAlignRows',\n 'gdAreas',\n 'gdAuto',\n 'gdColumns',\n 'gdGap',\n 'gdRows',\n]);\nconst gridChildDirectives = new Set<LocatedFlexLayoutInput['directive']>([\n 'gdArea',\n 'gdColumn',\n 'gdGridAlign',\n 'gdRow',\n]);\nconst displayAuthorityDirectives = new Set<LocatedFlexLayoutInput['directive']>([\n 'class',\n 'ngClass',\n 'style',\n 'ngStyle',\n]);\nconst localLayoutDirectives = new Set<LocatedFlexLayoutInput['directive']>([\n 'fxLayout',\n 'fxLayoutGap',\n 'fxLayoutAlign',\n]);\nconst parentLayoutDependentDirectives = new Set<LocatedFlexLayoutInput['directive']>([\n 'fxFlex',\n 'fxGrow',\n 'fxShrink',\n 'fxFlexOffset',\n]);\n\nconst defaultSemanticBreakpointConfig: BreakpointMigrationConfig = {\n orientationBreakpoints: true,\n printWithBreakpoints: [],\n};\n\nfunction invalid(input: LocatedFlexLayoutInput): UnresolvedSemanticPlan {\n return {\n status: 'invalid',\n input,\n code: 'invalid-value',\n reason: `${input.value} is not a supported ${input.directive} value.`,\n suggestion: 'Correct the value or migrate this directive manually.',\n };\n}\n\nfunction dynamicBinding(input: LocatedFlexLayoutInput, extended = false): UnresolvedSemanticPlan {\n return {\n status: 'review',\n input,\n code: 'dynamic-binding',\n reason: extended\n ? 'Angular property bindings and interpolation may depend on runtime state.'\n : 'Angular property bindings may depend on runtime state.',\n suggestion: 'Replace the binding manually or make it a literal before migration.',\n };\n}\n\nfunction contextUnverified(input: LocatedFlexLayoutInput, reason: string): UnresolvedSemanticPlan {\n return {\n status: 'review',\n input,\n code: 'context-unverified',\n reason,\n suggestion: 'Migrate the responsive context and its dependent directive families together manually.',\n };\n}\n\nfunction displayContextUnverified(input: LocatedFlexLayoutInput): UnresolvedSemanticPlan {\n return {\n status: 'review',\n input,\n code: 'context-unverified',\n reason: 'The element display context contains an unresolved layout or visibility family.',\n suggestion: 'Migrate the complete layout and visibility context together manually.',\n };\n}\n\nfunction responsivePrecedenceUnverified(input: LocatedFlexLayoutInput): UnresolvedSemanticPlan {\n return {\n status: 'review',\n input,\n code: 'responsive-precedence-unverified',\n reason: 'Overlapping responsive ranges emit different target outputs for the same directive family.',\n suggestion: 'Simplify the overlapping declarations or migrate this directive family manually.',\n };\n}\n\nfunction unresolvedBreakpoint(\n input: LocatedFlexLayoutInput,\n classification: Exclude<BreakpointClassification, { readonly kind: 'verified' }>,\n): UnresolvedSemanticPlan {\n if (classification.kind === 'custom') {\n return {\n status: 'review',\n input,\n code: 'custom-breakpoint',\n reason: `The breakpoint alias ${classification.alias} may be registered by the project.`,\n suggestion: 'Provide its media query or migrate this responsive input manually.',\n };\n }\n\n const kind = classification.kind === 'print' ? 'print' : 'optional';\n return {\n status: 'review',\n input,\n code: 'breakpoint-unverified',\n reason: `The ${kind} breakpoint alias ${classification.alias} is not enabled by explicit migration configuration.`,\n suggestion:\n classification.kind === 'print'\n ? 'Verify the source printWithBreakpoints value, then rerun with --print-with-breakpoints.'\n : 'Verify that the source enables orientation breakpoints, then rerun with --orientation-breakpoints.',\n };\n}\n\nfunction staticLayoutContext(attributes: readonly TemplateAttribute[]): string | undefined {\n const layouts = attributes.filter(\n attribute => attribute.name === 'fxLayout' || attribute.name.startsWith('fxLayout.'),\n );\n if (!layouts.length) return 'row';\n if (layouts.length !== 1) return undefined;\n const layout = layouts[0];\n return layout?.name === 'fxLayout' && layout.binding === 'literal' ? layout.value : undefined;\n}\n\nfunction activation(\n input: LocatedFlexLayoutInput,\n catalog: BreakpointCatalog,\n): SemanticActivation | UnresolvedSemanticPlan {\n if (input.breakpoint === undefined) return { kind: 'base' };\n const classification = catalog.classify(input.breakpoint);\n return classification.kind === 'verified'\n ? { kind: 'media', definition: classification.definition }\n : unresolvedBreakpoint(input, classification);\n}\n\nfunction resolved(input: LocatedFlexLayoutInput, value: ResolvedSemanticValue): ResolvedSemanticPlan {\n const family = directiveFamily(input.directive);\n if (family === undefined) throw new Error(`Semantic planning received an unknown directive: ${input.directive}`);\n return { status: 'converted', input, family, value, activations: [] };\n}\n\nfunction fromSemantic<T extends ResolvedSemanticValue>(\n input: LocatedFlexLayoutInput,\n result: SemanticResult<T>,\n): SemanticPlanningPlan {\n if (result.status === 'planned') return resolved(input, result.value);\n if (result.status === 'invalid') return invalid(input);\n return { ...result, input };\n}\n\nfunction sameSemanticOutput(left: SemanticPlanningPlan, right: SemanticPlanningPlan): boolean {\n return (\n left.status === 'converted' &&\n right.status === 'converted' &&\n left.family === right.family &&\n JSON.stringify(semanticEffect(left)) === JSON.stringify(semanticEffect(right))\n );\n}\n\nfunction semanticEffect(plan: ResolvedSemanticPlan): ResolvedSemanticValue | Omit<FlexItemSemantics, 'axis'> {\n if (plan.family !== 'flex-item') return plan.value;\n const value = plan.value as FlexItemSemantics;\n if (value.min !== undefined || value.max !== undefined) return value;\n const { axis: _axis, ...effect } = value;\n return effect;\n}\n\nfunction semanticPolicy(catalog: BreakpointCatalog): SemanticTargetPolicy<SemanticPlanningPlan> {\n return {\n emptyPlan: input => resolved(input, { kind: 'empty' }),\n targetEligibility: () => undefined,\n validateActivation: plan => {\n if (plan.status !== 'converted') return plan;\n const plannedActivation = activation(plan.input, catalog);\n return 'status' in plannedActivation ? plannedActivation : plan;\n },\n isTargetEligibilityFailure: plan =>\n plan.status !== 'converted' && (plan.code === 'breakpoint-unverified' || plan.code === 'custom-breakpoint'),\n sameOutput: sameSemanticOutput,\n contextUnverified,\n contextualOutputUnverified: input =>\n contextUnverified(\n input,\n 'This directive emits different target outputs across its active responsive layout contexts.',\n ),\n responsivePrecedenceUnverified,\n decorate: plan => {\n if (plan.status !== 'converted') return plan;\n const plannedActivation = activation(plan.input, catalog);\n return 'status' in plannedActivation ? plannedActivation : { ...plan, activations: [plannedActivation] };\n },\n addPrintFallback: plan => {\n if (plan.status !== 'converted') return plan;\n const print = catalog.classify('print');\n return print.kind === 'verified'\n ? { ...plan, activations: [...plan.activations, { kind: 'media', definition: print.definition }] }\n : plan;\n },\n };\n}\n\nfunction equalClassValues(left: SemanticResponsiveClassValue, right: SemanticResponsiveClassValue): boolean {\n return (\n left.tokens.length === right.tokens.length &&\n left.tokens.every((token, index) => token.source === right.tokens[index]?.source)\n );\n}\n\nfunction equalStyleValues(left: ResponsiveStyleValue, right: ResponsiveStyleValue): boolean {\n return (\n left.declarations.length === right.declarations.length &&\n left.declarations.every(\n (declaration, index) =>\n declaration.property === right.declarations[index]?.property &&\n declaration.value === right.declarations[index]?.value,\n )\n );\n}\n\nfunction extendedMayControlDisplay(input: LocatedFlexLayoutInput, evidence: SourcePropertyEvidence): boolean {\n if (input.binding !== 'literal') return true;\n if (extendedStyleDirectives.has(input.directive)) {\n const parsed = parseLiteralStyleDeclarations(input.value);\n return (\n parsed.status === 'unverified' ||\n parsed.declarations.some(declaration => cssPropertiesOverlap(declaration.property, 'display'))\n );\n }\n return input.value\n .split(/\\s+/u)\n .filter(Boolean)\n .some(token => {\n const classification = evidence.classifyClassToken(token);\n return (\n classification.status === 'unverified' ||\n classification.evidence.properties.some(property => cssPropertiesOverlap(property, 'display'))\n );\n });\n}\n\nfunction hasLiteralGridParentClass(context: SemanticConversionContext): boolean {\n return Boolean(\n context.parent?.attributes.some(attribute => {\n if (attribute.binding !== 'literal' || !templateAttributeKeys(attribute).has('class')) return false;\n return attribute.value.split(/\\s+/u).some(className => className === 'grid' || className === 'inline-grid');\n }),\n );\n}\n\nfunction configuredPrintOwner(\n inputs: readonly LocatedFlexLayoutInput[],\n catalog: BreakpointCatalog,\n): { readonly inputId: string; readonly activation: SemanticActivation } | undefined {\n const configuredAliases = catalog.printWithBreakpoints;\n if (configuredAliases === undefined || inputs.some(input => input.breakpoint === 'print')) return undefined;\n const print = catalog.classify('print');\n if (print.kind !== 'verified') return undefined;\n const selected = inputs\n .flatMap(input => {\n if (input.breakpoint === undefined || !configuredAliases.includes(input.breakpoint)) return [];\n const classification = catalog.classify(input.breakpoint);\n return classification.kind === 'verified' ? [{ input, definition: classification.definition }] : [];\n })\n .sort(\n (left, right) =>\n right.definition.priority - left.definition.priority ||\n configuredAliases.indexOf(left.input.breakpoint ?? '') -\n configuredAliases.indexOf(right.input.breakpoint ?? ''),\n )[0];\n return selected === undefined\n ? undefined\n : { inputId: selected.input.id, activation: { kind: 'media', definition: print.definition } };\n}\n\nexport class ElementSemanticPlanner {\n constructor(\n private readonly breakpointConfig?: BreakpointMigrationConfig,\n private readonly sourcePropertyEvidence: SourcePropertyEvidence = unknownSourcePropertyEvidence,\n ) {}\n\n plan(\n inputs: readonly LocatedFlexLayoutInput[],\n context: SemanticConversionContext,\n options: {\n readonly breakpointConfig?: BreakpointMigrationConfig;\n readonly sourcePropertyEvidence?: SourcePropertyEvidence;\n } = {},\n ): readonly SemanticPlanningPlan[] {\n const completeContext = { ...context, inputs };\n const catalog = this.catalog(options.breakpointConfig);\n const sourceEvidence = options.sourcePropertyEvidence ?? this.sourcePropertyEvidence;\n const responsive = new ResponsiveFamilyPlanner(catalog, semanticPolicy(catalog));\n const visibilityInputs = inputs.filter(input => visibilityDirectives.has(input.directive));\n const extendedInputs = inputs.filter(input => extendedDirectives.has(input.directive));\n const ordinaryInputs = inputs.filter(\n input => !visibilityDirectives.has(input.directive) && !extendedDirectives.has(input.directive),\n );\n\n const initial = [\n ...responsive.plan(ordinaryInputs, completeContext, (input, itemContext) => this.planOne(input, itemContext)),\n ...this.planVisibility(visibilityInputs, catalog),\n ...this.planExtendedFamilies(extendedInputs, completeContext, catalog, sourceEvidence),\n ];\n const initialById = new Map(initial.map(plan => [plan.input.id, plan]));\n let closed: readonly SemanticPlanningPlan[] = inputs.map(\n input => initialById.get(input.id) ?? this.planOne(input, completeContext),\n );\n closed = this.closeResponsiveDependencies(closed, completeContext, responsive);\n closed = this.closeResponsiveDependencies(closed, completeContext, responsive);\n closed = this.closeGridContainerDependencies(closed);\n closed = this.assignGridDisplayOwnership(closed);\n closed = new SemanticFamilyCompositionPlanner(catalog, sourceEvidence).compose(closed, completeContext);\n\n return closed;\n }\n\n closeDependencies<TConverted extends { readonly status: 'converted'; readonly input: LocatedFlexLayoutInput }>(\n plans: readonly SemanticDependencyPlan<TConverted>[],\n context: SemanticConversionContext,\n plansByInputId: ReadonlyMap<string, SemanticDependencyPlan<TConverted>>,\n sourceEvidence: SourcePropertyEvidence = unknownSourcePropertyEvidence,\n ): readonly SemanticDependencyPlan<TConverted>[] {\n let closed = this.closeRenderedFamilies(plans);\n closed = this.closeRenderedDisplayDependencies(closed, sourceEvidence);\n closed = this.closeRenderedFamilies(closed);\n closed = this.closeRenderedDisplayDependencies(closed, sourceEvidence);\n closed = this.closeParentLayoutDependencies(closed, context, plansByInputId);\n return this.closeGridParentDependencies(closed, context, plansByInputId);\n }\n\n closeSiblingFamilies<TConverted extends { readonly status: 'converted'; readonly input: LocatedFlexLayoutInput }>(\n plans: readonly SemanticDependencyPlan<TConverted>[],\n ): readonly SemanticDependencyPlan<TConverted>[] {\n return this.closeRenderedFamilies(plans);\n }\n\n closeDisplayDependencies<TConverted extends { readonly status: 'converted'; readonly input: LocatedFlexLayoutInput }>(\n plans: readonly SemanticDependencyPlan<TConverted>[],\n sourceEvidence: SourcePropertyEvidence = unknownSourcePropertyEvidence,\n ): readonly SemanticDependencyPlan<TConverted>[] {\n return this.closeRenderedDisplayDependencies(plans, sourceEvidence);\n }\n\n private planOne(input: LocatedFlexLayoutInput, context: SemanticConversionContext): SemanticPlanningPlan {\n if (input.binding === 'property') return dynamicBinding(input);\n\n if (input.directive === 'fxLayout') {\n const layout = parseLayout(input.value);\n return layout.ok ? resolved(input, layout.value) : invalid(input);\n }\n if (input.directive === 'fxLayoutGap') {\n const layout = context.activeLayout ?? staticLayoutContext(context.element.attributes);\n return fromSemantic(input, planLayoutGapSemantics(input.value, layout));\n }\n if (input.directive === 'fxLayoutAlign') {\n const layout = context.activeLayout ?? staticLayoutContext(context.element.attributes);\n if (layout === undefined) {\n return {\n status: 'review',\n input,\n code: 'context-unverified',\n reason: 'Alignment sizing and direction depend on a dynamic or responsive layout.',\n suggestion: 'Make the layout static or migrate layout and alignment together manually.',\n };\n }\n return fromSemantic(input, planLayoutAlignment(input.value, layout));\n }\n if (flexItemDirectives.has(input.directive)) return this.planFlexItem(input, context);\n if (input.directive === 'fxFlexAlign') return fromSemantic(input, planFlexAlignSemantics(input.value));\n if (input.directive === 'fxFlexFill' || input.directive === 'fxFill') {\n return fromSemantic(input, planFlexFillSemantics());\n }\n if (input.directive === 'fxFlexOffset') {\n const layout = context.activeParentLayout ?? staticLayoutContext(context.parent?.attributes ?? []);\n return fromSemantic(input, planFlexOffsetSemantics(input.value, layout));\n }\n if (input.directive === 'fxFlexOrder') return fromSemantic(input, planFlexOrderSemantics(input.value));\n if (gridDirectives.has(input.directive)) return this.planGrid(input, context);\n\n return {\n status: 'unsupported',\n input,\n code: 'target-unsupported',\n reason: `No shared semantic family supports ${input.directive}.`,\n suggestion: 'Keep the directive and migrate it manually.',\n };\n }\n\n private planFlexItem(input: LocatedFlexLayoutInput, context: SemanticConversionContext): SemanticPlanningPlan {\n const flexInputs = context.inputs.filter(item => flexItemDirectives.has(item.directive));\n const atBreakpoint = (directive: LocatedFlexLayoutInput['directive']) =>\n flexInputs.filter(item => item.directive === directive && item.breakpoint === input.breakpoint);\n const atBase = (directive: LocatedFlexLayoutInput['directive']) =>\n flexInputs.filter(item => item.directive === directive && item.breakpoint === undefined);\n const exactFlex = atBreakpoint('fxFlex');\n const basis = exactFlex[0] ?? (input.breakpoint ? atBase('fxFlex')[0] : undefined);\n const exactGrow = atBreakpoint('fxGrow');\n const exactShrink = atBreakpoint('fxShrink');\n const grow = exactGrow[0] ?? (input.breakpoint ? atBase('fxGrow')[0] : undefined);\n const shrink = exactShrink[0] ?? (input.breakpoint ? atBase('fxShrink')[0] : undefined);\n const duplicateMember = [exactFlex, exactGrow, exactShrink].some(items => items.length > 1);\n if (!basis || duplicateMember) {\n return {\n status: 'invalid',\n input,\n code: 'invalid-value',\n reason: basis\n ? 'Multiple flex sizing inputs define the same responsive state.'\n : `${input.directive} requires an active fxFlex value.`,\n suggestion: 'Keep one flex sizing value per breakpoint or migrate this group manually.',\n };\n }\n\n return fromSemantic(\n input,\n planFlexItemSemantics({\n basis: basis.value,\n grow: grow?.value,\n shrink: shrink?.value,\n layout: context.activeParentLayout ?? staticLayoutContext(context.parent?.attributes ?? []),\n }),\n );\n }\n\n private planGrid(input: LocatedFlexLayoutInput, context: SemanticConversionContext): SemanticPlanningPlan {\n const parsed = parseGridValue(input);\n if (parsed.status === 'review') {\n return {\n status: 'review',\n input,\n code: parsed.code,\n reason: parsed.reason,\n suggestion: 'Replace the binding with a literal or migrate this Grid directive manually.',\n };\n }\n if (parsed.status === 'invalid') {\n return {\n status: 'invalid',\n input,\n code: parsed.code,\n reason: parsed.reason,\n suggestion: 'Correct the value or migrate this Grid directive manually.',\n };\n }\n if (\n parsed.plan.role === 'child' &&\n !context.parentInputs.some(parentInput => gridContainerDirectives.has(parentInput.directive)) &&\n !hasLiteralGridParentClass(context)\n ) {\n return contextUnverified(input, 'The parent element does not have a statically proven Grid container context.');\n }\n return resolved(input, parsed.plan);\n }\n\n private planVisibility(\n inputs: readonly LocatedFlexLayoutInput[],\n catalog: BreakpointCatalog,\n ): readonly SemanticPlanningPlan[] {\n const familyPlan = new VisibilityStatePlanner(catalog).plan(inputs);\n if (familyPlan.status === 'unresolved') {\n return familyPlan.plans;\n }\n const states = familyPlan.states.map(state => ({ intent: state.intent, activation: state.activation }));\n const owner = familyPlan.states[0]?.input.id;\n return inputs.map(input => ({\n ...resolved(input, { kind: 'visibility', emit: input.id === owner, states }),\n activations: [],\n }));\n }\n\n private planExtendedFamilies(\n inputs: readonly LocatedFlexLayoutInput[],\n context: SemanticConversionContext,\n catalog: BreakpointCatalog,\n sourceEvidence: SourcePropertyEvidence,\n ): readonly SemanticPlanningPlan[] {\n const plansById = new Map<string, SemanticPlanningPlan>();\n const familyPlanner = new ExtendedFamilyPlanner(catalog);\n const semanticPlanner = new ExtendedSemanticPlanner(sourceEvidence);\n\n for (const family of ['extended-class', 'extended-style'] as const) {\n const familyInputs = inputs.filter(input =>\n family === 'extended-class'\n ? extendedClassDirectives.has(input.directive)\n : extendedStyleDirectives.has(input.directive),\n );\n if (!familyInputs.length) continue;\n if (family === 'extended-class') {\n const familyPlan = familyPlanner.plan<SemanticResponsiveClassValue>({\n kind: 'class',\n inputs: familyInputs,\n valueParser: input => parseResponsiveClassValue(input, sourceEvidence),\n equals: equalClassValues,\n });\n const decision = semanticPlanner.plan({\n kind: 'class',\n familyPlan,\n attributes: context.attributeEvidence,\n });\n if (familyPlan.status === 'unresolved') {\n for (const plan of familyPlan.plans) {\n plansById.set(plan.input.id, plan);\n }\n continue;\n }\n if (decision.status === 'unresolved') {\n for (const plan of decision.plans) {\n plansById.set(plan.input.id, plan);\n }\n continue;\n }\n const printOwner = configuredPrintOwner(familyInputs, catalog);\n const states = familyPlan.states.map(state => ({\n activations: [state.activation, ...(printOwner?.inputId === state.input.id ? [printOwner.activation] : [])],\n tokens: state.value.tokens,\n }));\n for (const input of familyInputs) {\n plansById.set(input.id, {\n ...resolved(input, {\n kind: 'extended-class',\n emit: decision.ownerInputId === input.id,\n retainedTokens:\n decision.ownerInputId === undefined && input.id === familyPlan.states[0]?.input.id\n ? decision.retainedTokens\n : [],\n states,\n }),\n activations: [],\n });\n }\n continue;\n }\n\n const familyPlan = familyPlanner.plan<ResponsiveStyleValue>({\n kind: 'style',\n inputs: familyInputs,\n valueParser: input => parseResponsiveStyleValue(input, sourceEvidence),\n equals: equalStyleValues,\n });\n const decision = semanticPlanner.plan({\n kind: 'style',\n familyPlan,\n attributes: context.attributeEvidence,\n });\n if (familyPlan.status === 'unresolved') {\n for (const plan of familyPlan.plans) {\n plansById.set(plan.input.id, plan);\n }\n continue;\n }\n if (decision.status === 'unresolved') {\n for (const plan of decision.plans) {\n plansById.set(plan.input.id, plan);\n }\n continue;\n }\n const printOwner = configuredPrintOwner(familyInputs, catalog);\n const states = familyPlan.states.map(state => ({\n activations: [state.activation, ...(printOwner?.inputId === state.input.id ? [printOwner.activation] : [])],\n declarations: state.value.declarations,\n }));\n for (const input of familyInputs) {\n plansById.set(input.id, {\n ...resolved(input, {\n kind: 'extended-style',\n emit: decision.ownerInputId === input.id,\n states,\n }),\n activations: [],\n });\n }\n }\n\n return inputs.map(input => plansById.get(input.id) ?? dynamicBinding(input, true));\n }\n\n private closeResponsiveDependencies(\n plans: readonly SemanticPlanningPlan[],\n context: SemanticConversionContext,\n responsive: ResponsiveFamilyPlanner<SemanticPlanningPlan>,\n ): readonly SemanticPlanningPlan[] {\n const responsiveInputs = plans.map(plan => plan.input).filter(input => !extendedDirectives.has(input.directive));\n const current = new Map(plans.map(plan => [plan.input.id, plan]));\n const closed = responsive.closeDependencies(\n responsiveInputs,\n context,\n (input, itemContext) => current.get(input.id) ?? this.planOne(input, itemContext),\n );\n const closedById = new Map(closed.map(plan => [plan.input.id, plan]));\n return plans.map(plan => closedById.get(plan.input.id) ?? plan);\n }\n\n private closeGridContainerDependencies(plans: readonly SemanticPlanningPlan[]): readonly SemanticPlanningPlan[] {\n const containerPlans = plans.filter(\n plan => gridContainerDirectives.has(plan.input.directive) || plan.input.directive === 'gdInline',\n );\n if (!containerPlans.some(plan => plan.status !== 'converted')) return plans;\n return plans.map(plan =>\n plan.status === 'converted' &&\n (gridContainerDirectives.has(plan.input.directive) || plan.input.directive === 'gdInline')\n ? contextUnverified(plan.input, 'The Grid container display family contains an unresolved member.')\n : plan,\n );\n }\n\n private assignGridDisplayOwnership(plans: readonly SemanticPlanningPlan[]): readonly SemanticPlanningPlan[] {\n const hasBaseInline = plans.some(\n plan => plan.status === 'converted' && plan.input.directive === 'gdInline' && plan.input.breakpoint === undefined,\n );\n const ownerByBreakpoint = new Map<string, string>();\n if (!hasBaseInline) {\n for (const plan of plans) {\n if (plan.status !== 'converted' || !gridContainerDirectives.has(plan.input.directive)) continue;\n const breakpoint = plan.input.breakpoint ?? 'base';\n if (!ownerByBreakpoint.has(breakpoint)) ownerByBreakpoint.set(breakpoint, plan.input.id);\n }\n }\n return plans.map(plan =>\n plan.status === 'converted' && gridContainerDirectives.has(plan.input.directive)\n ? { ...plan, emitGridDisplay: ownerByBreakpoint.get(plan.input.breakpoint ?? 'base') === plan.input.id }\n : plan,\n );\n }\n\n private closeRenderedFamilies<\n TConverted extends { readonly status: 'converted'; readonly input: LocatedFlexLayoutInput },\n >(plans: readonly SemanticDependencyPlan<TConverted>[]): readonly SemanticDependencyPlan<TConverted>[] {\n const groups = new Map<DirectiveFamily, SemanticDependencyPlan<TConverted>[]>();\n for (const plan of plans) {\n const family = directiveFamily(plan.input.directive);\n if (!family) continue;\n const members = groups.get(family) ?? [];\n members.push(plan);\n groups.set(family, members);\n }\n const unresolvedFamilies = new Set(\n [...groups].filter(([, members]) => members.some(plan => plan.status !== 'converted')).map(([family]) => family),\n );\n let closed = plans.map(plan => {\n const family = directiveFamily(plan.input.directive);\n return plan.status === 'converted' && family !== undefined && unresolvedFamilies.has(family)\n ? contextUnverified(plan.input, 'Another member of this responsive directive family is unresolved.')\n : plan;\n });\n\n if (closed.some(plan => localLayoutDirectives.has(plan.input.directive) && plan.status !== 'converted')) {\n closed = closed.map(plan =>\n plan.status === 'converted' && localLayoutDirectives.has(plan.input.directive)\n ? contextUnverified(\n plan.input,\n 'The element layout context contains an unresolved dependent directive family.',\n )\n : plan,\n );\n }\n return closed;\n }\n\n private closeRenderedDisplayDependencies<\n TConverted extends { readonly status: 'converted'; readonly input: LocatedFlexLayoutInput },\n >(\n plans: readonly SemanticDependencyPlan<TConverted>[],\n evidence: SourcePropertyEvidence,\n ): readonly SemanticDependencyPlan<TConverted>[] {\n const layoutPlans = plans.filter(plan => plan.input.directive === 'fxLayout');\n const visibilityPlans = plans.filter(plan => visibilityDirectives.has(plan.input.directive));\n const authorityPlans = plans.filter(\n plan =>\n displayAuthorityDirectives.has(plan.input.directive) &&\n (extendedMayControlDisplay(plan.input, evidence) ||\n (plan.status !== 'converted' && extendedClassDirectives.has(plan.input.directive))),\n );\n const visibilityIsNoOp =\n visibilityPlans.length > 0 &&\n visibilityPlans.every(plan => plan.status === 'converted' && parseVisibilityValue(plan.input) === 'shown');\n if ((!layoutPlans.length && !authorityPlans.length) || !visibilityPlans.length || visibilityIsNoOp) return plans;\n if (![...layoutPlans, ...visibilityPlans, ...authorityPlans].some(plan => plan.status !== 'converted'))\n return plans;\n const affected = new Set([...layoutPlans, ...visibilityPlans, ...authorityPlans].map(plan => plan.input.id));\n return plans.map(plan =>\n plan.status === 'converted' && affected.has(plan.input.id) ? displayContextUnverified(plan.input) : plan,\n );\n }\n\n private closeParentLayoutDependencies<\n TConverted extends { readonly status: 'converted'; readonly input: LocatedFlexLayoutInput },\n >(\n plans: readonly SemanticDependencyPlan<TConverted>[],\n context: SemanticConversionContext,\n plansByInputId: ReadonlyMap<string, SemanticDependencyPlan<TConverted>>,\n ): readonly SemanticDependencyPlan<TConverted>[] {\n if (!plans.some(plan => parentLayoutDependentDirectives.has(plan.input.directive))) return plans;\n const parentContextInputs = context.parentInputs.filter(input => localLayoutDirectives.has(input.directive));\n const knownParentPlans = parentContextInputs\n .map(input => plansByInputId.get(input.id))\n .filter((plan): plan is SemanticDependencyPlan<TConverted> => plan !== undefined);\n if (!knownParentPlans.some(plan => plan.status !== 'converted')) return plans;\n return plans.map(plan =>\n plan.status === 'converted' && parentLayoutDependentDirectives.has(plan.input.directive)\n ? contextUnverified(plan.input, 'The responsive parent layout family contains an unresolved member.')\n : plan,\n );\n }\n\n private closeGridParentDependencies<\n TConverted extends { readonly status: 'converted'; readonly input: LocatedFlexLayoutInput },\n >(\n plans: readonly SemanticDependencyPlan<TConverted>[],\n context: SemanticConversionContext,\n plansByInputId: ReadonlyMap<string, SemanticDependencyPlan<TConverted>>,\n ): readonly SemanticDependencyPlan<TConverted>[] {\n if (!plans.some(plan => gridChildDirectives.has(plan.input.directive))) return plans;\n const parentGridInputs = context.parentInputs.filter(\n input => gridContainerDirectives.has(input.directive) || input.directive === 'gdInline',\n );\n const parentPlansAreSafe =\n parentGridInputs.some(input => gridContainerDirectives.has(input.directive)) &&\n parentGridInputs.every(input => plansByInputId.get(input.id)?.status === 'converted');\n if (parentPlansAreSafe || (parentGridInputs.length === 0 && hasLiteralGridParentClass(context))) return plans;\n if (parentGridInputs.length > 0 && parentGridInputs.every(input => !plansByInputId.has(input.id))) return plans;\n\n return plans.map(plan =>\n plan.status === 'converted' && gridChildDirectives.has(plan.input.directive)\n ? contextUnverified(plan.input, 'The parent Grid container conversion is unresolved.')\n : plan,\n );\n }\n\n private catalog(override?: BreakpointMigrationConfig): BreakpointCatalog {\n return new BreakpointCatalog(this.breakpointConfig ?? override ?? defaultSemanticBreakpointConfig);\n }\n}\n","import type { LocatedFlexLayoutInput } from '../analyzer/flex-layout-attribute.analyzer';\nimport { MigrationApplicationError } from '../migrator/migration-application.error';\nimport type { ConversionRenderer, PlannedConversion } from '../render/conversion-renderer';\nimport type { SemanticConversionContext } from '../semantic/conversion-context';\nimport { ElementSemanticPlanner } from '../semantic/element-semantic.planner';\nimport type { ResolvedSemanticPlan, UnresolvedSemanticPlan } from '../semantic/semantic-plan';\n\ntype TargetDiagnostic = Exclude<PlannedConversion, { readonly status: 'converted' }>;\ntype ResultBoundary = 'Initial target rendering' | 'Target conflict resolution';\n\n/** Coordinates target-neutral semantic planning with exactly one target renderer. */\nexport class SemanticRenderCoordinator {\n private readonly semanticPlanner: ElementSemanticPlanner;\n\n constructor(\n readonly renderer: ConversionRenderer,\n semanticPlanner: ElementSemanticPlanner = new ElementSemanticPlanner(\n renderer.breakpointConfig,\n renderer.sourcePropertyEvidence,\n ),\n ) {\n this.semanticPlanner = semanticPlanner;\n }\n\n planElement(\n inputs: readonly LocatedFlexLayoutInput[],\n context: SemanticConversionContext,\n record = true,\n ): readonly PlannedConversion[] {\n this.assertUniqueInputIds(inputs);\n const semanticPlans = this.semanticPlanner.plan(inputs, context, {\n breakpointConfig: this.renderer.breakpointConfig,\n sourcePropertyEvidence: this.renderer.sourcePropertyEvidence,\n });\n const targetReady = semanticPlans.map(plan => this.applyTargetEligibility(plan));\n const familyClosed = this.semanticPlanner.closeSiblingFamilies(targetReady);\n const locallyClosed =\n this.renderer.target === 'css'\n ? this.semanticPlanner.closeDisplayDependencies(familyClosed, this.renderer.sourcePropertyEvidence)\n : familyClosed;\n const rendered = locallyClosed.map(plan =>\n plan.status === 'converted' ? this.renderer.render(plan, context) : plan,\n );\n this.assertResultCorrespondence(inputs, rendered, 'Initial target rendering');\n const resolved = this.renderer.resolveConflicts(rendered, context);\n this.assertResultCorrespondence(inputs, resolved, 'Target conflict resolution');\n if (record) this.record(resolved);\n return resolved;\n }\n\n record(plans: readonly PlannedConversion[]): void {\n this.renderer.record(plans);\n }\n\n closeDependencies(\n plans: readonly PlannedConversion[],\n context: SemanticConversionContext,\n plansByInputId: ReadonlyMap<string, PlannedConversion>,\n ): readonly PlannedConversion[] {\n return this.semanticPlanner.closeDependencies(plans, context, plansByInputId, this.renderer.sourcePropertyEvidence);\n }\n\n private applyTargetEligibility(\n plan: ResolvedSemanticPlan | UnresolvedSemanticPlan,\n ): ResolvedSemanticPlan | TargetDiagnostic {\n const eligibility = this.renderer.eligibility(plan.input);\n if (eligibility?.status === 'converted') throw new Error('Renderer eligibility must not emit target output');\n if (eligibility !== undefined) return eligibility;\n if (plan.status === 'converted') return plan;\n if (plan.reason === 'Overlapping responsive ranges emit different target outputs for the same directive family.') {\n return {\n ...plan,\n reason:\n this.renderer.target === 'css'\n ? 'Overlapping responsive ranges emit different CSS declarations for the same directive family.'\n : 'Overlapping responsive ranges emit different utilities for the same directive family.',\n };\n }\n if (plan.reason === 'This directive emits different target outputs across its active responsive layout contexts.') {\n return {\n ...plan,\n reason:\n this.renderer.target === 'css'\n ? 'This directive emits different declarations across its active responsive layout contexts.'\n : 'This directive emits different utilities across its active responsive layout contexts.',\n };\n }\n return plan;\n }\n\n private assertUniqueInputIds(inputs: readonly LocatedFlexLayoutInput[]): void {\n const seen = new Set<string>();\n for (const input of inputs) {\n if (seen.has(input.id)) {\n throw internalInvariant(`Semantic render inputs contain duplicate ID \"${input.id}\".`, inputPaths(inputs));\n }\n seen.add(input.id);\n }\n }\n\n private assertResultCorrespondence(\n inputs: readonly LocatedFlexLayoutInput[],\n results: readonly PlannedConversion[],\n boundary: ResultBoundary,\n ): void {\n const paths = inputPaths(inputs, results);\n if (results.length !== inputs.length) {\n throw internalInvariant(\n `${boundary} returned ${results.length} ${results.length === 1 ? 'result' : 'results'} for ${inputs.length} inputs; results must be one-to-one and in stable order.`,\n paths,\n );\n }\n\n const seen = new Set<string>();\n for (const result of results) {\n if (seen.has(result.input.id)) {\n throw internalInvariant(`${boundary} returned duplicate input ID \"${result.input.id}\".`, paths);\n }\n seen.add(result.input.id);\n }\n\n for (let index = 0; index < inputs.length; index += 1) {\n const expected = inputs[index]!;\n const result = results[index]!;\n if (result.input.id !== expected.id) {\n throw internalInvariant(\n `${boundary} returned input ID \"${result.input.id}\" at index ${index}; expected \"${expected.id}\".`,\n paths,\n );\n }\n if (result.input !== expected) {\n throw internalInvariant(\n `${boundary} replaced the input identity for ID \"${expected.id}\" at index ${index}.`,\n paths,\n );\n }\n }\n }\n}\n\nfunction inputPaths(\n inputs: readonly LocatedFlexLayoutInput[],\n results: readonly PlannedConversion[] = [],\n): readonly string[] {\n return [...new Set([...inputs.map(input => input.fileName), ...results.map(result => result.input.fileName)])];\n}\n\nfunction internalInvariant(message: string, paths: readonly string[]): MigrationApplicationError {\n return new MigrationApplicationError('internal-invariant', message, paths);\n}\n","import type { PlannedConversion } from '../render/conversion-renderer';\nimport type { ConversionResult } from '../analyzer/conversion-result';\nimport type { LocatedFlexLayoutInput } from '../analyzer/flex-layout-attribute.analyzer';\nimport type { SourceEdit } from '../edit/source-edit';\nimport { templateAttributeKeys } from '../template/template-attribute';\nimport type { SourceRange, TemplateElement } from '../template/template.model';\nimport { appendLiteralClassNames } from '../edit/html-attribute-value';\nimport { ResponsiveImagePlanner } from '../image/responsive-image.planner';\nimport type { ResponsiveImagePlan } from '../image/responsive-image.model';\nimport { PictureRenderer } from '../image/picture.renderer';\nimport type { ConversionRenderer } from '../render/conversion-renderer';\nimport type { SemanticConversionContext } from '../semantic/conversion-context';\nimport { ElementSemanticPlanner } from '../semantic/element-semantic.planner';\nimport { SemanticRenderCoordinator } from './semantic-render.coordinator';\n\nexport interface FilePlan {\n readonly edits: readonly SourceEdit[];\n readonly results: readonly ConversionResult[];\n}\n\nexport interface ConversionPlanningOptions {\n readonly responsiveImages: boolean;\n}\n\ninterface ElementConversions {\n readonly element: TemplateElement;\n readonly inputs: LocatedFlexLayoutInput[];\n readonly classPlans: Array<{\n readonly input: LocatedFlexLayoutInput;\n readonly classNames: readonly string[];\n }>;\n}\n\nconst directiveOrder = new Map(\n [\n 'fxLayout',\n 'fxLayoutGap',\n 'fxLayoutAlign',\n 'fxFlex',\n 'fxGrow',\n 'fxShrink',\n 'fxFlexAlign',\n 'fxFlexFill',\n 'fxFill',\n 'fxFlexOffset',\n 'fxFlexOrder',\n 'ngClass',\n 'class',\n 'ngStyle',\n 'style',\n 'fxShow',\n 'fxHide',\n ].map((directive, index) => [directive, index]),\n);\n\nfunction boundClassBlocked(input: LocatedFlexLayoutInput): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'bound-class',\n reason: 'Generated classes cannot be merged safely with a bound class value.',\n suggestion: 'Merge the generated classes into the binding manually.',\n };\n}\n\nfunction isBoundClassAttribute(attribute: TemplateElement['attributes'][number]): boolean {\n if (attribute.binding !== 'property') return false;\n return [...templateAttributeKeys(attribute)].some(\n key => key === 'class' || key === 'ngclass' || key.startsWith('class.') || key.startsWith('ngclass.'),\n );\n}\n\nfunction literalClassAttribute(element: TemplateElement) {\n return element.attributes.find(\n attribute => attribute.binding === 'literal' && templateAttributeKeys(attribute).has('class'),\n );\n}\n\nfunction removalRange(source: string, input: LocatedFlexLayoutInput): SourceRange {\n const start =\n input.source.start > 0 && /[\\t ]/.test(source[input.source.start - 1] ?? '')\n ? input.source.start - 1\n : input.source.start;\n return { start, end: input.source.end };\n}\n\nexport class ConversionPlanner {\n plan(\n source: string,\n elements: readonly TemplateElement[],\n inputs: readonly LocatedFlexLayoutInput[],\n renderer: ConversionRenderer,\n options: ConversionPlanningOptions = { responsiveImages: false },\n semanticPlanner: ElementSemanticPlanner = new ElementSemanticPlanner(renderer.breakpointConfig),\n ): FilePlan {\n const coordinator = new SemanticRenderCoordinator(renderer, semanticPlanner);\n const elementById = new Map(elements.map(element => [element.id, element]));\n const inputsByElementId = new Map<string, LocatedFlexLayoutInput[]>();\n for (const input of inputs) {\n const elementInputs = inputsByElementId.get(input.elementId) ?? [];\n elementInputs.push(input);\n inputsByElementId.set(input.elementId, elementInputs);\n }\n const conversionsByElement = new Map<string, ElementConversions>();\n const results: ConversionResult[] = [];\n const plansByInputId = new Map<string, PlannedConversion>();\n const plansByElementId = new Map<string, readonly PlannedConversion[]>();\n const contextsByElementId = new Map<string, SemanticConversionContext>();\n const imagePlansByElementId = new Map<string, ResponsiveImagePlan>();\n\n for (const element of elements) {\n const allElementInputs = inputsByElementId.get(element.id) ?? [];\n if (!allElementInputs.length) continue;\n const elementInputs = allElementInputs.filter(input => input.directive !== 'imgSrc');\n if (!elementInputs.length) continue;\n const parent = element.parentId ? elementById.get(element.parentId) : undefined;\n const literalClass = literalClassAttribute(element);\n const existingClassNames = literalClass?.value.split(/\\s+/).filter(Boolean) ?? [];\n const context: SemanticConversionContext = {\n element,\n inputs: elementInputs,\n existingClassNames,\n attributeEvidence: element.attributes,\n ...(parent\n ? { parent, parentInputs: inputsByElementId.get(parent.id) ?? [] }\n : { parentInputs: [] as readonly LocatedFlexLayoutInput[] }),\n };\n let plans = coordinator.planElement(elementInputs, context, false);\n const hasBoundClass = element.attributes.some(isBoundClassAttribute);\n if (hasBoundClass) {\n plans = plans.map(plan =>\n plan.status === 'converted' && plan.classNames.length > 0 ? boundClassBlocked(plan.input) : plan,\n );\n }\n contextsByElementId.set(element.id, context);\n plansByElementId.set(element.id, plans);\n for (const planned of plans) plansByInputId.set(planned.input.id, planned);\n }\n\n for (const element of elements) {\n const plans = plansByElementId.get(element.id);\n const context = contextsByElementId.get(element.id);\n if (!plans || !context) continue;\n const closedPlans = coordinator.closeDependencies(plans, context, plansByInputId);\n for (const planned of closedPlans) plansByInputId.set(planned.input.id, planned);\n }\n\n for (const element of elements) {\n const imageInputs = (inputsByElementId.get(element.id) ?? []).filter(input => input.directive === 'imgSrc');\n if (!imageInputs.length) continue;\n const ancestors: TemplateElement[] = [];\n let ancestor = element.parentId ? elementById.get(element.parentId) : undefined;\n while (ancestor) {\n ancestors.push(ancestor);\n ancestor = ancestor.parentId ? elementById.get(ancestor.parentId) : undefined;\n }\n const imageResult = new ResponsiveImagePlanner().plan(\n imageInputs,\n { element, ancestors },\n options.responsiveImages,\n );\n const ordinaryPlans = (inputsByElementId.get(element.id) ?? [])\n .filter(input => input.directive !== 'imgSrc')\n .map(input => plansByInputId.get(input.id))\n .filter((plan): plan is PlannedConversion => plan !== undefined);\n const unresolvedOrdinary = ordinaryPlans.some(plan => plan.status !== 'converted');\n\n if (imageResult.status === 'unresolved') {\n for (const plan of imageResult.plans) plansByInputId.set(plan.input.id, plan);\n continue;\n }\n\n if (!unresolvedOrdinary) {\n imagePlansByElementId.set(element.id, imageResult.plan);\n for (const input of imageInputs) {\n plansByInputId.set(input.id, { status: 'converted', input, classNames: [] });\n }\n continue;\n }\n\n const familyFailure = {\n status: 'review' as const,\n code: 'context-unverified' as const,\n reason: 'Responsive image and same-element conversions must be applied atomically.',\n suggestion: 'Resolve all conversions on this image before enabling its picture migration.',\n };\n for (const plan of ordinaryPlans) {\n if (plan.status === 'converted') plansByInputId.set(plan.input.id, { ...familyFailure, input: plan.input });\n }\n for (const input of imageInputs) plansByInputId.set(input.id, { ...familyFailure, input });\n }\n\n coordinator.record(\n inputs.map(input => plansByInputId.get(input.id)).filter((plan): plan is PlannedConversion => plan !== undefined),\n );\n\n for (const input of inputs) {\n const element = elementById.get(input.elementId);\n if (!element) continue;\n const planned = plansByInputId.get(input.id);\n if (!planned) continue;\n\n if (planned.status !== 'converted') {\n results.push(planned);\n continue;\n }\n\n if (input.directive === 'imgSrc') {\n results.push({ status: 'converted', input });\n continue;\n }\n\n const conversion = conversionsByElement.get(element.id) ?? {\n element,\n inputs: [],\n classPlans: [],\n };\n conversion.inputs.push(input);\n conversion.classPlans.push({ input, classNames: planned.classNames });\n conversionsByElement.set(element.id, conversion);\n results.push({ status: 'converted', input });\n }\n\n const edits: SourceEdit[] = [];\n for (const conversion of conversionsByElement.values()) {\n const generatedClassNames = [...conversion.classPlans]\n .sort(\n (left, right) =>\n (directiveOrder.get(left.input.directive) ?? Number.MAX_SAFE_INTEGER) -\n (directiveOrder.get(right.input.directive) ?? Number.MAX_SAFE_INTEGER) ||\n (left.input.breakpoint ?? '').localeCompare(right.input.breakpoint ?? '') ||\n left.input.source.start - right.input.source.start,\n )\n .flatMap(plan => plan.classNames);\n edits.push(\n ...conversion.inputs.map(input => ({\n range: removalRange(source, input),\n text: '',\n inputId: input.id,\n })),\n );\n\n const classEdit = appendLiteralClassNames(\n source,\n conversion.element,\n literalClassAttribute(conversion.element),\n generatedClassNames,\n `${conversion.element.id}:classes`,\n );\n if (classEdit !== undefined) edits.push(classEdit);\n }\n\n for (const [elementId, imagePlan] of imagePlansByElementId) {\n const containedEdits = edits.filter(\n edit => edit.range.start >= imagePlan.element.source.start && edit.range.end <= imagePlan.element.source.end,\n );\n const externalEdits = edits.filter(edit => !containedEdits.includes(edit));\n edits.length = 0;\n edits.push(...externalEdits, {\n range: imagePlan.element.source,\n text: new PictureRenderer().render(source, imagePlan, containedEdits),\n inputId: `${elementId}:responsive-image`,\n });\n }\n\n return { edits, results };\n }\n}\n","import * as path from 'node:path';\nimport type { OwnedCssRule } from '../adapter/css/css-artifact.model';\nimport type { ConversionResult } from '../analyzer/conversion-result';\nimport type { MediaDefinition } from '../breakpoint/breakpoint-catalog';\nimport type { SourceEdit } from '../edit/source-edit';\nimport { MigrationApplicationError } from '../migrator/migration-application.error';\nimport type { AdapterSessionResult } from '../render/render-session';\nimport { analyzedProject, type AnalyzedProject, type AnalyzedTemplate } from './analyzed-project';\nimport type { ManifestTemplate } from './project-manifest';\n\nexport interface RenderedTemplateFile {\n readonly inputPath: string;\n readonly outputPath: string;\n readonly edits: readonly SourceEdit[];\n readonly results: readonly ConversionResult[];\n}\n\nexport interface RenderedProject {\n readonly analyzed: AnalyzedProject;\n readonly target: 'css' | 'tailwind';\n readonly files: readonly RenderedTemplateFile[];\n readonly session: AdapterSessionResult;\n}\n\nexport function renderedProject(project: RenderedProject): RenderedProject {\n const analyzed = analyzedProject(project.analyzed);\n if (project.files.length !== analyzed.templates.length) throw sequenceInvariant();\n const files = project.files.map((file, index) => {\n const template = analyzed.templates[index];\n if (template === undefined || !samePathPair(template.file, file)) {\n throw sequenceInvariant([file.inputPath, file.outputPath]);\n }\n if (\n template.status === 'parse-error' &&\n (file.edits.length > 0 || !sameOwnedValue(file.results, parseErrorResults(template)))\n ) {\n throw internalInvariant(\n 'Rendered parse-error files must be edit-free and preserve their analyzed diagnostics exactly.',\n [file.inputPath, file.outputPath],\n );\n }\n const suppliedTemplate = project.analyzed.templates[index];\n if (template.status === 'parsed') {\n if (suppliedTemplate?.status !== 'parsed') throw sequenceInvariant([file.inputPath, file.outputPath]);\n assertParsedResultCorrespondence(suppliedTemplate, file.results);\n }\n const identity = template.file;\n return freezeRenderedFile({\n inputPath: identity.inputPath,\n outputPath: identity.outputPath,\n edits: file.edits,\n results: template.status === 'parsed' ? canonicalParsedResults(template, file.results) : file.results,\n });\n });\n\n return Object.freeze({\n analyzed,\n target: project.target,\n files: Object.freeze(files),\n session: freezeSessionResult(project.session),\n });\n}\n\nfunction assertParsedResultCorrespondence(\n template: Extract<AnalyzedTemplate, { readonly status: 'parsed' }>,\n results: readonly ConversionResult[],\n): void {\n const paths = [template.file.inputPath, template.file.outputPath];\n if (results.length !== template.inputs.length) {\n throw internalInvariant('Parsed render results must match analyzed inputs one-to-one and in stable order.', paths);\n }\n\n const seen = new Set<string>();\n for (let index = 0; index < results.length; index += 1) {\n const result = results[index]!;\n if (result.status === 'parse-error') {\n throw internalInvariant('Parsed render results cannot contain parse-error results.', paths);\n }\n const actual = result.input;\n const expected = template.inputs[index]!;\n if (!('id' in actual) || typeof actual.id !== 'string') {\n throw internalInvariant('Parsed render results must retain analyzed input IDs.', paths);\n }\n if (seen.has(actual.id)) {\n throw internalInvariant(`Parsed render results contain duplicate input ID \"${actual.id}\".`, paths);\n }\n seen.add(actual.id);\n if (actual.id !== expected.id) {\n throw internalInvariant(\n `Parsed render result input ID \"${actual.id}\" at index ${index} does not match analyzed input ID \"${expected.id}\".`,\n paths,\n );\n }\n if (actual !== expected) {\n throw internalInvariant(`Parsed render result replaced analyzed input identity \"${expected.id}\".`, paths);\n }\n }\n}\n\nfunction canonicalParsedResults(\n template: Extract<AnalyzedTemplate, { readonly status: 'parsed' }>,\n results: readonly ConversionResult[],\n): readonly ConversionResult[] {\n return Object.freeze(\n results.map((result, index) => {\n if (result.status === 'parse-error') throw new Error('Parsed render-result validation was bypassed.');\n return Object.freeze({ ...result, input: template.inputs[index]! });\n }),\n );\n}\n\nfunction parseErrorResults(\n template: Extract<AnalyzedProject['templates'][number], { readonly status: 'parse-error' }>,\n): readonly ConversionResult[] {\n return template.parseResult.diagnostics.map(diagnostic => ({\n status: 'parse-error',\n fileName: template.file.inputPath,\n code: 'template-parse-error',\n reason: diagnostic.message,\n source: diagnostic.source,\n }));\n}\n\nfunction freezeRenderedFile(file: RenderedTemplateFile): RenderedTemplateFile {\n return Object.freeze({\n inputPath: file.inputPath,\n outputPath: file.outputPath,\n edits: Object.freeze(\n file.edits.map(edit =>\n Object.freeze({\n ...edit,\n range: Object.freeze({ ...edit.range }),\n }),\n ),\n ),\n results: Object.freeze(\n file.results.map(result => (result.status === 'parse-error' ? freezeValue(result) : result)),\n ),\n });\n}\n\nfunction freezeSessionResult(session: AdapterSessionResult): AdapterSessionResult {\n if (session.target === 'tailwind') return Object.freeze({ target: session.target });\n return Object.freeze({\n target: session.target,\n rules: Object.freeze(session.rules.map(rule => freezeOwnedCssRule(rule))),\n });\n}\n\nfunction freezeOwnedCssRule(rule: OwnedCssRule): OwnedCssRule {\n return Object.freeze({\n ...rule,\n declarations: Object.freeze(rule.declarations.map(declaration => Object.freeze({ ...declaration }))),\n context: Object.freeze({\n ...rule.context,\n ...(rule.context.media === undefined ? {} : { media: freezeMedia(rule.context.media) }),\n }),\n });\n}\n\nfunction freezeMedia(media: MediaDefinition): MediaDefinition {\n return Object.freeze({\n ...media,\n clauses: Object.freeze(media.clauses.map(clause => Object.freeze({ ...clause }))),\n });\n}\n\nfunction samePathPair(left: ManifestTemplate, right: RenderedTemplateFile): boolean {\n return (\n normalizedAbsolutePath(left.inputPath) === normalizedAbsolutePath(right.inputPath) &&\n normalizedAbsolutePath(left.outputPath) === normalizedAbsolutePath(right.outputPath)\n );\n}\n\nfunction normalizedAbsolutePath(value: string): string {\n return path.normalize(path.resolve(value));\n}\n\nfunction sameOwnedValue(left: unknown, right: unknown): boolean {\n if (Object.is(left, right)) return true;\n if (Array.isArray(left) || Array.isArray(right)) {\n return (\n Array.isArray(left) &&\n Array.isArray(right) &&\n left.length === right.length &&\n left.every((item, index) => sameOwnedValue(item, right[index]))\n );\n }\n if (!isPlainRecord(left) || !isPlainRecord(right)) return false;\n const keys = Object.keys(left);\n return (\n keys.length === Object.keys(right).length &&\n keys.every(key => Object.hasOwn(right, key) && sameOwnedValue(left[key], right[key]))\n );\n}\n\nfunction isPlainRecord(value: unknown): value is Readonly<Record<string, unknown>> {\n if (value === null || typeof value !== 'object') return false;\n const prototype = Object.getPrototypeOf(value) as unknown;\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction freezeValue<T>(value: T): T {\n if (Array.isArray(value)) return Object.freeze(value.map(item => freezeValue(item))) as T;\n if (value !== null && typeof value === 'object') {\n return Object.freeze(Object.fromEntries(Object.entries(value).map(([key, item]) => [key, freezeValue(item)]))) as T;\n }\n return value;\n}\n\nfunction sequenceInvariant(paths: readonly string[] = []): MigrationApplicationError {\n return internalInvariant(\n 'Rendered project files must match its analyzed templates one-to-one and in the same order.',\n paths,\n );\n}\n\nfunction internalInvariant(message: string, paths: readonly string[] = []): MigrationApplicationError {\n return new MigrationApplicationError('internal-invariant', message, paths);\n}\n","import type { ConversionResult } from '../../analyzer/conversion-result';\nimport { ConversionPlanner, type ConversionPlanningOptions, type FilePlan } from '../../planner/conversion-planner';\nimport type { ConversionRenderer } from '../../render/conversion-renderer';\nimport type { RenderSession } from '../../render/render-session';\nimport type { AnalyzedTemplate, AnalyzedProject } from '../analyzed-project';\nimport type { RenderStage } from '../migration-pipeline';\nimport { renderedProject, type RenderedProject, type RenderedTemplateFile } from '../rendered-project';\n\nexport interface RenderTemplatePlanner {\n plan(\n template: Extract<AnalyzedTemplate, { readonly status: 'parsed' }>,\n renderer: ConversionRenderer,\n options: ConversionPlanningOptions,\n ): FilePlan;\n}\n\nconst defaultTemplatePlanner: RenderTemplatePlanner = Object.freeze({\n plan(\n template: Extract<AnalyzedTemplate, { readonly status: 'parsed' }>,\n renderer: ConversionRenderer,\n options: ConversionPlanningOptions,\n ): FilePlan {\n return new ConversionPlanner().plan(\n template.source,\n template.parseResult.elements,\n template.inputs,\n renderer,\n options,\n );\n },\n});\n\nexport class RenderProjectStage implements RenderStage {\n constructor(\n private readonly session: RenderSession,\n private readonly templatePlanner: RenderTemplatePlanner = defaultTemplatePlanner,\n ) {}\n\n public async run(analyzed: AnalyzedProject): Promise<RenderedProject> {\n const files: RenderedTemplateFile[] = [];\n const options: ConversionPlanningOptions = {\n responsiveImages: analyzed.manifest.invocation.options.responsiveImages ?? false,\n };\n\n for (const template of analyzed.templates) {\n if (template.status === 'parse-error') {\n files.push(parseErrorPlan(template));\n continue;\n }\n\n const plan = this.templatePlanner.plan(template, this.session.renderer, options);\n files.push({\n inputPath: template.file.inputPath,\n outputPath: template.file.outputPath,\n edits: plan.edits,\n results: plan.results,\n });\n }\n\n const finalizedSession = this.session.finalize();\n return renderedProject({ analyzed, target: this.session.renderer.target, files, session: finalizedSession });\n }\n}\n\nfunction parseErrorPlan(template: Extract<AnalyzedTemplate, { readonly status: 'parse-error' }>): RenderedTemplateFile {\n const results: readonly ConversionResult[] = template.parseResult.diagnostics.map(diagnostic => ({\n status: 'parse-error',\n fileName: template.file.inputPath,\n code: 'template-parse-error',\n reason: diagnostic.message,\n source: diagnostic.source,\n }));\n return {\n inputPath: template.file.inputPath,\n outputPath: template.file.outputPath,\n edits: [],\n results,\n };\n}\n","import * as path from 'node:path';\nimport { MigrationApplicationError } from '../../migrator/migration-application.error';\nimport { migrationPlan, type FileMigrationPlan, type PlannedOutputArtifact } from '../../migrator/migration-plan';\nimport { validateMigrationPaths, validateStylesheetRootTopology } from '../../migrator/migration-path.validator';\nimport { StylesheetPlanner } from '../../migrator/stylesheet.planner';\nimport type { StylesheetMigrationResult } from '../../report/migration-report.builder';\nimport type { ValidateStage } from '../migration-pipeline';\nimport type { MigrationInvocation } from '../project-manifest';\nimport { renderedProject, type RenderedProject } from '../rendered-project';\nimport { validatedProjectPlan, type ValidatedProjectPlan } from '../validated-project-plan';\nimport { CssReferenceCollector } from './css-reference.collector';\nimport { TemplateProposalValidator } from './template-proposal.validator';\n\ntype TemplateProposalValidatorPort = Pick<TemplateProposalValidator, 'validate'>;\ntype CssReferenceCollectorPort = Pick<CssReferenceCollector, 'collect'>;\ntype StylesheetPlannerPort = Pick<StylesheetPlanner, 'plan'>;\n\nexport class ValidateProjectStage implements ValidateStage {\n constructor(\n private readonly templateValidator: TemplateProposalValidatorPort = new TemplateProposalValidator(),\n private readonly cssReferences: CssReferenceCollectorPort = new CssReferenceCollector(),\n private readonly stylesheetPlanner: StylesheetPlannerPort = new StylesheetPlanner(),\n ) {}\n\n public async prevalidate(invocation: MigrationInvocation): Promise<void> {\n await validateStylesheetRootTopology({\n stylesheetPath: invocation.options.stylesheetPath,\n stylesheetPathInput: invocation.options.stylesheetPathInput,\n inputPath: invocation.canonicalInputPath,\n outputPath: invocation.canonicalOutputPath,\n reportPath: invocation.options.reportPath,\n });\n }\n\n public async run(input: RenderedProject): Promise<ValidatedProjectPlan> {\n const rendered = renderedProject(input);\n this.validateConfiguration(rendered);\n\n const stylesheetPath = rendered.analyzed.manifest.invocation.options.stylesheetPath;\n const reportPath = rendered.analyzed.manifest.invocation.options.reportPath;\n const invocation = rendered.analyzed.manifest.invocation;\n await this.prevalidate(invocation);\n await validateMigrationPaths({ templates: rendered.files, stylesheetPath, reportPath });\n\n const files: FileMigrationPlan[] = [];\n for (const [index, renderedFile] of rendered.files.entries()) {\n const template = rendered.analyzed.templates[index];\n if (template === undefined) {\n throw new MigrationApplicationError(\n 'internal-invariant',\n 'Rendered project files must match its analyzed templates one-to-one and in the same order.',\n );\n }\n files.push(await this.templateValidator.validate(template, renderedFile));\n }\n\n let stylesheetArtifact: PlannedOutputArtifact | undefined;\n let stylesheet: StylesheetMigrationResult | undefined;\n if (rendered.session.target === 'css' && stylesheetPath !== undefined) {\n const canonicalStylesheetPath = path.resolve(stylesheetPath);\n const references = await this.cssReferences.collect(rendered, files);\n stylesheetArtifact = await this.stylesheetPlanner.plan(\n canonicalStylesheetPath,\n rendered.session.rules,\n references,\n );\n stylesheet = {\n path: canonicalStylesheetPath,\n change: stylesheetChange(stylesheetArtifact),\n };\n }\n\n const plan = migrationPlan({\n target: rendered.session.target,\n files: files.map(item => item.file),\n artifacts: [\n ...files.flatMap(item => (item.artifact === undefined ? [] : [item.artifact])),\n ...(stylesheetArtifact === undefined ? [] : [stylesheetArtifact]),\n ],\n });\n await validateMigrationPaths({ templates: plan.files, stylesheetPath, reportPath });\n\n return validatedProjectPlan({ rendered, plan, ...(stylesheet === undefined ? {} : { stylesheet }) });\n }\n\n private validateConfiguration(rendered: RenderedProject): void {\n const stylesheetPath = rendered.analyzed.manifest.invocation.options.stylesheetPath;\n if (rendered.target === 'css' && stylesheetPath === undefined) {\n throw new MigrationApplicationError('invalid-configuration', '--target css requires --stylesheet <path>.');\n }\n if (rendered.target === 'tailwind' && stylesheetPath !== undefined) {\n throw new MigrationApplicationError('invalid-configuration', '--stylesheet can only be used with --target css.', [\n stylesheetPath,\n ]);\n }\n }\n}\n\nfunction stylesheetChange(artifact: PlannedOutputArtifact | undefined): StylesheetMigrationResult['change'] {\n if (artifact === undefined) return 'unchanged';\n if (artifact.original.status === 'absent') return 'created';\n if (artifact.proposed.status === 'absent') return 'removed';\n return 'updated';\n}\n","import * as path from 'node:path';\nimport { fileMigrationResult, type FileMigrationResult } from './file-migration-result';\n\nexport type ArtifactState = { readonly status: 'absent' } | { readonly status: 'present'; readonly contents: string };\n\nexport interface PlannedOutputArtifact {\n readonly kind: 'template' | 'stylesheet';\n readonly path: string;\n readonly original: ArtifactState;\n readonly proposed: ArtifactState;\n}\n\nexport interface FileMigrationPlan {\n readonly file: FileMigrationResult;\n readonly artifact?: PlannedOutputArtifact;\n}\n\nexport interface MigrationPlan {\n readonly target: 'css' | 'tailwind';\n readonly files: readonly FileMigrationResult[];\n readonly artifacts: readonly PlannedOutputArtifact[];\n}\n\nexport function plannedOutputArtifact(artifact: PlannedOutputArtifact): PlannedOutputArtifact {\n if (!path.isAbsolute(artifact.path)) {\n throw new Error(`Planned artifact paths must be absolute: ${artifact.path}`);\n }\n if (artifact.kind === 'template' && artifact.proposed.status === 'absent') {\n throw new Error('Planned template artifacts must have a present proposed state.');\n }\n if (sameState(artifact.original, artifact.proposed)) {\n throw new Error('Planned artifacts require changed states.');\n }\n\n return Object.freeze({\n kind: artifact.kind,\n path: path.resolve(artifact.path),\n original: artifactState(artifact.original),\n proposed: artifactState(artifact.proposed),\n });\n}\n\nexport function fileMigrationPlan(plan: FileMigrationPlan): FileMigrationPlan {\n return Object.freeze({\n file: fileMigrationResult(plan.file),\n ...(plan.artifact ? { artifact: plannedOutputArtifact(plan.artifact) } : {}),\n });\n}\n\nexport function migrationPlan(plan: MigrationPlan): MigrationPlan {\n return Object.freeze({\n target: plan.target,\n files: Object.freeze(plan.files.map(file => fileMigrationResult(file))),\n artifacts: Object.freeze(plan.artifacts.map(artifact => plannedOutputArtifact(artifact))),\n });\n}\n\nfunction artifactState(state: ArtifactState): ArtifactState {\n return Object.freeze(state.status === 'absent' ? { status: 'absent' as const } : { ...state });\n}\n\nfunction sameState(left: ArtifactState, right: ArtifactState): boolean {\n if (left.status !== right.status) return false;\n if (left.status === 'absent') return true;\n return right.status === 'present' && left.contents === right.contents;\n}\n","import type { ConversionResult } from '../analyzer/conversion-result';\n\nexport interface FileMigrationOptions {\n readonly responsiveImages?: boolean;\n}\n\nexport interface FileMigrationResult {\n readonly inputPath: string;\n readonly outputPath: string;\n readonly changed: boolean;\n readonly results: readonly ConversionResult[];\n}\n\nexport function fileMigrationResult(result: FileMigrationResult): FileMigrationResult {\n return Object.freeze({\n inputPath: result.inputPath,\n outputPath: result.outputPath,\n changed: result.changed,\n results: freezeValue([...result.results]),\n });\n}\n\nfunction freezeValue<T>(value: T): T {\n if (Array.isArray(value)) {\n return Object.freeze(value.map(item => freezeValue(item))) as T;\n }\n if (value !== null && typeof value === 'object') {\n return Object.freeze(Object.fromEntries(Object.entries(value).map(([key, item]) => [key, freezeValue(item)]))) as T;\n }\n return value;\n}\n","import { lstat, stat } from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { MigrationApplicationError } from './migration-application.error';\n\nexport type PathApi = typeof path.posix;\n\nexport interface MigrationPathValidationRequest {\n readonly templates: readonly { readonly inputPath: string; readonly outputPath: string }[];\n readonly stylesheetPath?: string;\n readonly reportPath?: string;\n}\n\nexport interface StylesheetRootTopologyRequest {\n readonly stylesheetPath?: string;\n readonly stylesheetPathInput?: string;\n readonly inputPath: string;\n readonly outputPath: string;\n readonly reportPath?: string;\n}\n\ninterface PathClaim {\n readonly path: string;\n readonly kind: 'template-input' | 'template-output' | 'stylesheet' | 'report';\n readonly templateIndex?: number;\n}\n\ninterface FileSystemIdentity {\n readonly device: string;\n readonly inode: string;\n}\n\ninterface ExistingPathPrefix {\n readonly identity: FileSystemIdentity;\n readonly suffix: readonly string[];\n}\n\ninterface ObservedPath {\n readonly exactIdentity?: FileSystemIdentity;\n readonly prefixes: readonly ExistingPathPrefix[];\n}\n\ntype PathRelationship = 'equivalent' | 'ancestor' | 'descendant' | 'distinct';\ntype PathObserver = (candidate: string) => Promise<ObservedPath>;\n\nexport async function validateMigrationPaths(\n request: MigrationPathValidationRequest,\n pathApi: PathApi = path,\n): Promise<void> {\n const claims = normalizedClaims(request, pathApi);\n await validateCollisions(claims, pathApi);\n\n const destinations = claims.filter(claim => claim.kind !== 'template-input');\n for (const destination of destinations) {\n await validateDestination(destination.path);\n }\n}\n\nexport async function validateStylesheetRootTopology(\n request: StylesheetRootTopologyRequest,\n pathApi: PathApi = path,\n): Promise<void> {\n if (request.stylesheetPath === undefined) return;\n const stylesheetPath = pathApi.resolve(request.stylesheetPath);\n const templateRoots = [request.inputPath, request.outputPath].map(claim => pathApi.resolve(claim));\n const reportPath = request.reportPath === undefined ? undefined : pathApi.resolve(request.reportPath);\n const exactCollision = (\n await Promise.all(\n [...templateRoots, reportPath].map(claim =>\n claim === undefined ? Promise.resolve(false) : pathsEquivalentOnFileSystem(stylesheetPath, claim, pathApi),\n ),\n )\n ).some(Boolean);\n const reportHierarchyCollision =\n reportPath !== undefined && (await pathsOverlapOnFileSystem(stylesheetPath, reportPath, pathApi));\n if (exactCollision || reportHierarchyCollision) {\n const collisionPaths =\n reportHierarchyCollision &&\n reportPath !== undefined &&\n !(await pathsEquivalentOnFileSystem(stylesheetPath, reportPath, pathApi))\n ? [stylesheetPath, reportPath]\n : [stylesheetPath];\n throw new MigrationApplicationError(\n 'path-collision',\n `Stylesheet path collides with another migration path: ${request.stylesheetPathInput ?? request.stylesheetPath}`,\n collisionPaths,\n );\n }\n\n let stylesheetStat: Awaited<ReturnType<typeof lstat>>;\n try {\n stylesheetStat = await lstat(stylesheetPath);\n } catch (error: unknown) {\n if (isEnoent(error)) return;\n throw error;\n }\n const sourcePath = request.stylesheetPathInput ?? request.stylesheetPath;\n if (stylesheetStat.isSymbolicLink()) {\n throw new MigrationApplicationError(\n 'unsupported-path-type',\n `Stylesheet path must not be a symbolic link: ${sourcePath}`,\n [stylesheetPath],\n );\n }\n if (!stylesheetStat.isFile()) {\n throw new MigrationApplicationError(\n 'unsupported-path-type',\n `Stylesheet path must be a regular file: ${sourcePath}`,\n [stylesheetPath],\n );\n }\n}\n\nfunction normalizedClaims(request: MigrationPathValidationRequest, pathApi: PathApi): readonly PathClaim[] {\n return [\n ...request.templates.flatMap((template, templateIndex) => [\n { path: pathApi.resolve(template.inputPath), kind: 'template-input' as const, templateIndex },\n { path: pathApi.resolve(template.outputPath), kind: 'template-output' as const, templateIndex },\n ]),\n ...(request.stylesheetPath ? [{ path: pathApi.resolve(request.stylesheetPath), kind: 'stylesheet' as const }] : []),\n ...(request.reportPath ? [{ path: pathApi.resolve(request.reportPath), kind: 'report' as const }] : []),\n ];\n}\n\nasync function validateCollisions(claims: readonly PathClaim[], pathApi: PathApi): Promise<void> {\n const observations = new Map<string, Promise<ObservedPath>>();\n const observe: PathObserver = candidate => {\n const normalized = pathApi.resolve(candidate);\n const existing = observations.get(normalized);\n if (existing) return existing;\n const pending = observePath(normalized, pathApi);\n observations.set(normalized, pending);\n return pending;\n };\n\n for (let leftIndex = 0; leftIndex < claims.length; leftIndex++) {\n const left = claims[leftIndex];\n if (!left) continue;\n for (let rightIndex = leftIndex + 1; rightIndex < claims.length; rightIndex++) {\n const right = claims[rightIndex];\n if (!right) continue;\n const relationship = await fileSystemPathRelationship(left.path, right.path, pathApi, observe);\n if (relationship === 'distinct' || isIntentionalInPlacePair(left, right, pathApi)) continue;\n\n const collisionPaths = relationship === 'equivalent' ? [left.path] : [left.path, right.path];\n throw new MigrationApplicationError(\n 'path-collision',\n `Migration paths collide: ${collisionPaths.join(' and ')}`,\n collisionPaths,\n );\n }\n }\n}\n\nfunction isIntentionalInPlacePair(left: PathClaim, right: PathClaim, pathApi: PathApi): boolean {\n return (\n pathsEquivalent(left.path, right.path, pathApi) &&\n left.templateIndex !== undefined &&\n left.templateIndex === right.templateIndex &&\n left.kind !== right.kind &&\n left.kind.startsWith('template-') &&\n right.kind.startsWith('template-')\n );\n}\n\nexport function pathsOverlap(left: string, right: string, pathApi: PathApi = path): boolean {\n const normalizedLeft = pathApi.resolve(left);\n const normalizedRight = pathApi.resolve(right);\n return (\n normalizedPathsEquivalent(pathApi, normalizedLeft, normalizedRight) ||\n isAncestor(pathApi, normalizedLeft, normalizedRight) ||\n isAncestor(pathApi, normalizedRight, normalizedLeft)\n );\n}\n\nexport function pathsEquivalent(left: string, right: string, pathApi: PathApi = path): boolean {\n return normalizedPathsEquivalent(pathApi, pathApi.resolve(left), pathApi.resolve(right));\n}\n\nexport async function pathsEquivalentOnFileSystem(\n left: string,\n right: string,\n pathApi: PathApi = path,\n): Promise<boolean> {\n return (await fileSystemPathRelationship(left, right, pathApi)) === 'equivalent';\n}\n\nexport async function pathsOverlapOnFileSystem(left: string, right: string, pathApi: PathApi = path): Promise<boolean> {\n return (await fileSystemPathRelationship(left, right, pathApi)) !== 'distinct';\n}\n\nfunction normalizedPathsEquivalent(pathApi: PathApi, left: string, right: string): boolean {\n return pathApi.relative(left, right) === '';\n}\n\nfunction isAncestor(pathApi: PathApi, ancestor: string, descendant: string): boolean {\n const relative = pathApi.relative(ancestor, descendant);\n return (\n relative !== '' && relative !== '..' && !relative.startsWith(`..${pathApi.sep}`) && !pathApi.isAbsolute(relative)\n );\n}\n\nasync function fileSystemPathRelationship(\n left: string,\n right: string,\n pathApi: PathApi,\n observe: PathObserver = candidate => observePath(candidate, pathApi),\n): Promise<PathRelationship> {\n const normalizedLeft = pathApi.resolve(left);\n const normalizedRight = pathApi.resolve(right);\n if (normalizedPathsEquivalent(pathApi, normalizedLeft, normalizedRight)) return 'equivalent';\n if (isAncestor(pathApi, normalizedLeft, normalizedRight)) return 'ancestor';\n if (isAncestor(pathApi, normalizedRight, normalizedLeft)) return 'descendant';\n\n const [observedLeft, observedRight] = await Promise.all([observe(normalizedLeft), observe(normalizedRight)]);\n if (observedLeft.exactIdentity && observedRight.exactIdentity) {\n if (sameIdentity(observedLeft.exactIdentity, observedRight.exactIdentity)) return 'equivalent';\n if (hasIdentityBelow(observedRight, observedLeft.exactIdentity)) return 'ancestor';\n if (hasIdentityBelow(observedLeft, observedRight.exactIdentity)) return 'descendant';\n return 'distinct';\n }\n\n return relationshipThroughExistingPrefixes(observedLeft, observedRight);\n}\n\nasync function observePath(candidate: string, pathApi: PathApi): Promise<ObservedPath> {\n const prefixes: ExistingPathPrefix[] = [];\n const suffix: string[] = [];\n let current = candidate;\n let exactIdentity: FileSystemIdentity | undefined;\n\n while (true) {\n try {\n const currentStat = await stat(current, { bigint: true });\n const currentIdentity = identity(currentStat);\n if (suffix.length === 0) exactIdentity = currentIdentity;\n prefixes.push({ identity: currentIdentity, suffix: [...suffix] });\n } catch (error: unknown) {\n if (!isMissingPath(error)) throw error;\n }\n\n const parent = pathApi.dirname(current);\n if (parent === current) break;\n suffix.unshift(pathApi.basename(current));\n current = parent;\n }\n\n return { ...(exactIdentity ? { exactIdentity } : {}), prefixes };\n}\n\nfunction relationshipThroughExistingPrefixes(left: ObservedPath, right: ObservedPath): PathRelationship {\n for (const leftPrefix of left.prefixes) {\n for (const rightPrefix of right.prefixes) {\n if (!sameIdentity(leftPrefix.identity, rightPrefix.identity)) continue;\n const relationship = suffixRelationship(leftPrefix.suffix, rightPrefix.suffix);\n if (relationship !== 'distinct') return relationship;\n }\n }\n return 'distinct';\n}\n\nfunction hasIdentityBelow(observed: ObservedPath, candidate: FileSystemIdentity): boolean {\n return observed.prefixes.some(prefix => prefix.suffix.length > 0 && sameIdentity(prefix.identity, candidate));\n}\n\nfunction suffixRelationship(left: readonly string[], right: readonly string[]): PathRelationship {\n const normalizedLeft = left.map(portablePathSegment);\n const normalizedRight = right.map(portablePathSegment);\n const sharedLength = Math.min(normalizedLeft.length, normalizedRight.length);\n for (let index = 0; index < sharedLength; index++) {\n if (normalizedLeft[index] !== normalizedRight[index]) return 'distinct';\n }\n if (normalizedLeft.length === normalizedRight.length) return 'equivalent';\n return normalizedLeft.length < normalizedRight.length ? 'ancestor' : 'descendant';\n}\n\nfunction portablePathSegment(value: string): string {\n return value.normalize('NFC').toLowerCase();\n}\n\nfunction identity(value: { readonly dev: number | bigint; readonly ino: number | bigint }): FileSystemIdentity {\n return { device: String(value.dev), inode: String(value.ino) };\n}\n\nfunction sameIdentity(left: FileSystemIdentity, right: FileSystemIdentity): boolean {\n return left.device === right.device && left.inode === right.inode;\n}\n\nasync function validateDestination(destination: string): Promise<void> {\n let stat: Awaited<ReturnType<typeof lstat>>;\n try {\n stat = await lstat(destination);\n } catch (error: unknown) {\n if (isEnoent(error)) return;\n throw error;\n }\n\n if (stat.isSymbolicLink()) {\n throw new MigrationApplicationError(\n 'unsupported-path-type',\n `Migration destination must not be a symbolic link: ${destination}`,\n [destination],\n );\n }\n if (!stat.isFile()) {\n throw new MigrationApplicationError(\n 'unsupported-path-type',\n `Migration destination must be a regular file: ${destination}`,\n [destination],\n );\n }\n}\n\nfunction isEnoent(error: unknown): error is NodeJS.ErrnoException {\n return typeof error === 'object' && error !== null && 'code' in error && error.code === 'ENOENT';\n}\n\nfunction isMissingPath(error: unknown): error is NodeJS.ErrnoException {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'code' in error &&\n (error.code === 'ENOENT' || error.code === 'ENOTDIR')\n );\n}\n","import { lstat, readFile } from 'node:fs/promises';\nimport * as path from 'node:path';\nimport type { OwnedCssRule } from '../adapter/css/css-artifact.model';\nimport { CssStylesheetError } from '../adapter/css/stylesheet/css-stylesheet.error';\nimport type { OwnedCssReferences } from '../adapter/css/stylesheet/owned-stylesheet.merger';\nimport { MigrationApplicationError } from './migration-application.error';\nimport { plannedOutputArtifact, type ArtifactState, type PlannedOutputArtifact } from './migration-plan';\nimport { mergeStylesheetContents } from './stylesheet-contents';\n\ninterface StylesheetPlannerFileSystem {\n readonly readFile: (path: string) => Promise<string>;\n readonly lstat: (path: string) => ReturnType<typeof lstat>;\n}\n\nconst nodeFileSystem: StylesheetPlannerFileSystem = {\n readFile: target => readFile(target, 'utf8'),\n lstat,\n};\n\nexport class StylesheetPlanner {\n constructor(private readonly fileSystem: StylesheetPlannerFileSystem = nodeFileSystem) {}\n\n async plan(\n stylesheetPath: string,\n rules: readonly OwnedCssRule[],\n references: ReadonlySet<string> | OwnedCssReferences = new Set(rules.map(rule => rule.className)),\n ): Promise<PlannedOutputArtifact | undefined> {\n const outputPath = path.resolve(stylesheetPath);\n const original = await this.originalState(outputPath);\n const existing = original.status === 'present' ? original.contents : '';\n\n let merged: ReturnType<typeof mergeStylesheetContents>;\n try {\n merged = mergeStylesheetContents(existing, rules, references);\n } catch (error: unknown) {\n if (error instanceof CssStylesheetError) {\n throw new MigrationApplicationError(\n 'stylesheet-ownership-invalid',\n `Cannot safely update stylesheet ownership: ${outputPath}`,\n [outputPath],\n { cause: error },\n );\n }\n throw error;\n }\n\n const proposed = proposedState(original, merged.changed, merged.output);\n if (sameState(original, proposed)) return undefined;\n\n return plannedOutputArtifact({ kind: 'stylesheet', path: outputPath, original, proposed });\n }\n\n private async originalState(outputPath: string): Promise<ArtifactState> {\n let stat: Awaited<ReturnType<typeof lstat>>;\n try {\n stat = await this.fileSystem.lstat(outputPath);\n } catch (error: unknown) {\n if (isEnoent(error)) return { status: 'absent' };\n throw error;\n }\n\n if (stat.isSymbolicLink()) {\n throw new MigrationApplicationError(\n 'unsupported-path-type',\n `Stylesheet path must not be a symbolic link: ${outputPath}`,\n [outputPath],\n );\n }\n if (!stat.isFile()) {\n throw new MigrationApplicationError(\n 'unsupported-path-type',\n `Stylesheet path must be a regular file: ${outputPath}`,\n [outputPath],\n );\n }\n\n return { status: 'present', contents: await this.fileSystem.readFile(outputPath) };\n }\n}\n\nfunction proposedState(original: ArtifactState, changed: boolean, output: string): ArtifactState {\n if (output === '' && (original.status === 'absent' || changed)) return { status: 'absent' };\n return { status: 'present', contents: output };\n}\n\nfunction sameState(left: ArtifactState, right: ArtifactState): boolean {\n if (left.status !== right.status) return false;\n if (left.status === 'absent') return true;\n return right.status === 'present' && left.contents === right.contents;\n}\n\nfunction isEnoent(error: unknown): error is NodeJS.ErrnoException {\n return typeof error === 'object' && error !== null && 'code' in error && error.code === 'ENOENT';\n}\n","export type CssStylesheetErrorCode =\n | 'invalid-artifact'\n | 'invalid-css-lexeme'\n | 'unterminated-css-token'\n | 'unknown-ownership-marker'\n | 'unsupported-ownership-schema'\n | 'malformed-ownership-block'\n | 'ownership-rule-mismatch';\n\nexport class CssStylesheetError extends Error {\n constructor(\n readonly code: CssStylesheetErrorCode,\n message: string,\n ) {\n super(message);\n this.name = 'CssStylesheetError';\n }\n}\n","import { CssStylesheetError } from './css-stylesheet.error';\n\nexport interface CssSourceRange {\n readonly start: number;\n readonly end: number;\n}\n\nexport interface CssCommentToken extends CssSourceRange {\n readonly content: string;\n}\n\ntype ScannerState = 'normal' | 'single-quote' | 'double-quote' | 'comment';\n\nfunction cssNewlineEnd(source: string, start: number): number | undefined {\n const codeUnit = source[start];\n if (codeUnit === '\\r') return source[start + 1] === '\\n' ? start + 1 : start;\n return codeUnit === '\\n' || codeUnit === '\\f' ? start : undefined;\n}\n\nfunction isHexDigit(codeUnit: string | undefined): boolean {\n return codeUnit !== undefined && /^[0-9a-f]$/iu.test(codeUnit);\n}\n\nfunction consumeCssEscape(source: string, backslash: number): number | undefined {\n let index = backslash + 1;\n if (cssNewlineEnd(source, index) !== undefined) return undefined;\n if (!isHexDigit(source[index])) return index < source.length ? index : backslash;\n\n let hexDigits = 0;\n while (hexDigits < 6 && isHexDigit(source[index])) {\n index += 1;\n hexDigits += 1;\n }\n\n const newlineEnd = cssNewlineEnd(source, index);\n if (newlineEnd !== undefined) return newlineEnd;\n if (source[index] === ' ' || source[index] === '\\t') return index;\n return index - 1;\n}\n\nexport function scanCssComments(source: string): readonly CssCommentToken[] {\n const comments: CssCommentToken[] = [];\n let state: ScannerState = 'normal';\n let commentStart = -1;\n\n for (let index = 0; index < source.length; index += 1) {\n const codeUnit = source[index];\n\n if (state === 'normal') {\n if (codeUnit === '\\\\') {\n index = consumeCssEscape(source, index) ?? index;\n } else if (codeUnit === \"'\") {\n state = 'single-quote';\n } else if (codeUnit === '\"') {\n state = 'double-quote';\n } else if (codeUnit === '/' && source[index + 1] === '*') {\n state = 'comment';\n commentStart = index;\n index += 1;\n }\n continue;\n }\n\n if (state === 'comment') {\n if (codeUnit === '*' && source[index + 1] === '/') {\n comments.push({\n start: commentStart,\n end: index + 2,\n content: source.slice(commentStart + 2, index),\n });\n state = 'normal';\n index += 1;\n }\n continue;\n }\n\n if (codeUnit === '\\\\') {\n const newlineEnd = cssNewlineEnd(source, index + 1);\n index = newlineEnd ?? consumeCssEscape(source, index) ?? index;\n continue;\n }\n\n if ((state === 'single-quote' && codeUnit === \"'\") || (state === 'double-quote' && codeUnit === '\"')) {\n state = 'normal';\n }\n }\n\n if (state === 'comment') {\n throw new CssStylesheetError('unterminated-css-token', 'Unterminated CSS comment');\n }\n if (state === 'single-quote') {\n throw new CssStylesheetError('unterminated-css-token', 'Unterminated CSS single-quoted string');\n }\n if (state === 'double-quote') {\n throw new CssStylesheetError('unterminated-css-token', 'Unterminated CSS double-quoted string');\n }\n\n return comments;\n}\n","import type { CssStylesheetErrorCode } from './css-stylesheet.error';\nimport { scanCssComments, type CssCommentToken, type CssSourceRange } from './css-comment.scanner';\nimport type { CssNewline } from './owned-css-block.serializer';\n\nconst MARKER_PREFIX = 'flex-layout-codemod:';\nconst START_MARKER_PATTERN = /^flex-layout-codemod:start schema=([0-9]+)$/;\nconst RULE_MARKER_PATTERN = /^flex-layout-codemod:rule id=([a-f0-9]{64})$/;\nconst END_MARKER_PATTERN = /^flex-layout-codemod:end$/;\n\ninterface OwnedRuleMarker {\n readonly token: CssCommentToken;\n readonly id: string;\n}\n\nexport type OwnedCssBlockParseResult =\n | { readonly status: 'absent' }\n | { readonly status: 'found'; readonly range: CssSourceRange; readonly newline: CssNewline }\n | { readonly status: 'invalid'; readonly code: CssStylesheetErrorCode; readonly reason: string };\n\nfunction invalid(code: CssStylesheetErrorCode, reason: string): OwnedCssBlockParseResult {\n return { status: 'invalid', code, reason };\n}\n\nfunction firstNewline(source: string): CssNewline {\n const match = /\\r\\n|\\n/.exec(source);\n return match?.[0] === '\\r\\n' ? '\\r\\n' : '\\n';\n}\n\nfunction isCssWhitespace(codeUnit: string | undefined): boolean {\n return codeUnit === ' ' || codeUnit === '\\t' || codeUnit === '\\n' || codeUnit === '\\r' || codeUnit === '\\f';\n}\n\nfunction ruleSelectorMatches(source: string, marker: OwnedRuleMarker): boolean {\n let selectorStart = marker.token.end;\n while (isCssWhitespace(source[selectorStart])) selectorStart += 1;\n\n const selector = `.flm-${marker.id}`;\n if (!source.startsWith(selector, selectorStart)) return false;\n\n const boundary = source[selectorStart + selector.length];\n return boundary === '{' || isCssWhitespace(boundary);\n}\n\nexport function parseOwnedCssBlock(source: string): OwnedCssBlockParseResult {\n let start: CssCommentToken | undefined;\n let end: CssCommentToken | undefined;\n let regionOpen = false;\n const rules: OwnedRuleMarker[] = [];\n\n for (const token of scanCssComments(source)) {\n const marker = token.content.trim();\n if (!marker.startsWith(MARKER_PREFIX)) continue;\n\n const startMatch = START_MARKER_PATTERN.exec(marker);\n if (startMatch !== null) {\n const schema = startMatch[1];\n if (schema !== '1') {\n return invalid('unsupported-ownership-schema', `Unsupported flex-layout-codemod ownership schema: ${schema}`);\n }\n if (regionOpen) {\n return invalid('malformed-ownership-block', 'Nested flex-layout-codemod start marker');\n }\n if (start !== undefined) {\n return invalid('malformed-ownership-block', 'Duplicate flex-layout-codemod start marker');\n }\n if (end !== undefined) {\n return invalid('malformed-ownership-block', 'Flex-layout-codemod end marker appears before start marker');\n }\n\n start = token;\n regionOpen = true;\n continue;\n }\n\n const ruleMatch = RULE_MARKER_PATTERN.exec(marker);\n if (ruleMatch !== null) {\n if (!regionOpen) {\n return invalid('malformed-ownership-block', 'Flex-layout-codemod rule marker appears outside owned block');\n }\n\n rules.push({ token, id: ruleMatch[1] ?? '' });\n continue;\n }\n\n if (END_MARKER_PATTERN.test(marker)) {\n if (end !== undefined) {\n return invalid('malformed-ownership-block', 'Duplicate flex-layout-codemod end marker');\n }\n\n end = token;\n regionOpen = false;\n continue;\n }\n\n if (marker === `${MARKER_PREFIX}rule` || marker.startsWith(`${MARKER_PREFIX}rule `)) {\n return invalid('malformed-ownership-block', 'Malformed flex-layout-codemod rule marker');\n }\n\n return invalid('unknown-ownership-marker', 'Unknown flex-layout-codemod ownership marker');\n }\n\n if (start === undefined && end === undefined) return { status: 'absent' };\n if (start === undefined) {\n return invalid('malformed-ownership-block', 'Flex-layout-codemod end marker has no matching start marker');\n }\n if (end === undefined) {\n return invalid('malformed-ownership-block', 'Flex-layout-codemod start marker has no matching end marker');\n }\n\n for (const rule of rules) {\n if (!ruleSelectorMatches(source, rule)) {\n return invalid('ownership-rule-mismatch', 'Flex-layout-codemod rule ID does not match following selector');\n }\n }\n\n const internalSource = source.slice(start.end, end.start);\n return {\n status: 'found',\n range: { start: start.start, end: end.end },\n newline: /\\r\\n|\\n/.test(internalSource) ? firstNewline(internalSource) : firstNewline(source),\n };\n}\n","import type { CssSemanticFamily, OwnedCssRule } from '../css-artifact.model';\nimport { CssStylesheetError } from './css-stylesheet.error';\n\nconst ID = /^(?:[a-f0-9]{64})$(?![\\s\\S])/;\nconst PROPERTY = /^(?:-?[a-z][a-z0-9-]*)$(?![\\s\\S])/;\nconst FORBIDDEN_VALUE = /[\\0\\r\\n{};]|\\/\\*|\\*\\//;\nconst FAMILIES = new Set<CssSemanticFamily>([\n 'layout',\n 'layout-align',\n 'layout-gap',\n 'flex-item',\n 'flex-align',\n 'flex-fill',\n 'flex-offset',\n 'flex-order',\n]);\n\ntype ArtifactRecord = Record<string, unknown>;\n\nfunction isArtifactRecord(value: unknown): value is ArtifactRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction invalidArtifact(message: string): never {\n throw new CssStylesheetError('invalid-artifact', message);\n}\n\nfunction invalidLexeme(message: string): never {\n throw new CssStylesheetError('invalid-css-lexeme', message);\n}\n\nfunction validateDeclarations(value: unknown): void {\n if (!Array.isArray(value) || value.length === 0) {\n invalidArtifact('CSS declarations must be a nonempty array');\n }\n\n const properties = new Set<string>();\n for (const declaration of value) {\n if (!isArtifactRecord(declaration)) {\n invalidArtifact('CSS declaration must be an object');\n }\n\n const { property, value: declarationValue } = declaration;\n if (typeof property !== 'string' || !PROPERTY.test(property)) {\n invalidLexeme('CSS declaration property is unsafe');\n }\n if (properties.has(property)) {\n invalidArtifact('CSS declaration properties must be unique');\n }\n properties.add(property);\n\n if (\n typeof declarationValue !== 'string' ||\n declarationValue.length === 0 ||\n declarationValue.trim() !== declarationValue ||\n FORBIDDEN_VALUE.test(declarationValue)\n ) {\n invalidLexeme('CSS declaration value is unsafe');\n }\n }\n}\n\nfunction validateMedia(value: unknown): void {\n if (!isArtifactRecord(value)) {\n invalidArtifact('CSS media must be an object');\n }\n\n const { type, clauses } = value;\n if (type !== 'screen' && type !== 'print') {\n invalidArtifact('CSS media type is invalid');\n }\n if (!Array.isArray(clauses) || clauses.length === 0) {\n invalidArtifact('CSS media must contain at least one clause');\n }\n\n for (const clause of clauses) {\n if (!isArtifactRecord(clause)) {\n invalidArtifact('CSS media clause must be an object');\n }\n\n const { min, max, orientation } = clause;\n if (\n (min !== undefined && (typeof min !== 'number' || !Number.isFinite(min))) ||\n (max !== undefined && (typeof max !== 'number' || !Number.isFinite(max)))\n ) {\n invalidArtifact('CSS media bounds must be finite numbers');\n }\n if (min !== undefined && max !== undefined && min > max) {\n invalidArtifact('CSS media minimum must not exceed maximum');\n }\n if (orientation !== undefined && orientation !== 'portrait' && orientation !== 'landscape') {\n invalidArtifact('CSS media orientation is invalid');\n }\n if (type === 'screen' && min === undefined && max === undefined && orientation === undefined) {\n invalidArtifact('CSS screen media clause must contain a feature');\n }\n }\n}\n\nfunction validateContext(value: unknown): void {\n if (!isArtifactRecord(value)) {\n invalidArtifact('CSS rule context must be an object');\n }\n\n const { priority, media } = value;\n if (typeof priority !== 'number' || !Number.isFinite(priority)) {\n invalidArtifact('CSS rule priority must be a finite number');\n }\n if (media === undefined) {\n if (priority !== 0) {\n invalidArtifact('CSS base rule priority must be zero');\n }\n return;\n }\n\n validateMedia(media);\n}\n\nexport function validateOwnedCssRule(rule: OwnedCssRule): void {\n if (!isArtifactRecord(rule)) {\n invalidArtifact('CSS rule must be an object');\n }\n\n const { owner, id, className, family, declarations, context } = rule;\n if (owner !== 'flex-layout-codemod') {\n invalidArtifact('CSS rule owner is invalid');\n }\n if (typeof id !== 'string' || !ID.test(id)) {\n invalidArtifact('CSS rule ID is invalid');\n }\n if (className !== `flm-${id}`) {\n invalidArtifact('CSS rule class name is invalid');\n }\n if (typeof family !== 'string' || !FAMILIES.has(family as CssSemanticFamily)) {\n invalidArtifact('CSS rule family is invalid');\n }\n\n validateDeclarations(declarations);\n validateContext(context);\n}\n","import type { MediaDefinition, MediaRange } from '../../../breakpoint/breakpoint-catalog';\n\nfunction serializeClause(type: MediaDefinition['type'], clause: MediaRange): string {\n const features: string[] = [];\n if (clause.min !== undefined) features.push(`(min-width: ${String(clause.min)}px)`);\n if (clause.max !== undefined) features.push(`(max-width: ${String(clause.max)}px)`);\n if (clause.orientation !== undefined) features.push(`(orientation: ${clause.orientation})`);\n\n return [type, ...features].join(' and ');\n}\n\nexport function serializeCssMedia(media: MediaDefinition): string {\n return media.clauses.map(clause => serializeClause(media.type, clause)).join(', ');\n}\n","import type { OwnedCssRule } from '../css-artifact.model';\nimport type { MediaDefinition } from '../../../breakpoint/breakpoint-catalog';\nimport { validateOwnedCssRule } from './css-artifact.validator';\nimport { CssStylesheetError } from './css-stylesheet.error';\nimport { serializeCssMedia } from './css-media.serializer';\n\nexport type CssNewline = '\\n' | '\\r\\n';\n\ninterface BaseRuleGroup {\n readonly kind: 'base';\n readonly rule: OwnedCssRule;\n}\n\ninterface ResponsiveGroup {\n readonly kind: 'responsive';\n readonly key: string;\n readonly media: MediaDefinition;\n readonly rules: readonly OwnedCssRule[];\n}\n\ntype RuleGroup = BaseRuleGroup | ResponsiveGroup;\n\nfunction validateNewline(newline: CssNewline): void {\n if (newline !== '\\n' && newline !== '\\r\\n') {\n throw new CssStylesheetError('invalid-artifact', 'CSS newline must be LF or CRLF');\n }\n}\n\nfunction mediaGroupKey(rule: OwnedCssRule): string {\n const media = rule.context.media;\n if (media === undefined) throw new CssStylesheetError('invalid-artifact', 'CSS responsive rule media is required');\n\n return JSON.stringify([\n media.type,\n media.clauses.map(clause => [clause.min ?? null, clause.max ?? null, clause.orientation ?? null]),\n rule.context.priority,\n ]);\n}\n\nfunction serializeBaseRule(rule: OwnedCssRule, newline: CssNewline): string {\n return [\n `/* flex-layout-codemod:rule id=${rule.id} */`,\n `.${rule.className} {`,\n ...rule.declarations.map(({ property, value }) => ` ${property}: ${value};`),\n '}',\n ].join(newline);\n}\n\nfunction serializeResponsiveGroup(group: ResponsiveGroup, newline: CssNewline): string {\n const rules = group.rules\n .map(rule =>\n serializeBaseRule(rule, newline)\n .split(newline)\n .map(line => ` ${line}`)\n .join(newline),\n )\n .join(newline);\n\n return [`@media ${serializeCssMedia(group.media)} {`, rules, '}'].join(newline);\n}\n\nexport function serializeCssRules(rules: readonly OwnedCssRule[], newline: CssNewline): string {\n validateNewline(newline);\n rules.forEach(validateOwnedCssRule);\n\n const groups: RuleGroup[] = [];\n for (const rule of rules) {\n if (rule.context.media === undefined) {\n groups.push({ kind: 'base', rule });\n continue;\n }\n\n const key = mediaGroupKey(rule);\n const previous = groups.at(-1);\n if (previous?.kind === 'responsive' && previous.key === key) {\n groups[groups.length - 1] = { ...previous, rules: [...previous.rules, rule] };\n continue;\n }\n\n groups.push({ kind: 'responsive', key, media: rule.context.media, rules: [rule] });\n }\n\n return groups\n .map(group =>\n group.kind === 'responsive' ? serializeResponsiveGroup(group, newline) : serializeBaseRule(group.rule, newline),\n )\n .join(newline);\n}\n","import type { OwnedCssRule } from '../css-artifact.model';\nimport { serializeCssRules, type CssNewline } from './css-rule.serializer';\n\nconst START_MARKER = '/* flex-layout-codemod:start schema=1 */';\nconst END_MARKER = '/* flex-layout-codemod:end */';\n\nexport { type CssNewline } from './css-rule.serializer';\n\nexport function serializeOwnedCssBlock(rules: readonly OwnedCssRule[], newline: CssNewline): string {\n const serializedRules = serializeCssRules(rules, newline);\n if (serializedRules === '') return '';\n\n return [START_MARKER, serializedRules, END_MARKER].join(newline);\n}\n","import type { CssRuleContext, OwnedCssRule } from '../css-artifact.model';\nimport { CssStylesheetError } from './css-stylesheet.error';\nimport { parseOwnedCssBlock } from './owned-css-block.parser';\nimport { serializeOwnedCssBlock, type CssNewline } from './owned-css-block.serializer';\nimport { serializeCssRules } from './css-rule.serializer';\nimport { serializeCssMedia } from './css-media.serializer';\n\nexport interface OwnedStylesheetMergeResult {\n readonly changed: boolean;\n readonly output: string;\n}\n\n/**\n * Template reference authority collected at the invocation boundary.\n * `complete: false` means a dynamic class expression prevented a complete scan.\n * The default merger retains unmatched rules regardless; completeness is not a pruning grant.\n */\nexport interface OwnedCssReferences {\n readonly classNames: ReadonlySet<string>;\n readonly complete: boolean;\n}\n\n/** Resolves a serialized media query from an existing owned block. */\nexport type RetainedMediaContextResolver = (serializedMedia: string) => CssRuleContext | undefined;\n\ninterface ParsedOwnedRule {\n readonly id: string;\n readonly source: string;\n}\n\ninterface ResolvedOwnedRule extends ParsedOwnedRule {\n readonly context: CssRuleContext;\n}\n\ninterface ParsedOwnedRuleGroup {\n readonly serializedMedia?: string;\n readonly rules: readonly ParsedOwnedRule[];\n}\n\nconst START_MARKER = '/* flex-layout-codemod:start schema=1 */';\nconst END_MARKER = '/* flex-layout-codemod:end */';\nconst RULE_MARKER = /^\\/\\* flex-layout-codemod:rule id=([a-f0-9]{64}) \\*\\/$/u;\n\nfunction malformed(message: string): never {\n throw new CssStylesheetError('malformed-ownership-block', message);\n}\n\nfunction parseRule(\n lines: readonly string[],\n index: number,\n indentation: string,\n newline: CssNewline,\n): {\n readonly rule: ParsedOwnedRule;\n readonly nextIndex: number;\n} {\n const marker = lines[index];\n const match = marker?.slice(indentation.length).match(RULE_MARKER);\n if (marker === undefined || !match || !marker.startsWith(indentation)) {\n malformed('Owned CSS rule does not use the schema-1 serialized form');\n }\n const id = match[1];\n if (id === undefined || lines[index + 1] !== `${indentation}.flm-${id} {`) {\n malformed('Owned CSS rule ID does not match its serialized selector');\n }\n\n let end = index + 2;\n while (lines[end] !== `${indentation}}`) {\n if (lines[end] === undefined) malformed('Owned CSS rule is missing its closing brace');\n end += 1;\n }\n\n return {\n rule: { id, source: lines.slice(index, end + 1).join(newline) },\n nextIndex: end + 1,\n };\n}\n\nfunction parseOwnedRuleGroups(source: string): readonly ParsedOwnedRuleGroup[] {\n const parsed = parseOwnedCssBlock(source);\n if (parsed.status === 'invalid') throw new CssStylesheetError(parsed.code, parsed.reason);\n if (parsed.status === 'absent') return [];\n\n const block = source.slice(parsed.range.start, parsed.range.end);\n const internal = block.slice(START_MARKER.length, -END_MARKER.length);\n const lines = internal.split(parsed.newline);\n if (lines[0] === '') lines.shift();\n if (lines.at(-1) === '') lines.pop();\n\n const groups: ParsedOwnedRuleGroup[] = [];\n for (let index = 0; index < lines.length;) {\n const line = lines[index];\n if (line === undefined) malformed('Owned CSS block ended unexpectedly');\n if (line.startsWith('@media ') && line.endsWith(' {')) {\n const start = line;\n index += 1;\n const rules: ParsedOwnedRule[] = [];\n while (lines[index] !== '}') {\n const parsedRule = parseRule(lines, index, ' ', parsed.newline);\n rules.push(parsedRule.rule);\n index = parsedRule.nextIndex;\n }\n if (rules.length === 0) malformed('Owned CSS media group contains no rules');\n groups.push({ serializedMedia: start.slice('@media '.length, -' {'.length), rules });\n index += 1;\n continue;\n }\n\n const parsedRule = parseRule(lines, index, '', parsed.newline);\n groups.push({ rules: [parsedRule.rule] });\n index = parsedRule.nextIndex;\n }\n\n return groups;\n}\n\nfunction retainedRules(\n groups: readonly ParsedOwnedRuleGroup[],\n retainedIds: ReadonlySet<string>,\n resolveRetainedMediaContext: RetainedMediaContextResolver,\n): readonly ResolvedOwnedRule[] {\n const retained: ResolvedOwnedRule[] = [];\n for (const group of groups) {\n const rules = group.rules.filter(rule => retainedIds.has(rule.id));\n if (rules.length === 0) continue;\n const context =\n group.serializedMedia === undefined ? { priority: 0 } : resolveRetainedMediaContext(group.serializedMedia);\n if (context === undefined)\n malformed(`Owned CSS media query is not a registered breakpoint: ${group.serializedMedia}`);\n retained.push(...rules.map(rule => ({ ...rule, context })));\n }\n return retained;\n}\n\nfunction firstDocumentNewline(source: string): CssNewline {\n return /\\r\\n|\\n/.exec(source)?.[0] === '\\r\\n' ? '\\r\\n' : '\\n';\n}\n\nfunction compareCodeUnits(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction compareRuleFragments(left: ResolvedOwnedRule, right: ResolvedOwnedRule): number {\n const mediaOrder = Number(left.context.media !== undefined) - Number(right.context.media !== undefined);\n if (mediaOrder !== 0) return mediaOrder;\n const priorityOrder = right.context.priority - left.context.priority;\n return priorityOrder === 0 ? compareCodeUnits(left.id, right.id) : priorityOrder;\n}\n\nfunction mediaKey(context: CssRuleContext): string | undefined {\n return context.media === undefined\n ? undefined\n : JSON.stringify([context.media.type, context.media.clauses, context.priority]);\n}\n\nfunction parsedIncomingRules(rules: readonly OwnedCssRule[], newline: CssNewline): readonly ResolvedOwnedRule[] {\n return rules.map(rule => {\n const serialized = serializeCssRules([rule], newline);\n if (rule.context.media === undefined) return { id: rule.id, source: serialized, context: rule.context };\n\n const lines = serialized.split(newline);\n const source = lines\n .slice(1, -1)\n .map(line => {\n if (!line.startsWith(' ')) malformed('Incoming CSS rule does not use the serialized form');\n return line;\n })\n .join(newline);\n return { id: rule.id, source, context: rule.context };\n });\n}\n\nfunction renderCanonicalRules(rules: readonly ResolvedOwnedRule[], newline: CssNewline): string {\n const groups: string[] = [];\n for (let index = 0; index < rules.length;) {\n const rule = rules[index];\n if (rule === undefined) break;\n if (rule.context.media === undefined) {\n groups.push(rule.source);\n index += 1;\n continue;\n }\n const key = mediaKey(rule.context);\n const grouped: ResolvedOwnedRule[] = [];\n let candidate = rules[index];\n while (candidate !== undefined && mediaKey(candidate.context) === key) {\n grouped.push(candidate);\n index += 1;\n candidate = rules[index];\n }\n groups.push(\n [`@media ${serializeCssMedia(rule.context.media)} {`, grouped.map(item => item.source).join(newline), '}'].join(\n newline,\n ),\n );\n }\n return groups.join(newline);\n}\n\nfunction normalizeReferences(references?: ReadonlySet<string> | OwnedCssReferences): OwnedCssReferences {\n if (references === undefined) return { classNames: new Set(), complete: false };\n return 'classNames' in references ? references : { classNames: references, complete: true };\n}\n\nexport function mergeOwnedStylesheet(\n existing: string,\n rules: readonly OwnedCssRule[],\n references?: ReadonlySet<string> | OwnedCssReferences,\n resolveRetainedMediaContext: RetainedMediaContextResolver = () => undefined,\n): OwnedStylesheetMergeResult {\n const parsed = parseOwnedCssBlock(existing);\n if (parsed.status === 'invalid') throw new CssStylesheetError(parsed.code, parsed.reason);\n\n const newline = parsed.status === 'found' ? parsed.newline : firstDocumentNewline(existing);\n const referenceState = normalizeReferences(references);\n const groups = parseOwnedRuleGroups(existing);\n const existingIds = new Set(groups.flatMap(group => group.rules.map(rule => rule.id)));\n const incomingIds = new Set(rules.map(rule => rule.id));\n for (const className of referenceState.classNames) {\n const id = className.slice('flm-'.length);\n if (!existingIds.has(id) && !incomingIds.has(id)) {\n throw new CssStylesheetError('ownership-rule-mismatch', `No owned CSS rule matches ${className}`);\n }\n }\n const retainedIds = new Set([...existingIds].filter(id => !incomingIds.has(id)));\n const retained = retainedRules(groups, retainedIds, resolveRetainedMediaContext);\n const incoming = parsedIncomingRules(rules, newline);\n const content = [...retained, ...incoming].sort(compareRuleFragments);\n if (rules.length === 0 && retained.length === groups.flatMap(group => group.rules).length) {\n return Object.freeze({ changed: false, output: existing });\n }\n const serialized = renderCanonicalRules(content, newline);\n const block =\n serialized === ''\n ? ''\n : retained.length === 0\n ? serializeOwnedCssBlock(rules, newline)\n : [START_MARKER, serialized, END_MARKER].join(newline);\n const output =\n parsed.status === 'found'\n ? existing.slice(0, parsed.range.start) + block + existing.slice(parsed.range.end)\n : existing + block;\n\n return Object.freeze({ changed: output !== existing, output });\n}\n","import { allBreakpointDefinitions } from '../breakpoint/breakpoint-catalog';\nimport { cssRuleContext } from '../adapter/css/css-breakpoint.context';\nimport type { OwnedCssRule } from '../adapter/css/css-artifact.model';\nimport {\n mergeOwnedStylesheet,\n type OwnedCssReferences,\n type OwnedStylesheetMergeResult,\n type RetainedMediaContextResolver,\n} from '../adapter/css/stylesheet/owned-stylesheet.merger';\nimport { serializeCssMedia } from '../adapter/css/stylesheet/css-media.serializer';\n\nconst retainedMediaContexts = new Map(\n allBreakpointDefinitions().map(definition => [serializeCssMedia(definition.media), cssRuleContext(definition)]),\n);\n\nconst resolveRetainedMediaContext: RetainedMediaContextResolver = media => retainedMediaContexts.get(media);\n\nexport function mergeStylesheetContents(\n existing: string,\n rules: readonly OwnedCssRule[],\n references: ReadonlySet<string> | OwnedCssReferences = new Set(rules.map(rule => rule.className)),\n): OwnedStylesheetMergeResult {\n return mergeOwnedStylesheet(existing, rules, references, resolveRetainedMediaContext);\n}\n","import * as path from 'node:path';\nimport { fileMigrationResult, type FileMigrationResult } from '../migrator/file-migration-result';\nimport { MigrationApplicationError } from '../migrator/migration-application.error';\nimport { migrationPlan, type MigrationPlan, type PlannedOutputArtifact } from '../migrator/migration-plan';\nimport type { StylesheetMigrationResult } from '../report/migration-report.builder';\nimport { renderedProject, type RenderedProject, type RenderedTemplateFile } from './rendered-project';\n\nexport interface ValidatedProjectPlan {\n readonly rendered: RenderedProject;\n readonly plan: MigrationPlan;\n readonly stylesheet?: StylesheetMigrationResult;\n}\n\nexport function validatedProjectPlan(project: ValidatedProjectPlan): ValidatedProjectPlan {\n const rendered = renderedProject(project.rendered);\n if (rendered.target !== rendered.session.target) {\n throw internalInvariant(\n `Render session finalized for target \"${rendered.session.target}\" but its renderer targets \"${rendered.target}\".`,\n );\n }\n\n const suppliedPlan = migrationPlan(project.plan);\n if (suppliedPlan.target !== rendered.session.target) {\n throw internalInvariant('Validated migration plan target differs from its finalized adapter session target.');\n }\n\n const plan = canonicalPlan(rendered, suppliedPlan);\n const templateArtifacts = validatedTemplateArtifacts(plan.files, plan.artifacts);\n const stylesheet = validatedStylesheet(rendered, plan, templateArtifacts, project.stylesheet);\n\n return Object.freeze({\n rendered,\n plan,\n ...(stylesheet === undefined ? {} : { stylesheet }),\n });\n}\n\nfunction canonicalPlan(rendered: RenderedProject, supplied: MigrationPlan): MigrationPlan {\n if (supplied.files.length !== rendered.files.length) throw fileCongruenceInvariant();\n const files = supplied.files.map((file, index) => {\n const expected = rendered.files[index];\n if (expected === undefined || !samePathPair(expected, file)) throw fileCongruenceInvariant();\n const canonical = fileMigrationResult({\n ...file,\n inputPath: expected.inputPath,\n outputPath: expected.outputPath,\n });\n if (!validResults(expected, canonical)) throw fileCongruenceInvariant();\n return canonical;\n });\n if (new Set(files.map(file => normalizedAbsolutePath(file.outputPath))).size !== files.length) {\n throw fileCongruenceInvariant();\n }\n\n return migrationPlan({ target: supplied.target, files, artifacts: supplied.artifacts });\n}\n\nfunction validResults(rendered: RenderedTemplateFile, planned: FileMigrationResult): boolean {\n if (sameOwnedValue(planned.results, rendered.results)) return true;\n return (\n rendered.edits.length > 0 &&\n planned.changed === false &&\n planned.results.length > 0 &&\n planned.results.every(\n result =>\n result.status === 'parse-error' &&\n result.code === 'generated-template-parse-error' &&\n normalizedAbsolutePath(result.fileName) === normalizedAbsolutePath(rendered.outputPath),\n )\n );\n}\n\nfunction validatedTemplateArtifacts(\n files: readonly FileMigrationResult[],\n artifacts: readonly PlannedOutputArtifact[],\n): readonly PlannedOutputArtifact[] {\n const templateArtifacts = artifacts.filter(artifact => artifact.kind === 'template');\n const changedFiles = files.filter(file => file.changed);\n if (\n templateArtifacts.length !== changedFiles.length ||\n templateArtifacts.some(\n (artifact, index) =>\n artifact.proposed.status !== 'present' ||\n normalizedAbsolutePath(artifact.path) !== normalizedAbsolutePath(changedFiles[index]?.outputPath ?? ''),\n )\n ) {\n throw internalInvariant(\n 'Validated migration plan template artifacts must correspond exactly to changed file outputs in file order.',\n );\n }\n return templateArtifacts;\n}\n\nfunction validatedStylesheet(\n rendered: RenderedProject,\n plan: MigrationPlan,\n templateArtifacts: readonly PlannedOutputArtifact[],\n supplied: StylesheetMigrationResult | undefined,\n): StylesheetMigrationResult | undefined {\n const nonTemplateArtifacts = plan.artifacts.filter(artifact => artifact.kind !== 'template');\n const configuredPath = rendered.analyzed.manifest.invocation.options.stylesheetPath;\n if (rendered.session.target === 'tailwind') {\n if (\n configuredPath !== undefined ||\n supplied !== undefined ||\n nonTemplateArtifacts.length > 0 ||\n !sameArtifactSequence(plan.artifacts, templateArtifacts)\n ) {\n throw internalInvariant('Tailwind migration plans cannot contain stylesheet artifacts or metadata.');\n }\n return undefined;\n }\n\n const stylesheetArtifact = nonTemplateArtifacts.length === 1 ? nonTemplateArtifacts[0] : undefined;\n const canonicalConfiguredPath =\n configuredPath === undefined || configuredPath.trim().length === 0\n ? undefined\n : normalizedAbsolutePath(configuredPath);\n const expectedChange = stylesheetArtifact === undefined ? 'unchanged' : stylesheetChange(stylesheetArtifact);\n const expectedArtifacts = [...templateArtifacts, ...(stylesheetArtifact === undefined ? [] : [stylesheetArtifact])];\n\n if (\n canonicalConfiguredPath !== undefined &&\n (plan.files.some(\n file =>\n normalizedAbsolutePath(file.inputPath) === canonicalConfiguredPath ||\n normalizedAbsolutePath(file.outputPath) === canonicalConfiguredPath,\n ) ||\n templateArtifacts.some(artifact => normalizedAbsolutePath(artifact.path) === canonicalConfiguredPath))\n ) {\n throw internalInvariant(\n 'Configured stylesheet path must not collide with any template input, output, or artifact path.',\n );\n }\n\n if (\n canonicalConfiguredPath === undefined ||\n supplied === undefined ||\n nonTemplateArtifacts.length > 1 ||\n (stylesheetArtifact !== undefined && stylesheetArtifact.kind !== 'stylesheet') ||\n normalizedAbsolutePath(supplied.path) !== canonicalConfiguredPath ||\n (stylesheetArtifact !== undefined && normalizedAbsolutePath(stylesheetArtifact.path) !== canonicalConfiguredPath) ||\n supplied.change !== expectedChange ||\n !sameArtifactSequence(plan.artifacts, expectedArtifacts)\n ) {\n throw internalInvariant(\n 'CSS stylesheet metadata must correspond exactly to its configured path and artifact change state.',\n );\n }\n\n return Object.freeze({ path: canonicalConfiguredPath, change: supplied.change });\n}\n\nfunction stylesheetChange(artifact: PlannedOutputArtifact): StylesheetMigrationResult['change'] {\n if (artifact.original.status === 'absent') return 'created';\n if (artifact.proposed.status === 'absent') return 'removed';\n return 'updated';\n}\n\nfunction sameArtifactSequence(\n left: readonly PlannedOutputArtifact[],\n right: readonly PlannedOutputArtifact[],\n): boolean {\n return left.length === right.length && left.every((artifact, index) => sameArtifact(artifact, right[index]));\n}\n\nfunction sameArtifact(left: PlannedOutputArtifact, right: PlannedOutputArtifact | undefined): boolean {\n return (\n right !== undefined &&\n left.kind === right.kind &&\n normalizedAbsolutePath(left.path) === normalizedAbsolutePath(right.path) &&\n sameOwnedValue(left.original, right.original) &&\n sameOwnedValue(left.proposed, right.proposed)\n );\n}\n\nfunction samePathPair(left: RenderedTemplateFile, right: FileMigrationResult): boolean {\n return (\n normalizedAbsolutePath(left.inputPath) === normalizedAbsolutePath(right.inputPath) &&\n normalizedAbsolutePath(left.outputPath) === normalizedAbsolutePath(right.outputPath)\n );\n}\n\nfunction sameOwnedValue(left: unknown, right: unknown): boolean {\n if (Object.is(left, right)) return true;\n if (Array.isArray(left) || Array.isArray(right)) {\n return (\n Array.isArray(left) &&\n Array.isArray(right) &&\n left.length === right.length &&\n left.every((item, index) => sameOwnedValue(item, right[index]))\n );\n }\n if (!isPlainRecord(left) || !isPlainRecord(right)) return false;\n const keys = Object.keys(left);\n return (\n keys.length === Object.keys(right).length &&\n keys.every(key => Object.hasOwn(right, key) && sameOwnedValue(left[key], right[key]))\n );\n}\n\nfunction isPlainRecord(value: unknown): value is Readonly<Record<string, unknown>> {\n if (value === null || typeof value !== 'object') return false;\n const prototype = Object.getPrototypeOf(value) as unknown;\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction normalizedAbsolutePath(value: string): string {\n return path.normalize(path.resolve(value));\n}\n\nfunction fileCongruenceInvariant(): MigrationApplicationError {\n return internalInvariant(\n 'Validated migration plan files must match rendered files one-to-one and in the same order.',\n );\n}\n\nfunction internalInvariant(message: string): MigrationApplicationError {\n return new MigrationApplicationError('internal-invariant', message);\n}\n","import * as path from 'node:path';\nimport type { OwnedCssReferences } from '../../adapter/css/stylesheet/owned-stylesheet.merger';\nimport {\n nodeDestinationTemplateSource,\n type DestinationTemplateSource,\n} from '../../migrator/destination-template-source';\nimport { MigrationApplicationError } from '../../migrator/migration-application.error';\nimport type { FileMigrationPlan } from '../../migrator/migration-plan';\nimport { AngularTemplateParser } from '../../template/angular-template.parser';\nimport { templateAttributeKeys } from '../../template/template-attribute';\nimport type { TemplateParser } from '../analyze/template-parser.port';\nimport type { RenderedProject } from '../rendered-project';\n\ninterface TemplateReferenceSource {\n readonly contents: string;\n readonly complete: boolean;\n}\n\nexport class CssReferenceCollector {\n constructor(\n private readonly referenceParser: TemplateParser = new AngularTemplateParser(),\n private readonly destinationTemplates: DestinationTemplateSource = nodeDestinationTemplateSource,\n ) {}\n\n public async collect(rendered: RenderedProject, files: readonly FileMigrationPlan[]): Promise<OwnedCssReferences> {\n if (files.length !== rendered.analyzed.templates.length) throw fileCongruenceInvariant();\n\n const destinationSources = new Map<string, Promise<TemplateReferenceSource>>();\n const templates = await Promise.all(\n files.map(async (file, index) => {\n const analyzedTemplate = rendered.analyzed.templates[index];\n if (analyzedTemplate === undefined) throw fileCongruenceInvariant();\n if (file.artifact?.kind === 'template' && file.artifact.proposed.status === 'present') {\n return { contents: file.artifact.proposed.contents, complete: true };\n }\n if (path.resolve(file.file.inputPath) === path.resolve(file.file.outputPath)) {\n return { contents: analyzedTemplate.source, complete: true };\n }\n\n const outputPath = path.normalize(path.resolve(file.file.outputPath));\n const existing = destinationSources.get(outputPath);\n if (existing !== undefined) return existing;\n const pending = this.readDestination(outputPath);\n destinationSources.set(outputPath, pending);\n return pending;\n }),\n );\n\n const classNames = new Set<string>();\n let complete = true;\n for (const template of templates) {\n complete &&= template.complete;\n const parsed = this.referenceParser.parse(template.contents, 'proposed-template.html');\n if (parsed.status === 'parse-error') {\n complete = false;\n continue;\n }\n for (const attribute of parsed.elements.flatMap(element => element.attributes)) {\n const ngClassAuthority = [...templateAttributeKeys(attribute)].some(\n key => key === 'ngclass' || key.startsWith('ngclass.'),\n );\n const literalClass = attribute.name === 'class' && attribute.binding === 'literal';\n const namedClassBinding = attribute.binding === 'property' && attribute.bindingTarget === 'class';\n const dynamicClass =\n attribute.binding === 'property' && (attribute.name === 'class' || attribute.name === 'className');\n if (!literalClass && !namedClassBinding && !dynamicClass && !ngClassAuthority) continue;\n\n if (literalClass || (ngClassAuthority && attribute.binding === 'literal')) {\n for (const className of attribute.value.split(/\\s+/u)) {\n if (isGeneratedCssClassName(className)) classNames.add(className);\n }\n }\n if (namedClassBinding) {\n const className = namedGeneratedClassName(attribute.name);\n if (className !== undefined) classNames.add(className);\n }\n if (\n dynamicClass ||\n ngClassAuthority ||\n `${attribute.value} ${attribute.rawValue}`.includes('{{') ||\n `${attribute.value} ${attribute.rawValue}`.includes('}}')\n ) {\n complete = false;\n }\n }\n }\n\n return Object.freeze({ classNames, complete });\n }\n\n private async readDestination(outputPath: string): Promise<TemplateReferenceSource> {\n try {\n return { contents: await this.destinationTemplates.read(outputPath), complete: true };\n } catch (error: unknown) {\n if (isEnoent(error)) return { contents: '', complete: false };\n throw error;\n }\n }\n}\n\nfunction fileCongruenceInvariant(): MigrationApplicationError {\n return new MigrationApplicationError(\n 'internal-invariant',\n 'Rendered file plans must match analyzed templates one-to-one and in the same order.',\n );\n}\n\nfunction isGeneratedCssClassName(className: string): boolean {\n return /^flm-[a-f0-9]{64}$/u.test(className);\n}\n\nfunction namedGeneratedClassName(name: string): string | undefined {\n return isGeneratedCssClassName(name) ? name : undefined;\n}\n\nfunction isEnoent(error: unknown): error is NodeJS.ErrnoException {\n return typeof error === 'object' && error !== null && 'code' in error && error.code === 'ENOENT';\n}\n","import { readFile } from 'node:fs/promises';\n\nexport interface DestinationTemplateSource {\n read(path: string): Promise<string>;\n}\n\nexport const nodeDestinationTemplateSource: DestinationTemplateSource = Object.freeze({\n read: (path: string) => readFile(path, 'utf8'),\n});\n","import * as path from 'node:path';\nimport type { ConversionResult } from '../../analyzer/conversion-result';\nimport { SourceEditor } from '../../edit/source-editor';\nimport { fileMigrationResult, type FileMigrationResult } from '../../migrator/file-migration-result';\nimport {\n nodeDestinationTemplateSource,\n type DestinationTemplateSource,\n} from '../../migrator/destination-template-source';\nimport {\n fileMigrationPlan,\n plannedOutputArtifact,\n type ArtifactState,\n type FileMigrationPlan,\n} from '../../migrator/migration-plan';\nimport { AngularTemplateParser } from '../../template/angular-template.parser';\nimport type { TemplateParser } from '../analyze/template-parser.port';\nimport type { AnalyzedTemplate } from '../analyzed-project';\nimport type { RenderedTemplateFile } from '../rendered-project';\n\nexport class TemplateProposalValidator {\n constructor(\n private readonly validationParser: TemplateParser = new AngularTemplateParser(),\n private readonly destinationTemplates: DestinationTemplateSource = nodeDestinationTemplateSource,\n ) {}\n\n public async validate(template: AnalyzedTemplate, rendered: RenderedTemplateFile): Promise<FileMigrationPlan> {\n if (template.status === 'parse-error') return planResult(template, rendered, false, rendered.results);\n\n const edited = new SourceEditor().apply(template.source, rendered.edits);\n if (edited.status === 'invalid') {\n throw new Error(\n `Invalid edit plan for ${template.file.inputPath}: ${edited.diagnostics.map(item => item.message).join('; ')}`,\n );\n }\n\n if (edited.output === template.source) return planResult(template, rendered, false, rendered.results);\n\n const reparsed = this.validationParser.parse(edited.output, template.file.outputPath);\n if (reparsed.status === 'parse-error') {\n return planResult(\n template,\n rendered,\n false,\n reparsed.diagnostics.map(diagnostic => ({\n status: 'parse-error' as const,\n fileName: template.file.outputPath,\n code: 'generated-template-parse-error' as const,\n reason: diagnostic.message,\n source: diagnostic.source,\n })),\n );\n }\n\n const original = await originalState(template, this.destinationTemplates);\n const proposed: ArtifactState = { status: 'present', contents: edited.output };\n if (sameState(original, proposed)) return planResult(template, rendered, false, rendered.results);\n\n return fileMigrationPlan({\n file: result(template, rendered, true, rendered.results),\n artifact: plannedOutputArtifact({\n kind: 'template',\n path: path.normalize(path.resolve(template.file.outputPath)),\n original,\n proposed,\n }),\n });\n }\n}\n\nasync function originalState(\n template: Extract<AnalyzedTemplate, { readonly status: 'parsed' }>,\n destinationTemplates: DestinationTemplateSource,\n): Promise<ArtifactState> {\n if (path.resolve(template.file.inputPath) === path.resolve(template.file.outputPath)) {\n return { status: 'present', contents: template.source };\n }\n\n try {\n return { status: 'present', contents: await destinationTemplates.read(template.file.outputPath) };\n } catch (error: unknown) {\n if (isEnoent(error)) return { status: 'absent' };\n throw error;\n }\n}\n\nfunction planResult(\n template: AnalyzedTemplate,\n rendered: RenderedTemplateFile,\n changed: boolean,\n results: readonly ConversionResult[],\n): FileMigrationPlan {\n return fileMigrationPlan({ file: result(template, rendered, changed, results) });\n}\n\nfunction result(\n template: AnalyzedTemplate,\n rendered: RenderedTemplateFile,\n changed: boolean,\n results: readonly ConversionResult[],\n): FileMigrationResult {\n return fileMigrationResult({\n inputPath: template.file.inputPath,\n outputPath: rendered.outputPath,\n changed,\n results,\n });\n}\n\nfunction isEnoent(error: unknown): error is NodeJS.ErrnoException {\n return typeof error === 'object' && error !== null && 'code' in error && error.code === 'ENOENT';\n}\n\nfunction sameState(left: ArtifactState, right: ArtifactState): boolean {\n if (left.status !== right.status) return false;\n if (left.status === 'absent') return true;\n return right.status === 'present' && left.contents === right.contents;\n}\n","import { randomUUID } from 'node:crypto';\nimport { lstat, mkdir, open, rename, rmdir, unlink } from 'node:fs/promises';\nimport { basename, dirname, join } from 'node:path';\n\ninterface AtomicFileIdentity {\n readonly dev: string;\n readonly ino: string;\n}\n\nexport interface AtomicFileStat {\n readonly dev: number | bigint;\n readonly ino: number | bigint;\n isDirectory(): boolean;\n isFile(): boolean;\n isSymbolicLink(): boolean;\n}\n\nexport interface AtomicFileHandle {\n writeFile(contents: string, encoding: BufferEncoding): Promise<void>;\n stat(): Promise<AtomicFileStat>;\n sync(): Promise<void>;\n close(): Promise<void>;\n}\n\nexport interface AtomicFileOperations {\n mkdir(path: string, options?: { readonly recursive?: boolean; readonly mode?: number }): Promise<unknown>;\n open(path: string, flags: 'wx'): Promise<AtomicFileHandle>;\n lstat(path: string): Promise<AtomicFileStat>;\n rename(source: string, destination: string): Promise<void>;\n rmdir(path: string): Promise<void>;\n unlink(path: string): Promise<void>;\n}\n\nconst defaultOperations: AtomicFileOperations = { lstat, mkdir, open, rename, rmdir, unlink };\n\nexport class AtomicFileWriter {\n constructor(private readonly operations: AtomicFileOperations = defaultOperations) {}\n\n async write(targetPath: string, contents: string): Promise<void> {\n const directory = dirname(targetPath);\n const namespacePath = join(directory, `.${basename(targetPath)}.${randomUUID()}.txn`);\n const temporaryPath = join(namespacePath, 'stage');\n\n await this.operations.mkdir(directory, { recursive: true });\n await this.operations.mkdir(namespacePath, { mode: 0o700 });\n const namespaceIdentity = await this.captureNamespaceIdentity(namespacePath, targetPath);\n let temporaryFile: AtomicFileHandle | undefined;\n let temporaryIdentity: AtomicFileIdentity | undefined;\n try {\n temporaryFile = await this.operations.open(temporaryPath, 'wx');\n temporaryIdentity = identity(await temporaryFile.stat());\n await temporaryFile.writeFile(contents, 'utf8');\n await temporaryFile.sync();\n await temporaryFile.close();\n temporaryFile = undefined;\n await this.assertNamespaceIdentity(namespacePath, namespaceIdentity, targetPath);\n await this.assertTemporaryIdentity(temporaryPath, temporaryIdentity, targetPath);\n await this.operations.rename(temporaryPath, targetPath);\n } catch (error: unknown) {\n await temporaryFile?.close().catch(() => undefined);\n const cleanupConfirmed = await this.cleanupOwnedTemporary(\n namespacePath,\n namespaceIdentity,\n temporaryPath,\n temporaryIdentity,\n targetPath,\n );\n if (!cleanupConfirmed) throw cleanupError(targetPath, error);\n throw error;\n }\n if (!(await this.cleanupNamespace(namespacePath, namespaceIdentity, targetPath))) {\n throw cleanupError(targetPath);\n }\n }\n\n private async captureNamespaceIdentity(path: string, targetPath: string): Promise<AtomicFileIdentity> {\n const stat = await this.operations.lstat(path);\n if (stat.isSymbolicLink() || !stat.isDirectory()) throw ownershipError(targetPath);\n return identity(stat);\n }\n\n private async assertNamespaceIdentity(path: string, expected: AtomicFileIdentity, targetPath: string): Promise<void> {\n const stat = await this.operations.lstat(path);\n if (stat.isSymbolicLink() || !stat.isDirectory() || !sameIdentity(identity(stat), expected)) {\n throw ownershipError(targetPath);\n }\n }\n\n private async assertTemporaryIdentity(path: string, expected: AtomicFileIdentity, targetPath: string): Promise<void> {\n const stat = await this.operations.lstat(path);\n if (stat.isSymbolicLink() || !stat.isFile() || !sameIdentity(identity(stat), expected)) {\n throw ownershipError(targetPath);\n }\n }\n\n private async cleanupOwnedTemporary(\n namespacePath: string,\n namespaceIdentity: AtomicFileIdentity,\n temporaryPath: string,\n temporaryIdentity: AtomicFileIdentity | undefined,\n targetPath: string,\n ): Promise<boolean> {\n if (temporaryIdentity) {\n try {\n await this.assertNamespaceIdentity(namespacePath, namespaceIdentity, targetPath);\n await this.assertTemporaryIdentity(temporaryPath, temporaryIdentity, targetPath);\n } catch (error: unknown) {\n if (!isEnoent(error)) return false;\n }\n try {\n await this.operations.unlink(temporaryPath);\n } catch {\n // The operation may have taken effect before reporting failure; inspect below.\n }\n try {\n await this.operations.lstat(temporaryPath);\n return false;\n } catch (error: unknown) {\n if (!isEnoent(error)) return false;\n }\n }\n return this.cleanupNamespace(namespacePath, namespaceIdentity, targetPath);\n }\n\n private async cleanupNamespace(\n namespacePath: string,\n namespaceIdentity: AtomicFileIdentity,\n targetPath: string,\n ): Promise<boolean> {\n try {\n await this.assertNamespaceIdentity(namespacePath, namespaceIdentity, targetPath);\n await this.operations.rmdir(namespacePath);\n } catch {\n // The operation may have taken effect before reporting failure; inspect below.\n }\n try {\n await this.operations.lstat(namespacePath);\n return false;\n } catch (error: unknown) {\n return isEnoent(error);\n }\n }\n}\n\nfunction identity(stat: AtomicFileStat): AtomicFileIdentity {\n return { dev: String(stat.dev), ino: String(stat.ino) };\n}\n\nfunction sameIdentity(left: AtomicFileIdentity, right: AtomicFileIdentity): boolean {\n return left.dev === right.dev && left.ino === right.ino;\n}\n\nfunction ownershipError(targetPath: string): Error {\n return new Error(`Atomic write ownership could not be confirmed for ${targetPath}.`);\n}\n\nfunction cleanupError(targetPath: string, cause?: unknown): Error {\n return new Error(\n `Atomic write cleanup could not be confirmed for ${targetPath}.`,\n cause === undefined ? undefined : { cause },\n );\n}\n\nfunction isEnoent(error: unknown): boolean {\n return typeof error === 'object' && error !== null && 'code' in error && error.code === 'ENOENT';\n}\n","import { AtomicFileWriter } from '../lib/atomic-file.writer';\nimport { MigrationApplicationError } from '../migrator/migration-application.error';\nimport { pathsEquivalentOnFileSystem, pathsOverlapOnFileSystem } from '../migrator/migration-path.validator';\nimport type { MigrationReport } from './migration-report';\n\ntype ReportFileWriter = Pick<AtomicFileWriter, 'write'>;\n\nexport interface JsonReportWriteOptions {\n readonly protectedPaths?: readonly string[];\n}\n\nexport class JsonReportWriter {\n constructor(private readonly writer: ReportFileWriter = new AtomicFileWriter()) {}\n\n public async write(path: string, report: MigrationReport, options: JsonReportWriteOptions = {}): Promise<void> {\n for (const protectedPath of options.protectedPaths ?? []) {\n if (!(await pathsOverlapOnFileSystem(protectedPath, path))) continue;\n const collisionPaths = (await pathsEquivalentOnFileSystem(protectedPath, path))\n ? [protectedPath]\n : [protectedPath, path];\n throw new MigrationApplicationError(\n 'path-collision',\n `Report path collides with a migration output: ${path}`,\n collisionPaths,\n );\n }\n const contents = `${JSON.stringify(report, null, 2)}\\n`;\n await this.writer.write(path, contents);\n }\n}\n","import type { MigrationReport, ReportResult } from './migration-report';\n\ntype MigrationApplication = MigrationReport['application'];\ntype StylesheetChange = NonNullable<MigrationReport['stylesheet']>['change'];\n\ninterface ApplicationPresentation {\n readonly outcome: string;\n readonly footer?: string;\n}\n\nfunction assertNever(value: never, subject: string): never {\n throw new Error(`Unsupported ${subject}: ${String(value)}`);\n}\n\nexport interface TextOutput {\n write(text: string): void;\n readonly isTTY?: boolean;\n}\n\nexport class TerminalPresenter {\n public present(report: MigrationReport, output: TextOutput): void {\n const { summary } = report;\n const application = report.application;\n const presentation = this.applicationPresentation(report);\n const totals = `Converted ${summary.converted} | Review ${summary.review} | Unsupported ${summary.unsupported} | Invalid ${summary.invalid} | Parse errors ${summary.parseErrors}`;\n const stylesheet = report.stylesheet\n ? `Stylesheet: ${this.stylesheetAction(report.stylesheet.change, application.status)} ${report.stylesheet.path}`\n : undefined;\n const diagnostics = report.files.flatMap(file =>\n file.results\n .filter((result): result is Exclude<ReportResult, { status: 'converted' }> => result.status !== 'converted')\n .map(result => `${file.path}:${result.offset} [${result.code}] ${result.reason}`),\n );\n\n output.write(\n [presentation.outcome, totals, stylesheet, ...diagnostics, presentation.footer, '']\n .filter((line): line is string => line !== undefined)\n .join('\\n'),\n );\n }\n\n private applicationPresentation(report: MigrationReport): ApplicationPresentation {\n const { summary, application } = report;\n\n switch (application.status) {\n case 'applied':\n if (report.mode !== 'write') throw new Error('Applied application requires write mode.');\n return {\n outcome: `Applied: ${summary.filesScanned} files scanned, ${summary.filesChanged} changed`,\n };\n case 'skipped':\n switch (application.reason) {\n case 'plan-only':\n if (report.mode !== 'plan') throw new Error('Plan-only application requires plan mode.');\n return {\n outcome: `${this.modeLabel(report.mode)}: ${summary.filesScanned} files scanned, ${summary.filesChanged} would change`,\n footer: 'No project files were written. Run again with --write to apply this plan.',\n };\n case 'parse-errors':\n if (report.mode !== 'write') throw new Error('Parse-error application requires write mode.');\n return {\n outcome: `${this.modeLabel(report.mode)}: ${summary.filesScanned} files scanned, ${summary.filesChanged} would change`,\n footer: 'No project files were written because parsing failed.',\n };\n default:\n return assertNever(application.reason, 'migration application reason');\n }\n default:\n return assertNever(application, 'migration application');\n }\n }\n\n private modeLabel(mode: MigrationReport['mode']): 'Plan' | 'Write' {\n switch (mode) {\n case 'plan':\n return 'Plan';\n case 'write':\n return 'Write';\n default:\n return assertNever(mode, 'migration mode');\n }\n }\n\n private stylesheetAction(change: StylesheetChange, status: MigrationApplication['status']): string {\n switch (status) {\n case 'applied':\n return this.completedStylesheetAction(change);\n case 'skipped':\n return this.prospectiveStylesheetAction(change);\n default:\n return assertNever(status, 'migration application status');\n }\n }\n\n private completedStylesheetAction(change: StylesheetChange): string {\n switch (change) {\n case 'created':\n return 'created';\n case 'updated':\n return 'updated';\n case 'removed':\n return 'removed';\n case 'unchanged':\n return 'unchanged';\n default:\n return assertNever(change, 'stylesheet change');\n }\n }\n\n private prospectiveStylesheetAction(change: StylesheetChange): string {\n switch (change) {\n case 'created':\n return 'would create';\n case 'updated':\n return 'would update';\n case 'removed':\n return 'would remove';\n case 'unchanged':\n return 'would remain unchanged';\n default:\n return assertNever(change, 'stylesheet change');\n }\n }\n}\n","type ErrorWithMessage = {\n message: string;\n};\n\n/**\n * Returns true if the error object has a message property. Otherwise false.\n * @param error error object or any other object\n * @returns true if the error object has a message property. Otherwise false.\n */\nfunction isErrorWithMessage(error: unknown): error is ErrorWithMessage {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'message' in error &&\n typeof (error as Record<string, unknown>).message === 'string'\n );\n}\n\n/**\n * Returns an error object with a message. If the error object is not an error, it will be converted to an error object.\n * @param maybeError error object or any other object\n * @returns error object\n */\nfunction toErrorWithMessage(maybeError: unknown): ErrorWithMessage {\n if (isErrorWithMessage(maybeError)) return maybeError;\n\n try {\n return new Error(JSON.stringify(maybeError));\n } catch {\n // fallback in case there's an error stringifying the maybeError\n // like with circular references for example.\n return new Error(String(maybeError));\n }\n}\n\n/**\n * Returns the error message from an error object. If the error object is not an error, it will be converted to an error object.\n * @param error error object or any other object\n * @returns error message\n */\nfunction getErrorMessage(error: unknown) {\n return toErrorWithMessage(error).message;\n}\n\nexport { getErrorMessage };\n","import type { MigrationReport } from '../report/migration-report';\n\nexport function resolveExitCode(report: MigrationReport, allowUnresolved: boolean): 0 | 1 | 2 {\n if (report.summary.parseErrors > 0) return 1;\n\n const hasUnresolved = report.summary.review > 0 || report.summary.unsupported > 0 || report.summary.invalid > 0;\n\n return hasUnresolved && !allowUnresolved ? 2 : 0;\n}\n","import path from 'node:path';\n\nexport function validateReportPath(reportPath: string): void {\n if (reportPath.trim().length === 0) {\n throw new Error('Report path must not be empty.');\n }\n\n if (path.extname(reportPath).toLowerCase() !== '.json') {\n throw new Error('Report path must have a .json extension.');\n }\n}\n","import { DEFAULT_BREAKPOINTS, ORIENTATION_BREAKPOINTS } from '../analyzer/flex-layout.catalog';\n\nexport interface BreakpointMigrationConfig {\n readonly orientationBreakpoints: boolean;\n readonly printWithBreakpoints?: readonly string[];\n}\n\nconst standardAliases = new Set<string>(DEFAULT_BREAKPOINTS);\nconst orientationAliases = new Set<string>(ORIENTATION_BREAKPOINTS);\n\nexport function parsePrintWithBreakpoints(value: string, orientationEnabled: boolean): readonly string[] {\n if (value === 'none') return Object.freeze([]);\n\n const aliases = value.split(',').map(alias => alias.trim());\n if (aliases.some(alias => alias.length === 0)) {\n throw new Error('Print breakpoint aliases must not be empty');\n }\n if (aliases.includes('none')) {\n throw new Error('The literal none cannot be combined with breakpoint aliases');\n }\n\n const seen = new Set<string>();\n for (const alias of aliases) {\n if (seen.has(alias)) throw new Error(`Print breakpoint list contains duplicate alias ${alias}`);\n seen.add(alias);\n\n if (alias === 'print') throw new Error('Print breakpoint list must not contain print');\n if (orientationAliases.has(alias) && !orientationEnabled) {\n throw new Error(`Orientation breakpoint alias ${alias} requires --orientation-breakpoints`);\n }\n if (!standardAliases.has(alias) && !orientationAliases.has(alias)) {\n throw new Error(`Unknown breakpoint alias ${alias}`);\n }\n }\n\n return Object.freeze(aliases);\n}\n","import * as path from 'node:path';\nimport { MigrationApplicationError } from '../migrator/migration-application.error';\nimport type { PathApi } from '../migrator/migration-path.validator';\n\nexport interface StylesheetPathValidationRequest {\n readonly target: string;\n readonly stylesheetPath?: string;\n readonly inputPath: string;\n readonly outputPath: string;\n readonly reportPath?: string;\n}\n\nexport async function validateStylesheetPath(\n request: StylesheetPathValidationRequest,\n pathApi: PathApi = path,\n): Promise<string | undefined> {\n if (request.target !== 'css') {\n if (request.stylesheetPath !== undefined) {\n throw new MigrationApplicationError('invalid-configuration', '--stylesheet can only be used with --target css.', [\n request.stylesheetPath,\n ]);\n }\n return undefined;\n }\n\n if (request.stylesheetPath === undefined) {\n throw new MigrationApplicationError('invalid-configuration', '--target css requires --stylesheet <path>.');\n }\n if (request.stylesheetPath.trim().length === 0) {\n throw new MigrationApplicationError('invalid-configuration', 'Stylesheet path must not be empty.');\n }\n\n return pathApi.resolve(request.stylesheetPath);\n}\n","import type { MigrationMode } from '../migrator/migration-mode';\n\nconst obsoleteDryRunGuidance = 'Planning is now the default. Remove --dry-run; use --write to apply changes.';\n\nexport function resolveMigrationMode(argv: readonly string[], write: boolean): MigrationMode {\n const cliArguments = argv.slice(2);\n const optionTerminator = cliArguments.indexOf('--');\n const optionArguments = optionTerminator === -1 ? cliArguments : cliArguments.slice(0, optionTerminator);\n\n if (optionArguments.some(argument => argument === '--dry-run' || argument.startsWith('--dry-run='))) {\n throw new Error(obsoleteDryRunGuidance);\n }\n if (optionArguments.filter(argument => argument === '--write').length > 1) {\n throw new Error('--write may only be specified once.');\n }\n\n return write ? 'write' : 'plan';\n}\n","import { runCli } from './cli/run-cli';\nimport { getErrorMessage } from './util/error.util';\n\nasync function main(): Promise<void> {\n process.exitCode = await runCli(process.argv);\n}\n\nvoid main().catch((error: unknown) => {\n process.stderr.write(`Error: ${getErrorMessage(error)}\\n`);\n process.exitCode = 1;\n});\n"],"mappings":"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","names":["path","timestamp","declaration","property","identity","freezeDeclarations","declaration","freezeDeclarations","declaration","freezeDeclarations","declaration","freezeDeclarations","declaration","declaration","range","property","parsed","closingByOpening","property","authority","textSizes","property","cssProperties","declaration","alignment","parsed","arbitraryValue","arbitraryValue","main","mainAxis","alignment","arbitraryValue","declaration","property","containsControl","declaration","result","property","range","parsed","path","result","diagnostic","normalizedAbsolutePath","path","stat","path","destination","randomUUID","join","recoveryResult","join","randomUUID","randomUUID","join","join","randomUUID","dirname","join","resolve","path","resolve","dirname","result","join","sortedUnique","result","path","result","stat","path","path","path","stat","path","path","result","path","optionalAliases","declaration","property","main","customProperty","property","declaration","result","parsed","declaration","result","property","interpolation","parsed","declaration","property","range","activation","property","contextUnverified","declaration","properties","parsed","diagnostic","writers","visibilityIds","numericRange","range","rangesCover","unresolved","dynamicBinding","unresolvedBreakpoint","contextUnverified","responsivePrecedenceUnverified","compareText","visibilityDirectives","extendedClassDirectives","extendedStyleDirectives","extendedDirectives","gridDirectives","dynamicBinding","contextUnverified","responsivePrecedenceUnverified","unresolvedBreakpoint","activation","result","equalClassValues","declaration","parsed","property","familyPlan","decision","printOwner","states","resolved","internalInvariant","result","path","sequenceInvariant","samePathPair","internalInvariant","identity","result","diagnostic","declaration","freezeMedia","normalizedAbsolutePath","diagnostic","path","path","result","freezeValue","lstat","stat","path","path","lstat","isEnoent","path","relative","sameIdentity","stat","identity","lstat","isEnoent","lstat","readFile","path","invalid","declaration","property","property","START_MARKER","END_MARKER","parsed","parsedRule","resolveRetainedMediaContext","compareCodeUnits","nodeFileSystem","readFile","lstat","sameState","stat","isEnoent","path","internalInvariant","samePathPair","normalizedAbsolutePath","sameOwnedValue","result","isPlainRecord","path","readFile","path","fileCongruenceInvariant","parsed","isEnoent","path","diagnostic","sameState","isEnoent","stylesheetChange","randomUUID","lstat","mkdir","open","rename","rmdir","unlink","basename","dirname","join","identity","path","stat","sameIdentity","isEnoent","path","result","path","standardAliases","path","path"]}