transone-cli 0.6.3 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/README.md +20 -3
  2. package/README.zh-CN.md +31 -0
  3. package/dist/app/analyze.d.ts +2 -1
  4. package/dist/app/components.d.ts +4 -0
  5. package/dist/app/types.d.ts +3 -0
  6. package/dist/{build-mp-vk5ap2cw.js → build-mp-y5pwahsy.js} +824 -271
  7. package/dist/build-mp-y5pwahsy.js.map +24 -0
  8. package/dist/build.d.ts +3 -1
  9. package/dist/bundle-inputs.d.ts +6 -0
  10. package/dist/cli.d.ts +4 -2
  11. package/dist/cli.js +49 -16
  12. package/dist/cli.js.map +3 -3
  13. package/dist/components/discovery.d.ts +5 -0
  14. package/dist/components/index.d.ts +4 -0
  15. package/dist/components/report.d.ts +48 -0
  16. package/dist/components/resolution.d.ts +7 -0
  17. package/dist/components/types.d.ts +56 -0
  18. package/dist/components/web.d.ts +11 -0
  19. package/dist/config-inputs.d.ts +4 -0
  20. package/dist/create.d.ts +4 -4
  21. package/dist/document-styles.d.ts +7 -0
  22. package/dist/index-2g3e5sjt.js +3388 -0
  23. package/dist/index-2g3e5sjt.js.map +32 -0
  24. package/dist/index-d51tp4y9.js +1402 -0
  25. package/dist/index-d51tp4y9.js.map +11 -0
  26. package/dist/index-j4h0wd27.js +489 -0
  27. package/dist/index-j4h0wd27.js.map +14 -0
  28. package/dist/index-xgn9fbc6.js +298 -0
  29. package/dist/index-xgn9fbc6.js.map +13 -0
  30. package/dist/index.d.ts +5 -2
  31. package/dist/index.js +12 -4
  32. package/dist/index.js.map +2 -2
  33. package/dist/mp/inheritance.d.ts +17 -0
  34. package/dist/mp/inline.d.ts +22 -0
  35. package/dist/mp/methods.d.ts +1 -0
  36. package/dist/mp/source.d.ts +11 -0
  37. package/dist/mp/types.d.ts +8 -0
  38. package/dist/output-transaction.d.ts +19 -0
  39. package/dist/{project-ybacfze8.js → project-6tft5e77.js} +38 -6
  40. package/dist/{project-ybacfze8.js.map → project-6tft5e77.js.map} +3 -3
  41. package/dist/project.d.ts +2 -1
  42. package/dist/safe-path.d.ts +1 -0
  43. package/dist/scaffold.d.ts +6 -0
  44. package/dist/target/types.d.ts +7 -6
  45. package/dist/target/web-target.d.ts +1 -0
  46. package/dist/types.d.ts +13 -1
  47. package/dist/web-bundle.d.ts +17 -0
  48. package/dist/web-styles.d.ts +9 -0
  49. package/package.json +2 -2
  50. package/dist/build-mp-vk5ap2cw.js.map +0 -22
  51. package/dist/index-8k9x2k6m.js +0 -2288
  52. package/dist/index-8k9x2k6m.js.map +0 -27
  53. package/dist/index-k1qfvp0y.js +0 -19
  54. package/dist/index-k1qfvp0y.js.map +0 -10
  55. package/dist/index-yb2wsc7f.js +0 -7
  56. package/dist/index-yb2wsc7f.js.map +0 -9
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/web-styles.ts", "../src/components/web.ts"],
4
+ "sourcesContent": [
5
+ "import type { BunPlugin, Loader } from 'bun';\nimport { dirname, extname } from 'node:path';\nimport ts from 'typescript';\n\n// Keep aligned with transone/lib/style/units.ts. Importing framework source\n// would include files outside the CLI declaration build's rootDir.\nconst ROOT_RPX_RULE = ':root{--tu-rpx:calc(min(100vw, 750px) / 750);}';\nconst RPX_PATTERN = /(-?\\d+(?:\\.\\d+)?)rpx/g;\nconst SOURCE_FILTER = /\\.(?:[cm]?js|jsx|tsx?)$/;\n\nexport interface WebStylesPlugin extends BunPlugin {\n /** Source file -> fixed component CSS, emitted after document styles by Web. */\n readonly styles: Map<string, string>;\n /** Files requiring a second build without extraction to preserve selector precedence. */\n readonly runtimeFiles: Set<string>;\n}\n\n/** Extract complete, pure initStyles methods. Runtime StyleManager stays intact. */\nexport function createWebStylesPlugin(\n disabledFiles: ReadonlySet<string> = new Set(),\n transformSource?: (\n path: string,\n contents: string,\n definitions?: boolean\n ) => string,\n extract = true\n): WebStylesPlugin {\n const styles = new Map<string, string>();\n const runtimeFiles = new Set<string>();\n const candidates = new Set<string>();\n const owners = new Map<string, Map<string, string>>();\n let unknownSelector = false;\n let unknownInheritance = false;\n return {\n name: 'transone-web-styles',\n styles,\n runtimeFiles,\n setup(build) {\n styles.clear();\n runtimeFiles.clear();\n candidates.clear();\n owners.clear();\n unknownSelector = false;\n unknownInheritance = false;\n const load = async (path: string, definitions = false) => {\n styles.delete(path);\n const filePath = definitions\n ? path.replace(/\\?transone-definitions$/, '')\n : path;\n const original = await Bun.file(filePath).text();\n const contents =\n transformSource?.(filePath, original, definitions) ?? original;\n const transformedResult = () =>\n contents !== original || definitions\n ? {\n contents,\n loader: sourceLoader(filePath),\n resolveDir: dirname(filePath),\n }\n : undefined;\n if (\n !extract ||\n (!contents.includes('styleManager') && !contents.includes('extends'))\n )\n return transformedResult();\n const source = ts.createSourceFile(\n filePath,\n contents,\n ts.ScriptTarget.Latest,\n true,\n scriptKind(filePath)\n );\n const extracted = extractStyles(source);\n if (extracted.bodies.length) candidates.add(path);\n for (const { selector, owner } of extracted.selectors) {\n const selectorOwners =\n owners.get(selector) ?? new Map<string, string>();\n selectorOwners.set(`${path}:${owner}`, path);\n owners.set(selector, selectorOwners);\n if (selectorOwners.size > 1)\n for (const file of selectorOwners.values()) runtimeFiles.add(file);\n }\n unknownSelector ||= extracted.unknownSelector;\n unknownInheritance ||= extracted.unknownInheritance;\n if (unknownSelector || unknownInheritance)\n for (const file of candidates) runtimeFiles.add(file);\n if (!extracted.bodies.length || disabledFiles.has(path))\n return transformedResult();\n styles.set(path, extracted.css);\n let transformed = contents;\n for (const body of extracted.bodies.sort(\n (left, right) => right.getStart(source) - left.getStart(source)\n )) {\n transformed =\n transformed.slice(0, body.getStart(source)) +\n '{}' +\n transformed.slice(body.end);\n }\n return {\n contents: transformed,\n loader: sourceLoader(filePath),\n resolveDir: dirname(filePath),\n };\n };\n if (transformSource)\n build.onLoad(\n { filter: /.*/, namespace: 'transone-definitions' },\n ({ path }) => load(path, true)\n );\n build.onLoad({ filter: SOURCE_FILTER, namespace: 'file' }, ({ path }) =>\n load(path)\n );\n },\n };\n}\n\ntype Primitive = string | number | boolean | null;\ntype StaticValue = Primitive | { [key: string]: StaticValue };\ninterface Binding {\n expression: ts.Expression;\n declaration: ts.VariableDeclaration;\n exported: boolean;\n}\ninterface StyleAnalysis {\n css: string;\n bodies: ts.Block[];\n selectors: { selector: string; owner: string }[];\n unknownSelector: boolean;\n unknownInheritance: boolean;\n}\ninterface StyleEntry {\n selector: string;\n properties: Record<string, string | number>;\n hover?: Record<string, string | number>;\n media?: Record<string, Record<string, string | number>>;\n}\n\nfunction extractStyles(source: ts.SourceFile): StyleAnalysis {\n const bindings = collectBindings(source);\n const unsafeBindings = findUnsafeBindings(source, bindings);\n const classes = topLevelClasses(source);\n const descendants: ts.ClassLikeDeclaration[] = [];\n walk(source, (node) => {\n if (ts.isClassDeclaration(node) || ts.isClassExpression(node))\n descendants.push(node);\n });\n const { names: componentNames, roots: componentRoots } = componentBindings(\n source,\n classes,\n unsafeBindings\n );\n const selectorAnalysis = collectSelectors(\n classes,\n componentNames,\n bindings,\n unsafeBindings\n );\n const css: string[] = [];\n const bodies: ts.Block[] = [];\n for (const declaration of classes) {\n if (!extendsComponent(declaration, componentNames)) continue;\n const methods = declaration.members.filter(\n (member): member is ts.MethodDeclaration =>\n ts.isMethodDeclaration(member) && memberName(member) === 'initStyles'\n );\n if (methods.length !== 1) continue;\n const method = methods[0]!;\n if (\n !method.body ||\n method.parameters.length ||\n method.asteriskToken ||\n hasModifier(method, ts.SyntaxKind.StaticKeyword) ||\n hasModifier(method, ts.SyntaxKind.AsyncKeyword) ||\n (ts.canHaveDecorators(method) && ts.getDecorators(method)?.length) ||\n (ts.canHaveDecorators(declaration) &&\n ts.getDecorators(declaration)?.length) ||\n hasManagerAccessOutside(declaration, method) ||\n hasUnsafeAncestor(declaration, classes, componentRoots) ||\n hasUnsafeDescendant(declaration, descendants)\n )\n continue;\n const entries = new Map<string, StyleEntry>();\n let safe = true;\n for (const statement of method.body.statements) {\n if (ts.isEmptyStatement(statement)) continue;\n if (!ts.isExpressionStatement(statement)) {\n safe = false;\n break;\n }\n for (const expression of splitComma(statement.expression)) {\n const entry = readAddStyle(\n expression,\n bindings,\n unsafeBindings,\n declaration\n );\n if (!entry) {\n safe = false;\n break;\n }\n entries.set(entry.name, entry.style);\n }\n if (!safe) break;\n }\n if (!safe || !entries.size) continue;\n const rendered = [...entries.values()].map(renderStyle).join('');\n if (hasRelativeResource(rendered)) continue;\n css.push(rendered);\n bodies.push(method.body);\n }\n return {\n css: bodies.length ? ROOT_RPX_RULE + '\\n' + css.join('\\n') : '',\n bodies,\n ...selectorAnalysis,\n unknownInheritance: hasUnknownUnsafeAncestor(\n descendants,\n componentRoots,\n bindings\n ),\n };\n}\n\nfunction collectSelectors(\n classes: ts.ClassLikeDeclaration[],\n componentNames: Set<string>,\n bindings: Map<string, Binding>,\n unsafe: Set<string>\n): Pick<StyleAnalysis, 'selectors' | 'unknownSelector'> {\n const selectors: StyleAnalysis['selectors'] = [];\n let unknownSelector = false;\n for (const declaration of classes) {\n if (!extendsComponent(declaration, componentNames)) continue;\n const method = declaration.members.find(\n (member): member is ts.MethodDeclaration =>\n ts.isMethodDeclaration(member) && memberName(member) === 'initStyles'\n );\n if (!method?.body) continue;\n let calls = 0;\n // Include later addStyle calls too: they may collide with another manager.\n walk(declaration, (node) => {\n if (!ts.isCallExpression(node) || !isAddStyleCall(node)) return;\n calls++;\n const options = node.arguments[1] && unwrap(node.arguments[1]);\n let selector: StaticValue | undefined;\n let hover = false;\n if (options && ts.isObjectLiteralExpression(options)) {\n const evaluate = (expression: ts.Expression) =>\n staticValue(expression, bindings, unsafe, declaration.name?.text);\n selector = objectMember(options, 'selector', evaluate).value;\n const hoverMember = objectMember(options, 'hover', evaluate);\n hover =\n hoverMember.present &&\n (hoverMember.value === undefined || !!hoverMember.value);\n } else if (options) {\n const value = staticValue(\n options,\n bindings,\n unsafe,\n declaration.name?.text\n );\n if (isRecord(value)) {\n selector = value.selector;\n hover = !!value.hover;\n }\n }\n if (typeof selector !== 'string') {\n unknownSelector = true;\n return;\n }\n // StyleManager concatenates the raw selector with :hover before CSS parses\n // selector lists. Media rules use the unmodified base selector.\n const items = splitSelectorList(selector);\n const hoverItems = hover ? splitSelectorList(selector + ':hover') : [];\n if (!items || !hoverItems) {\n unknownSelector = true;\n return;\n }\n for (const item of [...items, ...hoverItems]) {\n selectors.push({\n selector: item,\n owner: String(declaration.getStart()),\n });\n }\n });\n if (\n !calls &&\n method.body.statements.some(\n (statement) => !ts.isEmptyStatement(statement)\n )\n )\n unknownSelector = true;\n }\n return { selectors, unknownSelector };\n}\n\nfunction objectMember(\n object: ts.ObjectLiteralExpression,\n key: string,\n evaluate: (expression: ts.Expression) => StaticValue | undefined\n): { value: StaticValue | undefined; present: boolean } {\n let result: { value: StaticValue | undefined; present: boolean } = {\n value: undefined,\n present: false,\n };\n for (const property of object.properties) {\n if (ts.isSpreadAssignment(property)) {\n const value = evaluate(property.expression);\n if (!isRecord(value)) result = { value: undefined, present: true };\n else if (Object.prototype.hasOwnProperty.call(value, key))\n result = { value: value[key], present: true };\n continue;\n }\n const name = ts.isComputedPropertyName(property.name)\n ? evaluate(property.name.expression)\n : ts.isIdentifier(property.name) ||\n ts.isStringLiteral(property.name) ||\n ts.isNumericLiteral(property.name)\n ? property.name.text\n : undefined;\n if (name === undefined) {\n result = { value: undefined, present: true };\n continue;\n }\n if (name !== key) continue;\n result = {\n value: ts.isPropertyAssignment(property)\n ? evaluate(property.initializer)\n : ts.isShorthandPropertyAssignment(property)\n ? evaluate(property.name)\n : undefined,\n present: true,\n };\n }\n return result;\n}\n\n/** Unknown imported/mixin ancestors may own a manager inspected by this class.\n * Without evaluating inheritance, disable candidates across the loaded graph.\n * Known Component roots and same-file ancestor/constant aliases stay precise.\n */\nfunction hasUnknownUnsafeAncestor(\n classes: ts.ClassLikeDeclaration[],\n roots: Set<string>,\n bindings: Map<string, Binding>\n): boolean {\n const reachesUnknown = (\n name: string | undefined,\n seen: Set<string>\n ): boolean => {\n if (!name || seen.has(name)) return true;\n if (roots.has(name)) return false;\n seen.add(name);\n const ancestor = classes.find(\n (declaration) => classBinding(declaration) === name\n );\n if (ancestor) {\n if (\n !ancestor.heritageClauses?.some(\n (clause) => clause.token === ts.SyntaxKind.ExtendsKeyword\n )\n )\n return false;\n return reachesUnknown(baseName(ancestor), seen);\n }\n const initializer = bindings.get(name)?.expression;\n if (initializer) {\n const alias = unwrap(initializer);\n if (ts.isIdentifier(alias)) return reachesUnknown(alias.text, seen);\n if (\n ts.isPropertyAccessExpression(alias) &&\n ts.isIdentifier(alias.expression)\n )\n return reachesUnknown(\n `${alias.expression.text}.${alias.name.text}`,\n seen\n );\n }\n return true;\n };\n return classes.some((declaration) => {\n if (\n !declaration.heritageClauses?.some(\n (clause) => clause.token === ts.SyntaxKind.ExtendsKeyword\n )\n )\n return false;\n let unsafe = declaration.members.some(\n (member) => memberName(member) === 'styleManager'\n );\n walk(declaration, (node) => {\n if (unsafeManagerAccess(node)) unsafe = true;\n });\n return unsafe && reachesUnknown(baseName(declaration), new Set());\n });\n}\n\n/** Split ownership lists while preserving commas inside functions, attributes and escapes. */\nfunction splitSelectorList(selector: string): string[] | undefined {\n const items: string[] = [];\n const delimiters: string[] = [];\n let quote: string | undefined;\n let escaped = false;\n let start = 0;\n for (let index = 0; index < selector.length; index++) {\n const character = selector[index]!;\n if (escaped) {\n escaped = false;\n continue;\n }\n if (character === '\\\\') {\n escaped = true;\n continue;\n }\n if (quote) {\n if (character === quote) quote = undefined;\n continue;\n }\n if (character === '\"' || character === \"'\") {\n quote = character;\n continue;\n }\n // Comments and rule delimiters need a complete CSS parser; keep them at runtime.\n if (\n (character === '/' && selector[index + 1] === '*') ||\n character === '{' ||\n character === '}'\n )\n return;\n if (character === '(' || character === '[') {\n delimiters.push(character);\n } else if (character === ')' || character === ']') {\n if (delimiters.pop() !== (character === ')' ? '(' : '[')) return;\n } else if (character === ',' && delimiters.length === 0) {\n const item = selector.slice(start, index).trim();\n if (!item) return;\n items.push(item);\n start = index + 1;\n }\n }\n if (quote || escaped || delimiters.length) return;\n const item = selector.slice(start).trim();\n return item ? [...items, item] : undefined;\n}\n\nfunction sourceLoader(path: string): Loader {\n const extension = extname(path);\n return extension === '.tsx'\n ? 'tsx'\n : extension === '.jsx'\n ? 'jsx'\n : extension === '.ts'\n ? 'ts'\n : 'js';\n}\n\nfunction scriptKind(path: string): ts.ScriptKind {\n const loader = sourceLoader(path);\n return loader === 'tsx'\n ? ts.ScriptKind.TSX\n : loader === 'jsx'\n ? ts.ScriptKind.JSX\n : loader === 'ts'\n ? ts.ScriptKind.TS\n : ts.ScriptKind.JS;\n}\n\nfunction memberName(member: ts.ClassElement): string | undefined {\n return member.name &&\n (ts.isIdentifier(member.name) || ts.isStringLiteral(member.name))\n ? member.name.text\n : undefined;\n}\n\nfunction hasModifier(node: ts.Node, kind: ts.SyntaxKind): boolean {\n return (\n ts.canHaveModifiers(node) &&\n !!ts.getModifiers(node)?.some((modifier) => modifier.kind === kind)\n );\n}\n\nfunction topLevelClasses(source: ts.SourceFile): ts.ClassLikeDeclaration[] {\n const classes: ts.ClassLikeDeclaration[] = [];\n for (const statement of source.statements) {\n if (ts.isClassDeclaration(statement)) classes.push(statement);\n if (ts.isVariableStatement(statement)) {\n for (const declaration of statement.declarationList.declarations) {\n if (\n declaration.initializer &&\n ts.isClassExpression(declaration.initializer)\n )\n classes.push(declaration.initializer);\n }\n }\n }\n return classes;\n}\n\nfunction classBinding(\n declaration: ts.ClassLikeDeclaration\n): string | undefined {\n const parent = declaration.parent;\n return ts.isVariableDeclaration(parent) && ts.isIdentifier(parent.name)\n ? parent.name.text\n : declaration.name?.text;\n}\n\nfunction componentBindings(\n source: ts.SourceFile,\n classes: ts.ClassLikeDeclaration[],\n unsafe: Set<string>\n): { names: Set<string>; roots: Set<string> } {\n const names = new Set<string>();\n for (const statement of source.statements) {\n if (ts.isVariableStatement(statement)) {\n for (const declaration of statement.declarationList.declarations) {\n const initializer =\n declaration.initializer && unwrap(declaration.initializer);\n if (!initializer) continue;\n if (isTransoneRequire(initializer)) {\n if (\n ts.isIdentifier(declaration.name) &&\n !unsafe.has(declaration.name.text)\n ) {\n names.add(`${declaration.name.text}.Component`);\n names.add(`${declaration.name.text}.BaseComponent`);\n }\n if (ts.isObjectBindingPattern(declaration.name)) {\n for (const binding of declaration.name.elements) {\n const imported = binding.propertyName ?? binding.name;\n if (\n ts.isIdentifier(imported) &&\n ['Component', 'BaseComponent'].includes(imported.text) &&\n ts.isIdentifier(binding.name) &&\n !binding.initializer &&\n !binding.dotDotDotToken &&\n !unsafe.has(binding.name.text)\n )\n names.add(binding.name.text);\n }\n }\n } else if (\n ts.isPropertyAccessExpression(initializer) &&\n ['Component', 'BaseComponent'].includes(initializer.name.text) &&\n isTransoneRequire(initializer.expression) &&\n ts.isIdentifier(declaration.name) &&\n !unsafe.has(declaration.name.text)\n )\n names.add(declaration.name.text);\n }\n }\n if (\n !ts.isImportDeclaration(statement) ||\n !ts.isStringLiteral(statement.moduleSpecifier) ||\n statement.moduleSpecifier.text !== 'transone' ||\n statement.importClause?.isTypeOnly\n )\n continue;\n const named = statement.importClause?.namedBindings;\n if (named && ts.isNamedImports(named)) {\n for (const binding of named.elements) {\n if (\n !binding.isTypeOnly &&\n ['Component', 'BaseComponent'].includes(\n binding.propertyName?.text ?? binding.name.text\n )\n )\n names.add(binding.name.text);\n }\n } else if (named && ts.isNamespaceImport(named)) {\n names.add(`${named.name.text}.Component`);\n names.add(`${named.name.text}.BaseComponent`);\n }\n }\n // Published UI bundles rename the Component base. Recognize its constructor\n // lifecycle and actual bundled StyleManager, rather than class names alone.\n const managers = new Set(\n classes\n .filter((declaration) => isBundledStyleManager(declaration, source))\n .map(classBinding)\n );\n for (const declaration of classes) {\n if (\n !['mount', 'mountToNode', 'update', 'unmount'].every((name) =>\n declaration.members.some((member) => memberName(member) === name)\n )\n )\n continue;\n const constructor = declaration.members.find(\n (member): member is ts.ConstructorDeclaration =>\n ts.isConstructorDeclaration(member)\n );\n if (!constructor?.body) continue;\n let createsManager = 0;\n let unsafeConstructor = false;\n let initializesState = false;\n let initializesStyles = false;\n walk(constructor.body, (node) => {\n if (unsafeManagerAccess(node)) {\n const assignment = node.parent;\n if (\n thisProperty(node) === 'styleManager' &&\n ts.isBinaryExpression(assignment) &&\n assignment.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n assignment.left === node &&\n ts.isNewExpression(assignment.right) &&\n ts.isIdentifier(assignment.right.expression) &&\n managers.has(assignment.right.expression.text)\n )\n createsManager++;\n else unsafeConstructor = true;\n }\n if (ts.isCallExpression(node)) {\n if (thisProperty(node.expression) === 'initState')\n initializesState = true;\n if (thisProperty(node.expression) === 'initStyles')\n initializesStyles = true;\n }\n });\n const name = classBinding(declaration);\n if (\n createsManager === 1 &&\n !unsafeConstructor &&\n initializesState &&\n initializesStyles &&\n name\n )\n names.add(name);\n }\n const roots = new Set(names);\n let changed = true;\n while (changed) {\n changed = false;\n for (const statement of source.statements)\n if (\n ts.isVariableStatement(statement) &&\n statement.declarationList.flags & ts.NodeFlags.Const\n )\n for (const declaration of statement.declarationList.declarations) {\n if (\n !ts.isIdentifier(declaration.name) ||\n !declaration.initializer ||\n unsafe.has(declaration.name.text) ||\n names.has(declaration.name.text)\n )\n continue;\n const initializer = unwrap(declaration.initializer);\n const target = ts.isIdentifier(initializer)\n ? initializer.text\n : ts.isPropertyAccessExpression(initializer) &&\n ts.isIdentifier(initializer.expression)\n ? `${initializer.expression.text}.${initializer.name.text}`\n : undefined;\n if (target && names.has(target)) {\n names.add(declaration.name.text);\n if (roots.has(target)) roots.add(declaration.name.text);\n changed = true;\n }\n }\n for (const declaration of classes) {\n const name = classBinding(declaration);\n if (name && !names.has(name) && extendsComponent(declaration, names)) {\n names.add(name);\n changed = true;\n }\n }\n }\n return { names, roots };\n}\n\nfunction isBundledStyleManager(\n declaration: ts.ClassLikeDeclaration,\n source: ts.SourceFile\n): boolean {\n const method = (name: string) =>\n declaration.members.find(\n (member): member is ts.MethodDeclaration =>\n ts.isMethodDeclaration(member) && memberName(member) === name\n );\n const mutatesMap = (\n name: string,\n operation: string,\n count: number\n ): boolean => {\n const member = method(name);\n if (!member?.body || member.parameters.length !== count) return false;\n const calls: ts.Expression[] = [];\n for (const statement of member.body.statements) {\n if (!ts.isExpressionStatement(statement)) return false;\n calls.push(...splitComma(statement.expression));\n }\n if (\n calls.length !== 2 ||\n !ts.isCallExpression(calls[0]!) ||\n !ts.isCallExpression(calls[1]!)\n )\n return false;\n const write = calls[0]!;\n const update = calls[1]!;\n return (\n ts.isPropertyAccessExpression(write.expression) &&\n write.expression.name.text === operation &&\n thisProperty(write.expression.expression) === 'styles' &&\n write.arguments.length === count &&\n write.arguments.every(\n (argument, index) =>\n ts.isIdentifier(argument) &&\n ts.isIdentifier(member.parameters[index]!.name) &&\n argument.text === member.parameters[index]!.name.text\n ) &&\n thisProperty(update.expression) === 'updateStyles' &&\n update.arguments.length === 0\n );\n };\n if (\n !mutatesMap('addStyle', 'set', 2) ||\n !mutatesMap('removeStyle', 'delete', 1) ||\n !method('clearStyles') ||\n !method('destroy') ||\n !method('convertToCSS') ||\n !method('updateStyles')\n )\n return false;\n const ensure = method('ensureStyleElement');\n if (!ensure?.body) return false;\n let createsStyleElement = false;\n walk(ensure.body, (node) => {\n if (\n ts.isCallExpression(node) &&\n ts.isPropertyAccessExpression(node.expression) &&\n ts.isIdentifier(node.expression.expression) &&\n node.expression.expression.text === 'document' &&\n node.expression.name.text === 'createElement' &&\n node.arguments.length === 1 &&\n ts.isStringLiteral(node.arguments[0]!) &&\n node.arguments[0]!.text === 'style'\n )\n createsStyleElement = true;\n });\n if (!createsStyleElement) return false;\n let hasRpxRule = false;\n walk(source, (node) => {\n if (ts.isStringLiteral(node) && node.text === ROOT_RPX_RULE)\n hasRpxRule = true;\n });\n return hasRpxRule;\n}\n\nfunction isTransoneRequire(node: ts.Expression): boolean {\n return (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'require' &&\n node.arguments.length === 1 &&\n ts.isStringLiteral(node.arguments[0]!) &&\n node.arguments[0]!.text === 'transone'\n );\n}\n\nfunction baseName(declaration: ts.ClassLikeDeclaration): string | undefined {\n const base = declaration.heritageClauses?.find(\n (clause) => clause.token === ts.SyntaxKind.ExtendsKeyword\n )?.types[0]?.expression;\n if (base && ts.isIdentifier(base)) return base.text;\n if (\n base &&\n ts.isPropertyAccessExpression(base) &&\n ts.isIdentifier(base.expression)\n )\n return `${base.expression.text}.${base.name.text}`;\n return undefined;\n}\n\nfunction extendsComponent(\n declaration: ts.ClassLikeDeclaration,\n names: Set<string>\n): boolean {\n const name = baseName(declaration);\n return name !== undefined && names.has(name);\n}\n\nfunction thisProperty(expression: ts.Node): string | undefined {\n if (\n ts.isPropertyAccessExpression(expression) &&\n expression.expression.kind === ts.SyntaxKind.ThisKeyword\n )\n return expression.name.text;\n if (\n ts.isElementAccessExpression(expression) &&\n expression.expression.kind === ts.SyntaxKind.ThisKeyword &&\n expression.argumentExpression &&\n ts.isStringLiteral(expression.argumentExpression)\n )\n return expression.argumentExpression.text;\n return undefined;\n}\n\nfunction hasManagerAccessOutside(\n declaration: ts.ClassLikeDeclaration,\n method: ts.MethodDeclaration\n): boolean {\n let unsafe = false;\n for (const member of declaration.members) {\n if (member === method) continue;\n if (memberName(member) === 'styleManager') return true;\n walk(member, (node) => {\n if (unsafeManagerAccess(node)) unsafe = true;\n });\n }\n return unsafe;\n}\n\nfunction unsafeManagerAccess(node: ts.Node): boolean {\n if (thisProperty(node) === 'styleManager') return true;\n if (\n ts.isElementAccessExpression(node) &&\n node.expression.kind === ts.SyntaxKind.ThisKeyword\n )\n return true;\n if (node.kind !== ts.SyntaxKind.ThisKeyword) return false;\n const parent = node.parent;\n // Passing/aliasing this lets other code mutate or inspect its StyleManager.\n return (\n !(ts.isPropertyAccessExpression(parent) && parent.expression === node) &&\n !(ts.isElementAccessExpression(parent) && parent.expression === node)\n );\n}\n\nfunction hasUnsafeAncestor(\n declaration: ts.ClassLikeDeclaration,\n classes: ts.ClassLikeDeclaration[],\n roots: Set<string>,\n seen = new Set<string>()\n): boolean {\n const name = baseName(declaration);\n if (!name || roots.has(name) || seen.has(name)) return false;\n seen.add(name);\n const ancestor = classes.find(\n (candidate) => classBinding(candidate) === name\n );\n if (!ancestor) return false;\n const initStyles = ancestor.members.find(\n (member): member is ts.MethodDeclaration =>\n ts.isMethodDeclaration(member) && memberName(member) === 'initStyles'\n );\n let unsafe = false;\n for (const member of ancestor.members) {\n if (member === initStyles) continue;\n walk(member, (node) => {\n if (unsafeManagerAccess(node)) unsafe = true;\n });\n }\n return unsafe || hasUnsafeAncestor(ancestor, classes, roots, seen);\n}\n\nfunction hasUnsafeDescendant(\n declaration: ts.ClassLikeDeclaration,\n classes: ts.ClassLikeDeclaration[],\n seen = new Set<string>()\n): boolean {\n const name = classBinding(declaration);\n if (!name || seen.has(name)) return false;\n seen.add(name);\n return classes.some((child) => {\n if (baseName(child) !== name) return false;\n let unsafe = false;\n walk(child, (node) => {\n if (unsafeManagerAccess(node)) unsafe = true;\n });\n return unsafe || hasUnsafeDescendant(child, classes, seen);\n });\n}\n\nfunction collectBindings(source: ts.SourceFile): Map<string, Binding> {\n const bindings = new Map<string, Binding>();\n for (const statement of source.statements) {\n if (!ts.isVariableStatement(statement)) continue;\n for (const declaration of statement.declarationList.declarations) {\n if (ts.isIdentifier(declaration.name) && declaration.initializer) {\n bindings.set(declaration.name.text, {\n expression: declaration.initializer,\n declaration,\n exported: hasModifier(statement, ts.SyntaxKind.ExportKeyword),\n });\n }\n }\n }\n return bindings;\n}\n\nfunction rootIdentifier(node: ts.Node): string | undefined {\n if (ts.isIdentifier(node)) return node.text;\n if (ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node))\n return rootIdentifier(node.expression);\n return undefined;\n}\n\nfunction findUnsafeBindings(\n source: ts.SourceFile,\n bindings: Map<string, Binding>\n): Set<string> {\n const unsafe = new Set<string>();\n const markWritten = (node: ts.Node): void => {\n const name = rootIdentifier(node);\n if (name) {\n unsafe.add(name);\n return;\n }\n if (ts.isPropertyAssignment(node)) {\n markWritten(node.initializer);\n return;\n }\n ts.forEachChild(node, markWritten);\n };\n walk(source, (node) => {\n if (\n ts.isBinaryExpression(node) &&\n node.operatorToken.kind >= ts.SyntaxKind.FirstAssignment &&\n node.operatorToken.kind <= ts.SyntaxKind.LastAssignment\n ) {\n markWritten(node.left);\n }\n if (\n (ts.isPrefixUnaryExpression(node) || ts.isPostfixUnaryExpression(node)) &&\n (node.operator === ts.SyntaxKind.PlusPlusToken ||\n node.operator === ts.SyntaxKind.MinusMinusToken)\n ) {\n const name = rootIdentifier(node.operand);\n if (name) unsafe.add(name);\n }\n if (ts.isDeleteExpression(node)) {\n const name = rootIdentifier(node.expression);\n if (name) unsafe.add(name);\n }\n if (ts.isForOfStatement(node) || ts.isForInStatement(node)) {\n markWritten(node.initializer);\n }\n });\n // Object constants may escape through aliases or unknown functions. Permit\n // their references only inside static module initializers/addStyle calls.\n for (const [name, binding] of bindings) {\n if (!containsObject(binding.expression, bindings, new Set())) continue;\n if (binding.exported) {\n unsafe.add(name);\n continue;\n }\n walk(source, (node) => {\n if (!ts.isIdentifier(node) || node.text !== name || !isReference(node))\n return;\n let parent: ts.Node | undefined = node.parent;\n while (\n parent &&\n !ts.isStatement(parent) &&\n !ts.isVariableDeclaration(parent) &&\n !ts.isCallExpression(parent) &&\n !ts.isExportSpecifier(parent)\n )\n parent = parent.parent;\n if (parent && ts.isCallExpression(parent) && isAddStyleCall(parent))\n return;\n if (\n parent &&\n ts.isVariableDeclaration(parent) &&\n ts.isVariableDeclarationList(parent.parent) &&\n ts.isVariableStatement(parent.parent.parent) &&\n parent.parent.parent.parent === source\n )\n return;\n unsafe.add(name);\n });\n }\n let changed = true;\n while (changed) {\n changed = false;\n for (const [name, binding] of bindings) {\n const dependencies = new Set<string>();\n walk(binding.expression, (node) => {\n if (\n ts.isIdentifier(node) &&\n isReference(node) &&\n bindings.has(node.text)\n )\n dependencies.add(node.text);\n });\n for (const dependency of dependencies) {\n if (unsafe.has(dependency) && !unsafe.has(name)) {\n unsafe.add(name);\n changed = true;\n }\n if (\n unsafe.has(name) &&\n containsObject(\n bindings.get(dependency)!.expression,\n bindings,\n new Set()\n ) &&\n !unsafe.has(dependency)\n ) {\n unsafe.add(dependency);\n changed = true;\n }\n }\n }\n }\n return unsafe;\n}\n\nfunction isReference(node: ts.Identifier): boolean {\n const parent = node.parent;\n if (\n (ts.isVariableDeclaration(parent) ||\n ts.isParameter(parent) ||\n ts.isBindingElement(parent)) &&\n parent.name === node\n )\n return false;\n if (\n (ts.isPropertyAccessExpression(parent) ||\n ts.isPropertyAssignment(parent) ||\n ts.isMethodDeclaration(parent) ||\n ts.isPropertyDeclaration(parent)) &&\n parent.name === node\n )\n return false;\n return true;\n}\n\nfunction containsObject(\n expression: ts.Expression,\n bindings: Map<string, Binding>,\n seen: Set<string>\n): boolean {\n const node = unwrap(expression);\n if (ts.isObjectLiteralExpression(node) || ts.isArrayLiteralExpression(node))\n return true;\n if (ts.isIdentifier(node) && !seen.has(node.text)) {\n seen.add(node.text);\n const binding = bindings.get(node.text);\n return !!binding && containsObject(binding.expression, bindings, seen);\n }\n return false;\n}\n\nfunction unwrap(expression: ts.Expression): ts.Expression {\n while (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression) ||\n ts.isSatisfiesExpression(expression)\n )\n expression = expression.expression;\n return expression;\n}\n\nfunction splitComma(expression: ts.Expression): ts.Expression[] {\n const node = unwrap(expression);\n return ts.isBinaryExpression(node) &&\n node.operatorToken.kind === ts.SyntaxKind.CommaToken\n ? [...splitComma(node.left), ...splitComma(node.right)]\n : [node];\n}\n\nfunction isAddStyleCall(node: ts.CallExpression): boolean {\n const callee = node.expression;\n return (\n !node.questionDotToken &&\n ts.isPropertyAccessExpression(callee) &&\n !callee.questionDotToken &&\n callee.name.text === 'addStyle' &&\n thisProperty(callee.expression) === 'styleManager'\n );\n}\n\nfunction readAddStyle(\n expression: ts.Expression,\n bindings: Map<string, Binding>,\n unsafe: Set<string>,\n declaration: ts.ClassLikeDeclaration\n): { name: string; style: StyleEntry } | undefined {\n if (\n !ts.isCallExpression(expression) ||\n !isAddStyleCall(expression) ||\n expression.arguments.length !== 2\n )\n return;\n const evaluate = (node: ts.Expression) =>\n staticValue(node, bindings, unsafe, declaration.name?.text);\n const name = evaluate(expression.arguments[0]!);\n const options = evaluate(expression.arguments[1]!);\n if (\n typeof name !== 'string' ||\n !isRecord(options) ||\n typeof options.selector !== 'string' ||\n !isProperties(options.properties) ||\n Object.keys(options).some(\n (key) => !['selector', 'properties', 'hover', 'media'].includes(key)\n )\n )\n return;\n if (options.hover !== undefined && !isProperties(options.hover)) return;\n if (\n options.media !== undefined &&\n (!isRecord(options.media) ||\n !Object.values(options.media).every(isProperties))\n )\n return;\n return { name, style: options as unknown as StyleEntry };\n}\n\nfunction staticValue(\n expression: ts.Expression,\n bindings: Map<string, Binding>,\n unsafe: Set<string>,\n className?: string,\n seen = new Set<string>()\n): StaticValue | undefined {\n const node = unwrap(expression);\n const evaluate = (value: ts.Expression) =>\n staticValue(value, bindings, unsafe, className, seen);\n if (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node))\n return node.text;\n if (ts.isNumericLiteral(node)) return Number(node.text);\n if (node.kind === ts.SyntaxKind.TrueKeyword) return true;\n if (node.kind === ts.SyntaxKind.FalseKeyword) return false;\n if (node.kind === ts.SyntaxKind.NullKeyword) return null;\n if (ts.isIdentifier(node)) {\n const binding = bindings.get(node.text);\n if (\n !binding ||\n unsafe.has(node.text) ||\n seen.has(node.text) ||\n node.text === className ||\n identifierIsShadowed(node) ||\n binding.declaration.getStart() >= node.getStart()\n )\n return;\n const next = new Set(seen);\n next.add(node.text);\n return staticValue(binding.expression, bindings, unsafe, className, next);\n }\n if (ts.isTemplateExpression(node)) {\n let value = node.head.text;\n for (const span of node.templateSpans) {\n const item = evaluate(span.expression);\n if (item === undefined || isRecord(item)) return;\n value += String(item) + span.literal.text;\n }\n return value;\n }\n if (ts.isObjectLiteralExpression(node)) {\n const result: Record<string, StaticValue> = Object.create(null);\n for (const property of node.properties) {\n if (ts.isShorthandPropertyAssignment(property)) {\n const value = evaluate(property.name);\n if (value === undefined || property.objectAssignmentInitializer) return;\n result[property.name.text] = value;\n continue;\n }\n if (!ts.isPropertyAssignment(property)) return;\n const name = ts.isComputedPropertyName(property.name)\n ? evaluate(property.name.expression)\n : ts.isIdentifier(property.name) ||\n ts.isStringLiteral(property.name) ||\n ts.isNumericLiteral(property.name)\n ? property.name.text\n : undefined;\n const value = evaluate(property.initializer);\n if (\n (typeof name !== 'string' && typeof name !== 'number') ||\n name === '__proto__' ||\n value === undefined\n )\n return;\n result[String(name)] = value;\n }\n return result;\n }\n if (\n ts.isPropertyAccessExpression(node) ||\n ts.isElementAccessExpression(node)\n ) {\n const object = evaluate(node.expression);\n const key = ts.isPropertyAccessExpression(node)\n ? node.name.text\n : node.argumentExpression && evaluate(node.argumentExpression);\n if (\n isRecord(object) &&\n (typeof key === 'string' || typeof key === 'number')\n )\n return object[String(key)];\n return;\n }\n if (ts.isPrefixUnaryExpression(node)) {\n const operand = evaluate(node.operand);\n if (operand === undefined || isRecord(operand)) return;\n if (node.operator === ts.SyntaxKind.ExclamationToken) return !operand;\n if (typeof operand !== 'number') return;\n if (node.operator === ts.SyntaxKind.MinusToken) return -operand;\n if (node.operator === ts.SyntaxKind.PlusToken) return operand;\n }\n if (ts.isConditionalExpression(node)) {\n const condition = evaluate(node.condition);\n return condition === undefined || isRecord(condition)\n ? undefined\n : evaluate(condition ? node.whenTrue : node.whenFalse);\n }\n if (ts.isBinaryExpression(node)) {\n const left = evaluate(node.left);\n const right = evaluate(node.right);\n if (\n left === undefined ||\n right === undefined ||\n isRecord(left) ||\n isRecord(right)\n )\n return;\n if (node.operatorToken.kind === ts.SyntaxKind.PlusToken) {\n if (typeof left === 'string' || typeof right === 'string')\n return String(left) + String(right);\n if (typeof left === 'number' && typeof right === 'number')\n return left + right;\n return;\n }\n if (typeof left !== 'number' || typeof right !== 'number') return;\n switch (node.operatorToken.kind) {\n case ts.SyntaxKind.MinusToken:\n return left - right;\n case ts.SyntaxKind.AsteriskToken:\n return left * right;\n case ts.SyntaxKind.SlashToken:\n return left / right;\n case ts.SyntaxKind.PercentToken:\n return left % right;\n case ts.SyntaxKind.AsteriskAsteriskToken:\n return left ** right;\n }\n }\n return;\n}\n\nfunction identifierIsShadowed(identifier: ts.Identifier): boolean {\n for (\n let parent: ts.Node | undefined = identifier.parent;\n parent && !ts.isSourceFile(parent);\n parent = parent.parent\n ) {\n if (!ts.isFunctionLike(parent)) continue;\n let shadowed = false;\n walk(parent, (node) => {\n if (\n (ts.isVariableDeclaration(node) ||\n ts.isParameter(node) ||\n ts.isBindingElement(node) ||\n ts.isClassDeclaration(node) ||\n ts.isFunctionDeclaration(node)) &&\n node.name &&\n ts.isIdentifier(node.name) &&\n node.name.text === identifier.text\n )\n shadowed = true;\n });\n if (shadowed) return true;\n }\n return false;\n}\n\nfunction isRecord(\n value: StaticValue | undefined\n): value is { [key: string]: StaticValue } {\n return typeof value === 'object' && value !== null;\n}\n\nfunction isProperties(\n value: StaticValue | undefined\n): value is Record<string, string | number> {\n return (\n isRecord(value) &&\n Object.values(value).every(\n (item) =>\n typeof item === 'string' ||\n (typeof item === 'number' && Number.isFinite(item))\n )\n );\n}\n\nfunction renderProperties(properties: Record<string, string | number>): string {\n return Object.entries(properties)\n .map(\n ([key, value]) =>\n `${key.replace(/([A-Z])/g, '-$1').toLowerCase()}: ${String(value).replace(RPX_PATTERN, (_match, number: string) => `calc(${number} * var(--tu-rpx))`)};`\n )\n .join('\\n');\n}\n\nfunction renderStyle(style: StyleEntry): string {\n let css = `${style.selector} {\\n${renderProperties(style.properties)}\\n}\\n`;\n if (style.hover)\n css += `${style.selector}:hover {\\n${renderProperties(style.hover)}\\n}\\n`;\n for (const [query, properties] of Object.entries(style.media ?? {})) {\n css += `@media ${query} {\\n${style.selector} {\\n${renderProperties(properties)}\\n}\\n}\\n`;\n }\n return css;\n}\n\nfunction hasRelativeResource(css: string): boolean {\n // Escapes/imports and image functions can hide document-relative string URLs.\n if (\n css.includes('\\\\') ||\n /@import\\b|(?:-webkit-)?image(?:-set)?\\s*\\(/i.test(css)\n )\n return true;\n for (const match of css.matchAll(\n /url\\s*\\(\\s*(?:([\"'])(.*?)\\1|([^)]*))\\s*\\)/gi\n )) {\n const url = (match[2] ?? match[3] ?? '').trim();\n if (!/^(?:\\/|[a-z][a-z\\d+.-]*:)/i.test(url)) return true;\n }\n return false;\n}\n\nfunction walk(node: ts.Node, visit: (node: ts.Node) => void): void {\n visit(node);\n ts.forEachChild(node, (child) => walk(child, visit));\n}\n",
6
+ "import ts from 'typescript';\nimport { COMPONENT_PLATFORM_DEFINITIONS } from 'transone/platform';\nimport { createHash } from 'node:crypto';\nimport { dirname } from 'node:path';\nimport { canonicalPath } from './discovery';\nimport type { BunPlugin } from 'bun';\nimport type { ResolvedConfig } from '../types';\nimport { createComponentIndex, type ClassReference } from './index';\n\nconst BOOT = 'transone:platform-bootstrap';\nconst DEFINITIONS = 'transone:component-definitions:';\nconst alias = (reference: ClassReference) =>\n `__transone_${createHash('sha256').update(reference.id).digest('hex').slice(0, 16)}`;\nconst localName = (reference: ClassReference) =>\n reference.className === 'default'\n ? `${alias(reference)}_default`\n : reference.className;\ninterface Edit {\n start: number;\n end: number;\n text: string;\n}\nfunction apply(contents: string, edits: Edit[]): string {\n for (const edit of edits.sort((a, b) => b.start - a.start))\n contents =\n contents.slice(0, edit.start) + edit.text + contents.slice(edit.end);\n return contents;\n}\n\n/** Every local identifier introduced by a declaration, including nested/rest bindings. */\nfunction bindingIdentifiers(name: ts.BindingName): ts.Identifier[] {\n return ts.isIdentifier(name)\n ? [name]\n : name.elements.flatMap((element) =>\n ts.isOmittedExpression(element) ? [] : bindingIdentifiers(element.name)\n );\n}\n\nfunction directlyConstructed(node: ts.Node): boolean {\n let expression = node;\n while (\n expression.parent &&\n ((ts.isPropertyAccessExpression(expression.parent) &&\n expression.parent.name === expression) ||\n ts.isParenthesizedExpression(expression.parent) ||\n ts.isAsExpression(expression.parent) ||\n ts.isNonNullExpression(expression.parent))\n )\n expression = expression.parent;\n return (\n ts.isNewExpression(expression.parent) &&\n expression.parent.expression === expression\n );\n}\n\nfunction componentSources(\n config: ResolvedConfig,\n entries: readonly string[]\n): string[] {\n return [\n ...new Set([\n ...entries,\n ...ts.sys.readDirectory(\n config.root,\n ['.ts', '.tsx'],\n [\n '**/node_modules/**',\n '**/dist/**',\n '**/*.d.ts',\n ...(config.components?.exclude ?? []),\n ],\n ['src/**/*.ts', 'src/**/*.tsx', ...(config.components?.include ?? [])]\n ),\n ]),\n ];\n}\n\n/** One immutable selection shared by the browser and document bundles. No user code executes here. */\nexport function createWebComponentContext(\n config: ResolvedConfig,\n entry: string\n) {\n const files = componentSources(config, [entry]);\n if (\n ![...files].some((path) =>\n /@\\s*[\\w$]|abstract\\s+class|\\bfrom\\s*['\"](?!transone(?:['\"/]))/.test(\n ts.sys.readFile(path) ?? ''\n )\n )\n ) {\n return {\n active: false,\n sourcePaths: files,\n entrypoint: entry,\n plugin: {\n name: 'transone-no-platform-components',\n setup() {},\n } as BunPlugin,\n transform: (_path: string, contents: string, _definitions = false) =>\n contents,\n };\n }\n const index = createComponentIndex({\n root: config.root,\n entrypoints: [entry],\n platform: config.platform,\n include: config.components?.include,\n exclude: config.components?.exclude,\n });\n const rootPath = canonicalPath(config.root);\n // Share the discovery boundary with source pruning. Explicit sibling-source\n // globs are eligible too; unindexed package JavaScript must keep its imports.\n const eligibleSources = new Set(files.map(canonicalPath));\n for (const source of index.sources) {\n const path = canonicalPath(source.fileName);\n if (\n path.startsWith(rootPath + '/') &&\n !source.isDeclarationFile &&\n /\\.tsx?$/.test(path) &&\n !/(?:^|[/\\\\])(?:node_modules|dist)(?:[/\\\\]|$)/.test(path)\n )\n eligibleSources.add(path);\n }\n const frameworkEntry = Bun.resolveSync('transone', canonicalPath(entry));\n const platformDirectory = canonicalPath(\n dirname(frameworkEntry) + '/platform'\n );\n const platformNames = new Set(\n COMPONENT_PLATFORM_DEFINITIONS.map((definition) => definition.decorator)\n );\n const consumedDecorators = new Set<ts.Decorator>();\n for (const ref of index.classes)\n if (index.metadata(ref).platforms.length) {\n for (const decorator of ts.getDecorators(ref.declaration) ?? []) {\n const expression = ts.isCallExpression(decorator.expression)\n ? decorator.expression.expression\n : undefined;\n const symbol = expression && index.symbolAt(expression, ref.source);\n if (\n symbol &&\n platformNames.has(symbol.name) &&\n symbol.declarations?.some(\n (declaration) =>\n canonicalPath(dirname(declaration.getSourceFile().fileName)) ===\n platformDirectory\n )\n )\n consumedDecorators.add(decorator);\n }\n }\n const allPairs = index.bindings();\n const pairs: { base: ClassReference; implementation: ClassReference }[] = [];\n const decorated = index.classes.filter(\n (ref) => index.metadata(ref).platforms.length\n );\n const removed = new Set(decorated.map((ref) => ref.id));\n const keep = (ref: ClassReference) => {\n for (const ancestor of index.hierarchy(ref)) removed.delete(ancestor.id);\n };\n const classAt = new Map(index.classes.map((ref) => [ref.declaration, ref]));\n const liveSymbols = (\n source: ts.SourceFile,\n dropped: ReadonlySet<ts.Node> = new Set()\n ) => {\n const symbols = new Set<ts.Symbol>();\n const visit = (node: ts.Node) => {\n const owner =\n (ts.isClassDeclaration(node) || ts.isClassExpression(node)) &&\n classAt.get(node);\n if (\n dropped.has(node) ||\n (owner && removed.has(owner.id)) ||\n ts.isImportDeclaration(node) ||\n (ts.isHeritageClause(node) &&\n node.token !== ts.SyntaxKind.ExtendsKeyword) ||\n (ts.isTypeNode(node) && !ts.isExpressionWithTypeArguments(node)) ||\n (ts.isDecorator(node) && consumedDecorators.has(node))\n )\n return;\n if (ts.isIdentifier(node)) {\n const symbol = index.symbolAt(node, source);\n if (symbol) symbols.add(symbol);\n }\n ts.forEachChild(node, visit);\n };\n visit(source);\n return symbols;\n };\n const reachable = new Set([canonicalPath(entry)]);\n const expandReachable = () => {\n let graphChanged = true;\n while (graphChanged) {\n graphChanged = false;\n for (const source of index.sources)\n if (reachable.has(source.fileName)) {\n const live = liveSymbols(source);\n for (const statement of source.statements) {\n if (\n !(\n ts.isImportDeclaration(statement) ||\n ts.isExportDeclaration(statement)\n ) ||\n !statement.moduleSpecifier\n )\n continue;\n if (ts.isImportDeclaration(statement) && statement.importClause) {\n const clause = statement.importClause;\n if (clause.isTypeOnly) continue;\n const named = clause.namedBindings;\n const names = [\n ...(clause.name ? [clause.name] : []),\n ...(named && ts.isNamedImports(named)\n ? named.elements\n .filter((item) => !item.isTypeOnly)\n .map((item) => item.name)\n : named\n ? [named.name]\n : []),\n ];\n if (\n !names.some((name) => {\n const symbol = index.symbolAt(name, source);\n return symbol && live.has(symbol);\n })\n )\n continue;\n }\n if (ts.isExportDeclaration(statement) && statement.isTypeOnly)\n continue;\n if (\n ts.isExportDeclaration(statement) &&\n statement.exportClause &&\n ts.isNamedExports(statement.exportClause) &&\n !statement.exportClause.elements.some((item) => {\n const ref = index.resolve(item.name, source);\n return !ref || !removed.has(ref.id);\n })\n )\n continue;\n const declarations =\n index.symbolAt(statement.moduleSpecifier, source)?.declarations ??\n [];\n for (const declaration of declarations)\n if (\n ts.isSourceFile(declaration) &&\n !reachable.has(declaration.fileName)\n ) {\n reachable.add(declaration.fileName);\n graphChanged = true;\n }\n }\n }\n }\n };\n // An explicitly consumed implementation keeps its original identity, even on another platform.\n let changed = true;\n while (changed) {\n changed = false;\n expandReachable();\n const consume = (ref: ClassReference, dispatch = true) => {\n if (!index.isComponent(ref)) return;\n if (dispatch && index.metadata(ref).abstract) index.select(ref);\n if (removed.has(ref.id)) {\n keep(ref);\n changed = true;\n }\n const pair = dispatch && allPairs.find((pair) => pair.base.id === ref.id);\n if (pair && !pairs.some((item) => item.base.id === ref.id)) {\n pairs.push(pair);\n keep(pair.base);\n keep(pair.implementation);\n reachable.add(pair.implementation.filePath);\n changed = true;\n }\n };\n for (const source of index.sources) {\n if (!reachable.has(source.fileName)) continue;\n const visit = (node: ts.Node) => {\n const owner =\n (ts.isClassDeclaration(node) || ts.isClassExpression(node)) &&\n index.classes.find((ref) => ref.declaration === node);\n if (owner && removed.has(owner.id)) return;\n if (\n ts.isTypeNode(node) ||\n ts.isHeritageClause(node) ||\n ts.isImportDeclaration(node) ||\n ts.isExportDeclaration(node) ||\n (ts.isDecorator(node) && consumedDecorators.has(node))\n )\n return;\n if (\n ts.isIdentifier(node) &&\n !(\n (ts.isClassDeclaration(node.parent) ||\n ts.isClassExpression(node.parent)) &&\n node.parent.name === node\n )\n ) {\n const namespace = index.symbolAt(node, source);\n if (\n namespace?.exports &&\n !(\n ts.isPropertyAccessExpression(node.parent) &&\n node.parent.expression === node\n )\n ) {\n for (const value of namespace.exports.values())\n for (const declaration of value.declarations ?? []) {\n const explicit = index.classes.find(\n (item) => item.declaration === declaration\n );\n if (explicit) consume(explicit);\n }\n }\n const ref = index.resolve(node, source);\n if (ref) consume(ref, !directlyConstructed(node));\n }\n ts.forEachChild(node, visit);\n };\n visit(source);\n }\n }\n const active = decorated.length > 0;\n const exported = new Map<string, ClassReference[]>();\n for (const pair of pairs)\n for (const ref of [pair.base, pair.implementation]) {\n const refs = exported.get(ref.filePath) ?? [];\n if (!refs.some((item) => item.id === ref.id)) refs.push(ref);\n exported.set(ref.filePath, refs);\n }\n const entryPath = canonicalPath(entry);\n const entrySource = index.classes.find(\n (ref) => ref.filePath === entryPath\n )?.source;\n const hoisted = new Set<ts.Statement>();\n const hoistedNames = new Set<string>();\n if (entrySource && exported.has(entryPath)) {\n // Split entry-owned declarations from app initialization. This also breaks the\n // otherwise unavoidable bootstrap -> implementation -> main -> app cycle.\n const statements = new Set(entrySource.statements);\n const include = (statement: ts.Statement) => {\n if (hoisted.has(statement) || ts.isImportDeclaration(statement)) return;\n hoisted.add(statement);\n const visit = (node: ts.Node) => {\n if (ts.isIdentifier(node)) {\n const symbol = index.symbolAt(node, entrySource);\n for (const declaration of symbol?.declarations ?? []) {\n let top: ts.Node = declaration;\n while (top.parent && top.parent !== entrySource) top = top.parent;\n if (statements.has(top as ts.Statement))\n include(top as ts.Statement);\n }\n }\n ts.forEachChild(node, visit);\n };\n ts.forEachChild(statement, visit);\n };\n for (const ref of index.classes.filter(\n (ref) =>\n ref.filePath === entryPath &&\n !removed.has(ref.id) &&\n index.isComponent(ref)\n )) {\n let top: ts.Node = ref.declaration;\n while (top.parent !== entrySource) top = top.parent;\n include(top as ts.Statement);\n }\n for (const statement of entrySource.statements) {\n if (\n ts.isExportDeclaration(statement) &&\n !statement.moduleSpecifier &&\n statement.exportClause &&\n ts.isNamedExports(statement.exportClause) &&\n statement.exportClause.elements.every((item) => {\n const ref = index.resolve(item.name, entrySource);\n return ref && hoisted.has(ref.declaration as ts.Statement);\n })\n )\n include(statement);\n if (ts.isExportAssignment(statement)) {\n const ref = index.resolve(statement.expression, entrySource);\n if (ref && hoisted.has(ref.declaration as ts.Statement))\n include(statement);\n }\n }\n for (const statement of hoisted) {\n if (ts.isClassDeclaration(statement) && !statement.name) {\n const ref = index.classes.find(\n (item) => item.declaration === statement\n );\n if (ref) hoistedNames.add(localName(ref));\n }\n if (\n (ts.isClassDeclaration(statement) ||\n ts.isFunctionDeclaration(statement) ||\n ts.isEnumDeclaration(statement)) &&\n statement.name\n )\n hoistedNames.add(statement.name.text);\n if (ts.isVariableStatement(statement))\n for (const declaration of statement.declarationList.declarations)\n for (const name of bindingIdentifiers(declaration.name))\n hoistedNames.add(name.text);\n }\n }\n const hoistedExports = new Set<string>();\n for (const statement of hoisted) {\n const modifiers = ts.canHaveModifiers(statement)\n ? ts.getModifiers(statement)\n : undefined;\n if (\n modifiers?.some((item) => item.kind === ts.SyntaxKind.DefaultKeyword) ||\n ts.isExportAssignment(statement)\n )\n hoistedExports.add('default');\n else if (\n modifiers?.some((item) => item.kind === ts.SyntaxKind.ExportKeyword) &&\n (ts.isClassDeclaration(statement) ||\n ts.isFunctionDeclaration(statement) ||\n ts.isEnumDeclaration(statement)) &&\n statement.name\n )\n hoistedExports.add(statement.name.text);\n if (\n modifiers?.some((item) => item.kind === ts.SyntaxKind.ExportKeyword) &&\n ts.isVariableStatement(statement)\n )\n for (const declaration of statement.declarationList.declarations)\n for (const name of bindingIdentifiers(declaration.name))\n hoistedExports.add(name.text);\n if (\n ts.isExportDeclaration(statement) &&\n statement.exportClause &&\n ts.isNamedExports(statement.exportClause)\n )\n for (const item of statement.exportClause.elements)\n hoistedExports.add(item.name.text);\n }\n if (entrySource && hoisted.size) {\n let earlierEffect: ts.Statement | undefined;\n for (const statement of entrySource.statements) {\n if (hoisted.has(statement)) {\n if (earlierEffect && !ts.isFunctionDeclaration(statement))\n throw new Error(\n `Cannot initialize entry-owned platform component after application side effects in ${entryPath}; move component definitions to a separate module`\n );\n } else if (\n !ts.isImportDeclaration(statement) &&\n !ts.isFunctionDeclaration(statement) &&\n !ts.isInterfaceDeclaration(statement) &&\n !ts.isTypeAliasDeclaration(statement) &&\n !ts.isExportDeclaration(statement)\n )\n earlierEffect = statement;\n }\n const dependencySymbols = new Set<ts.Symbol>();\n for (const statement of hoisted) {\n const name =\n ts.isClassDeclaration(statement) ||\n ts.isFunctionDeclaration(statement) ||\n ts.isEnumDeclaration(statement)\n ? statement.name\n : undefined;\n if (name) {\n const symbol = index.symbolAt(name, entrySource);\n if (symbol) dependencySymbols.add(symbol);\n }\n if (ts.isVariableStatement(statement))\n for (const declaration of statement.declarationList.declarations) {\n for (const name of bindingIdentifiers(declaration.name)) {\n const symbol = index.symbolAt(name, entrySource);\n if (symbol) dependencySymbols.add(symbol);\n }\n }\n }\n const visit = (node: ts.Node) => {\n if (hoisted.has(node as ts.Statement)) return;\n const target =\n ts.isBinaryExpression(node) &&\n node.operatorToken.kind >= ts.SyntaxKind.FirstAssignment &&\n node.operatorToken.kind <= ts.SyntaxKind.LastAssignment\n ? node.left\n : (ts.isPrefixUnaryExpression(node) ||\n ts.isPostfixUnaryExpression(node)) &&\n (node.operator === ts.SyntaxKind.PlusPlusToken ||\n node.operator === ts.SyntaxKind.MinusMinusToken)\n ? node.operand\n : undefined;\n if (\n target &&\n ts.isIdentifier(target) &&\n dependencySymbols.has(index.symbolAt(target, entrySource)!)\n )\n throw new Error(\n `Cannot mutate entry-owned component dependency ${target.text} outside its definition module; move component definitions to a separate module`\n );\n ts.forEachChild(node, visit);\n };\n visit(entrySource);\n }\n const definitionPath = (path: string) =>\n path === entryPath && hoisted.size ? DEFINITIONS + path : path;\n function transform(\n path: string,\n contents: string,\n definitions = false\n ): string {\n if (!active) return contents;\n if (!eligibleSources.has(path) && !exported.has(path)) return contents;\n const source =\n index.sources.find((source) => source.fileName === path) ??\n ts.createSourceFile(path, contents, ts.ScriptTarget.Latest, true);\n // Use the checker's original AST so symbol ownership survives pruning.\n const edits: Edit[] = [];\n const dropped: ts.Node[] = [];\n for (const ref of index.classes.filter((ref) => ref.filePath === path)) {\n if (removed.has(ref.id)) {\n let node: ts.Node = ref.declaration;\n if (ts.isClassExpression(node) && ts.isVariableDeclaration(node.parent))\n node = node.parent.parent.parent;\n edits.push({ start: node.getStart(source), end: node.end, text: '' });\n dropped.push(node);\n continue;\n }\n for (const decorator of ts.getDecorators(ref.declaration) ?? [])\n if (consumedDecorators.has(decorator)) {\n edits.push({\n start: decorator.getStart(source),\n end: decorator.end,\n text: '',\n });\n dropped.push(decorator);\n }\n }\n if (path === entryPath && hoisted.size) {\n for (const statement of source.statements) {\n if (ts.isImportDeclaration(statement)) continue;\n const remove = definitions\n ? !hoisted.has(statement)\n : hoisted.has(statement);\n if (remove && !dropped.some((node) => node === statement)) {\n // Supersede decorator/class edits inside removed statements.\n for (let i = edits.length - 1; i >= 0; i--)\n if (\n edits[i]!.start >= statement.getStart(source) &&\n edits[i]!.end <= statement.end\n )\n edits.splice(i, 1);\n edits.push({\n start: statement.getStart(source),\n end: statement.end,\n text: '',\n });\n dropped.push(statement);\n }\n }\n }\n for (const statement of source.statements)\n if (\n ts.isExportDeclaration(statement) &&\n statement.exportClause &&\n ts.isNamedExports(statement.exportClause) &&\n !dropped.includes(statement)\n ) {\n const elements = statement.exportClause.elements.filter((item) => {\n const ref = index.resolve(item.name, source);\n if (ref && removed.has(ref.id)) {\n dropped.push(item);\n return false;\n }\n return true;\n });\n const entryExports =\n hoisted.size &&\n statement.moduleSpecifier &&\n elements.length &&\n elements.every(\n (item) => index.resolve(item.name, source)?.filePath === entryPath\n );\n if (\n entryExports ||\n elements.length !== statement.exportClause.elements.length\n )\n edits.push({\n start: statement.getStart(source),\n end: statement.end,\n text: elements.length\n ? `export {${elements.map((item) => item.getText(source)).join(',')}}${statement.moduleSpecifier ? ` from ${entryExports ? JSON.stringify(DEFINITIONS + entryPath) : statement.moduleSpecifier.getText(source)}` : ''};`\n : '',\n });\n }\n const used = liveSymbols(source, new Set(dropped));\n for (const statement of source.statements)\n if (ts.isImportDeclaration(statement) && statement.importClause) {\n const clause = statement.importClause;\n const named = clause.namedBindings;\n const alive = (node: ts.Node) => {\n const symbol = index.symbolAt(node, source);\n return !!symbol && used.has(symbol);\n };\n const defaultName =\n clause.name && alive(clause.name) ? clause.name.text : undefined;\n const namedText =\n named && ts.isNamedImports(named)\n ? named.elements\n .filter((item) => !item.isTypeOnly && alive(item.name))\n .map((item) => item.getText(source))\n : [];\n const namespace =\n named && ts.isNamespaceImport(named) && alive(named.name)\n ? named.getText(source)\n : undefined;\n const parts = [\n defaultName,\n namespace ??\n (namedText.length ? `{${namedText.join(',')}}` : undefined),\n ].filter(Boolean);\n // Retain imports that were already unused; remove only bindings used solely by removed code.\n const originalNames = [\n ...(clause.name ? [clause.name] : []),\n ...(named && ts.isNamedImports(named)\n ? named.elements.map((item) => item.name)\n : named\n ? [named.name]\n : []),\n ];\n const originallyUsed = originalNames.some((name) => {\n const symbol = index.symbolAt(name, source);\n let found = false;\n const scan = (node: ts.Node) => {\n if (ts.isImportDeclaration(node)) return;\n if (\n ts.isIdentifier(node) &&\n node !== name &&\n index.symbolAt(node, source) === symbol\n )\n found = true;\n ts.forEachChild(node, scan);\n };\n scan(source);\n return found;\n });\n if (!parts.length && originallyUsed)\n edits.push({\n start: statement.getStart(source),\n end: statement.end,\n text: '',\n });\n else if (parts.length) {\n let module = statement.moduleSpecifier.getText(source);\n // Implementations importing an entry-owned base must see definitions without evaluating the app.\n if (ts.isStringLiteral(statement.moduleSpecifier) && hoisted.size) {\n const values = [\n ...(clause.name ? [clause.name] : []),\n ...(named && ts.isNamedImports(named)\n ? named.elements.map((item) => item.name)\n : []),\n ];\n const refs = values.map((item) => index.resolve(item, source));\n if (refs.length && refs.every((ref) => ref?.filePath === entryPath))\n module = JSON.stringify(DEFINITIONS + entryPath);\n if (named && ts.isNamespaceImport(named)) {\n const namespaceSymbol = index.symbolAt(named.name, source);\n const moduleSource = namespaceSymbol?.declarations?.find(\n ts.isSourceFile\n );\n if (moduleSource?.fileName === entryPath) {\n let onlyDefinitions = true;\n const scan = (node: ts.Node) => {\n if (dropped.includes(node) || ts.isImportDeclaration(node))\n return;\n if (\n ts.isIdentifier(node) &&\n index.symbolAt(node, source) === namespaceSymbol\n ) {\n if (\n !ts.isPropertyAccessExpression(node.parent) ||\n node.parent.expression !== node ||\n !hoistedExports.has(node.parent.name.text)\n )\n onlyDefinitions = false;\n }\n ts.forEachChild(node, scan);\n };\n scan(source);\n if (!onlyDefinitions)\n throw new Error(\n `Platform implementation namespace import from ${entryPath} also consumes app initialization; move component definitions to a separate module`\n );\n module = JSON.stringify(DEFINITIONS + entryPath);\n }\n }\n }\n edits.push({\n start: statement.getStart(source),\n end: statement.end,\n text: `import ${parts.join(',')} from ${module};`,\n });\n }\n }\n for (const ref of exported.get(path) ?? [])\n if (\n ref.className === 'default' &&\n (path !== entryPath || definitions || !hoisted.size)\n ) {\n const keyword = ref.declaration\n .getChildren(source)\n .find((node) => node.kind === ts.SyntaxKind.ClassKeyword);\n if (!keyword)\n throw new Error(`Cannot name anonymous component in ${path}`);\n edits.push({\n start: keyword.end,\n end: keyword.end,\n text: ' ' + localName(ref),\n });\n }\n let result = apply(contents, edits);\n if (path === entryPath && hoisted.size && !definitions) {\n result =\n `import {${[...hoistedNames].join(',')}} from ${JSON.stringify(DEFINITIONS + entryPath)};\\n` +\n result;\n for (const statement of hoisted) {\n if (ts.isClassDeclaration(statement) && !statement.name) {\n const ref = index.classes.find(\n (item) => item.declaration === statement\n );\n if (ref) result += `\\nexport {${localName(ref)} as default};`;\n }\n if (\n ts.isExportDeclaration(statement) ||\n ts.isExportAssignment(statement)\n )\n result += '\\n' + statement.getText(source);\n if (\n ts.canHaveModifiers(statement) &&\n ts\n .getModifiers(statement)\n ?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword)\n ) {\n if (\n (ts.isClassDeclaration(statement) ||\n ts.isFunctionDeclaration(statement) ||\n ts.isEnumDeclaration(statement)) &&\n statement.name\n )\n result += `\\nexport {${statement.name.text}${ts.getModifiers(statement)?.some((item) => item.kind === ts.SyntaxKind.DefaultKeyword) ? ' as default' : ''}};`;\n if (ts.isVariableStatement(statement))\n for (const declaration of statement.declarationList.declarations)\n for (const name of bindingIdentifiers(declaration.name))\n result += `\\nexport {${name.text}};`;\n }\n }\n }\n if (definitions) {\n const alreadyExported = new Set<string>();\n for (const statement of hoisted)\n if (\n ts.canHaveModifiers(statement) &&\n ts\n .getModifiers(statement)\n ?.some((item) => item.kind === ts.SyntaxKind.ExportKeyword)\n ) {\n if (\n (ts.isClassDeclaration(statement) ||\n ts.isFunctionDeclaration(statement) ||\n ts.isEnumDeclaration(statement)) &&\n statement.name &&\n !ts\n .getModifiers(statement)\n ?.some((item) => item.kind === ts.SyntaxKind.DefaultKeyword)\n )\n alreadyExported.add(statement.name.text);\n if (ts.isVariableStatement(statement))\n for (const declaration of statement.declarationList.declarations)\n for (const name of bindingIdentifiers(declaration.name))\n alreadyExported.add(name.text);\n }\n const names = [...hoistedNames].filter(\n (name) => !alreadyExported.has(name)\n );\n if (names.length) result += `\\nexport {${names.join(',')}};`;\n }\n if (path !== entryPath || definitions || !hoisted.size)\n for (const ref of exported.get(path) ?? []) {\n result += `\\nexport {${localName(ref)} as ${alias(ref)}};`;\n }\n return result;\n }\n const imports = pairs.flatMap((pair) => [pair.base, pair.implementation]);\n const unique = [...new Map(imports.map((ref) => [ref.id, ref])).values()];\n const bootstrap = [\n `import {bindComponentImplementations} from ${JSON.stringify(frameworkEntry)};`,\n ...unique.map(\n (ref) =>\n `import {${alias(ref)}} from ${JSON.stringify(definitionPath(ref.filePath))};`\n ),\n `bindComponentImplementations([${pairs.map((pair) => `[${alias(pair.base)},${alias(pair.implementation)}]`).join(',')}]);`,\n `const entry = await import(${JSON.stringify(entryPath)}); export const app = entry.app;`,\n ].join('\\n');\n const plugin: BunPlugin = {\n name: 'transone-platform-bootstrap',\n setup(build) {\n build.onResolve({ filter: /^transone:platform-bootstrap$/ }, () => ({\n path: BOOT,\n namespace: 'transone-platform',\n }));\n build.onLoad({ filter: /.*/, namespace: 'transone-platform' }, () => ({\n contents: bootstrap,\n loader: 'ts',\n resolveDir: dirname(entryPath),\n }));\n build.onResolve(\n { filter: /^transone:component-definitions:/ },\n ({ path }) => ({\n // Bun keys loaded modules by path even across namespaces. Keep this\n // distinct from the original entry module or its app executes early.\n path: path.slice(DEFINITIONS.length) + '?transone-definitions',\n namespace: 'transone-definitions',\n })\n );\n },\n };\n return {\n sourcePaths: index.sources.map((source) => source.fileName),\n active,\n entrypoint: active ? BOOT : entry,\n plugin,\n transform: (path: string, contents: string, definitions = false) =>\n transform(canonicalPath(path), contents, definitions),\n };\n}\nexport type WebComponentContext = ReturnType<typeof createWebComponentContext>;\n"
7
+ ],
8
+ "mappings": "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",
9
+ "debugId": "C803F75040FC727464756E2164756E21",
10
+ "names": []
11
+ }