@oddsquad/vite-plugin-lit 0.7.0 → 0.8.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 (292) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/LICENSE +1 -1
  3. package/README.md +14 -7
  4. package/bin.mjs +2 -8
  5. package/client.d.ts +0 -6
  6. package/dist/client/assets/{browser-agent-rpc-BXhoSh1z-BuCvPGjS.js → browser-agent-rpc-BXhoSh1z-ybEeG-x9.js} +2 -2
  7. package/dist/client/assets/{browser-agent-rpc-BXhoSh1z-BuCvPGjS.js.map → browser-agent-rpc-BXhoSh1z-ybEeG-x9.js.map} +1 -1
  8. package/dist/client/assets/{index-D632jo79.js → index-CgkhETVR.js} +2 -144
  9. package/dist/client/assets/index-CgkhETVR.js.map +1 -0
  10. package/dist/client/index.html +1 -1
  11. package/dist/standalone/lit-devtools.js +2 -105
  12. package/index.d.ts +0 -5
  13. package/index.d.ts.map +1 -1
  14. package/index.js +1 -5
  15. package/index.js.map +1 -1
  16. package/lib/color-scheme.d.ts +0 -5
  17. package/lib/color-scheme.d.ts.map +1 -1
  18. package/lib/color-scheme.js +0 -5
  19. package/lib/color-scheme.js.map +1 -1
  20. package/lib/confine.d.ts +0 -5
  21. package/lib/confine.d.ts.map +1 -1
  22. package/lib/confine.js +0 -5
  23. package/lib/confine.js.map +1 -1
  24. package/lib/devframe/allowed-origins.d.ts +11 -3
  25. package/lib/devframe/allowed-origins.d.ts.map +1 -1
  26. package/lib/devframe/allowed-origins.js +0 -5
  27. package/lib/devframe/allowed-origins.js.map +1 -1
  28. package/lib/devframe/definition.d.ts +7 -3
  29. package/lib/devframe/definition.d.ts.map +1 -1
  30. package/lib/devframe/definition.js +1 -6
  31. package/lib/devframe/definition.js.map +1 -1
  32. package/lib/devframe/icon.d.ts +0 -5
  33. package/lib/devframe/icon.d.ts.map +1 -1
  34. package/lib/devframe/icon.js +0 -5
  35. package/lib/devframe/icon.js.map +1 -1
  36. package/lib/devframe/launch-editor.d.ts +0 -5
  37. package/lib/devframe/launch-editor.d.ts.map +1 -1
  38. package/lib/devframe/launch-editor.js +0 -5
  39. package/lib/devframe/launch-editor.js.map +1 -1
  40. package/lib/devframe/paths.d.ts +8 -3
  41. package/lib/devframe/paths.d.ts.map +1 -1
  42. package/lib/devframe/paths.js +0 -5
  43. package/lib/devframe/paths.js.map +1 -1
  44. package/lib/devframe/protocol.d.ts +6 -3
  45. package/lib/devframe/protocol.d.ts.map +1 -1
  46. package/lib/devframe/protocol.js +0 -5
  47. package/lib/devframe/protocol.js.map +1 -1
  48. package/lib/devframe/rpc-source.d.ts +15 -3
  49. package/lib/devframe/rpc-source.d.ts.map +1 -1
  50. package/lib/devframe/rpc-source.js +0 -5
  51. package/lib/devframe/rpc-source.js.map +1 -1
  52. package/lib/devframe/source.d.ts +0 -5
  53. package/lib/devframe/source.d.ts.map +1 -1
  54. package/lib/devframe/source.js +7 -3
  55. package/lib/devframe/source.js.map +1 -1
  56. package/lib/devframe/vite.d.ts +0 -5
  57. package/lib/devframe/vite.d.ts.map +1 -1
  58. package/lib/devframe/vite.js +16 -3
  59. package/lib/devframe/vite.js.map +1 -1
  60. package/lib/http.d.ts +0 -5
  61. package/lib/http.d.ts.map +1 -1
  62. package/lib/http.js +0 -5
  63. package/lib/http.js.map +1 -1
  64. package/lib/icons.d.ts +0 -5
  65. package/lib/icons.d.ts.map +1 -1
  66. package/lib/icons.js +0 -5
  67. package/lib/icons.js.map +1 -1
  68. package/lib/options.d.ts +0 -5
  69. package/lib/options.d.ts.map +1 -1
  70. package/lib/options.js +0 -5
  71. package/lib/options.js.map +1 -1
  72. package/lib/override-baselines.d.ts +0 -5
  73. package/lib/override-baselines.d.ts.map +1 -1
  74. package/lib/override-baselines.js +0 -5
  75. package/lib/override-baselines.js.map +1 -1
  76. package/lib/plugin.d.ts +0 -5
  77. package/lib/plugin.d.ts.map +1 -1
  78. package/lib/plugin.js +0 -5
  79. package/lib/plugin.js.map +1 -1
  80. package/lib/plugins/css-literals.d.ts +0 -5
  81. package/lib/plugins/css-literals.d.ts.map +1 -1
  82. package/lib/plugins/css-literals.js +0 -5
  83. package/lib/plugins/css-literals.js.map +1 -1
  84. package/lib/plugins/css-queries.d.ts +0 -5
  85. package/lib/plugins/css-queries.d.ts.map +1 -1
  86. package/lib/plugins/css-queries.js +0 -5
  87. package/lib/plugins/css-queries.js.map +1 -1
  88. package/lib/plugins/open-in-editor.d.ts +0 -5
  89. package/lib/plugins/open-in-editor.d.ts.map +1 -1
  90. package/lib/plugins/open-in-editor.js +0 -5
  91. package/lib/plugins/open-in-editor.js.map +1 -1
  92. package/lib/plugins/private-fields.d.ts +0 -5
  93. package/lib/plugins/private-fields.d.ts.map +1 -1
  94. package/lib/plugins/private-fields.js +0 -5
  95. package/lib/plugins/private-fields.js.map +1 -1
  96. package/lib/plugins/shared.d.ts +0 -5
  97. package/lib/plugins/shared.d.ts.map +1 -1
  98. package/lib/plugins/shared.js +0 -5
  99. package/lib/plugins/shared.js.map +1 -1
  100. package/lib/plugins/timeline-virtual.d.ts +0 -5
  101. package/lib/plugins/timeline-virtual.d.ts.map +1 -1
  102. package/lib/plugins/timeline-virtual.js +0 -5
  103. package/lib/plugins/timeline-virtual.js.map +1 -1
  104. package/lib/runtime/child-state.d.ts +0 -5
  105. package/lib/runtime/child-state.d.ts.map +1 -1
  106. package/lib/runtime/child-state.js +18 -3
  107. package/lib/runtime/child-state.js.map +1 -1
  108. package/lib/runtime/css.d.ts +14 -3
  109. package/lib/runtime/css.d.ts.map +1 -1
  110. package/lib/runtime/css.js +3 -5
  111. package/lib/runtime/css.js.map +1 -1
  112. package/lib/runtime/edge-panel.d.ts +8 -3
  113. package/lib/runtime/edge-panel.d.ts.map +1 -1
  114. package/lib/runtime/edge-panel.js +0 -5
  115. package/lib/runtime/edge-panel.js.map +1 -1
  116. package/lib/runtime/fonts.d.ts +0 -5
  117. package/lib/runtime/fonts.d.ts.map +1 -1
  118. package/lib/runtime/fonts.js +0 -5
  119. package/lib/runtime/fonts.js.map +1 -1
  120. package/lib/runtime/indicator.d.ts +3 -3
  121. package/lib/runtime/indicator.js +0 -5
  122. package/lib/runtime/indicator.js.map +1 -1
  123. package/lib/runtime/inspector/collect.d.ts +3 -3
  124. package/lib/runtime/inspector/collect.d.ts.map +1 -1
  125. package/lib/runtime/inspector/collect.js +0 -5
  126. package/lib/runtime/inspector/collect.js.map +1 -1
  127. package/lib/runtime/inspector/highlight.d.ts +10 -3
  128. package/lib/runtime/inspector/highlight.d.ts.map +1 -1
  129. package/lib/runtime/inspector/highlight.js +0 -5
  130. package/lib/runtime/inspector/highlight.js.map +1 -1
  131. package/lib/runtime/inspector/install.d.ts +6 -3
  132. package/lib/runtime/inspector/install.d.ts.map +1 -1
  133. package/lib/runtime/inspector/install.js +0 -5
  134. package/lib/runtime/inspector/install.js.map +1 -1
  135. package/lib/runtime/inspector/serialize.d.ts +4 -3
  136. package/lib/runtime/inspector/serialize.d.ts.map +1 -1
  137. package/lib/runtime/inspector/serialize.js +0 -5
  138. package/lib/runtime/inspector/serialize.js.map +1 -1
  139. package/lib/runtime/intern.d.ts +11 -3
  140. package/lib/runtime/intern.d.ts.map +1 -1
  141. package/lib/runtime/intern.js +11 -3
  142. package/lib/runtime/intern.js.map +1 -1
  143. package/lib/runtime/overrides.d.ts +3 -3
  144. package/lib/runtime/overrides.d.ts.map +1 -1
  145. package/lib/runtime/overrides.js +0 -5
  146. package/lib/runtime/overrides.js.map +1 -1
  147. package/lib/runtime/page-channel.d.ts +0 -5
  148. package/lib/runtime/page-channel.d.ts.map +1 -1
  149. package/lib/runtime/page-channel.js +13 -3
  150. package/lib/runtime/page-channel.js.map +1 -1
  151. package/lib/runtime/patch.d.ts +0 -5
  152. package/lib/runtime/patch.d.ts.map +1 -1
  153. package/lib/runtime/patch.js +0 -5
  154. package/lib/runtime/patch.js.map +1 -1
  155. package/lib/runtime/rpc-transport.d.ts +13 -3
  156. package/lib/runtime/rpc-transport.d.ts.map +1 -1
  157. package/lib/runtime/rpc-transport.js +3 -5
  158. package/lib/runtime/rpc-transport.js.map +1 -1
  159. package/lib/runtime/source-meta.d.ts +0 -5
  160. package/lib/runtime/source-meta.d.ts.map +1 -1
  161. package/lib/runtime/source-meta.js +0 -5
  162. package/lib/runtime/source-meta.js.map +1 -1
  163. package/lib/runtime/source-overlay/editors.d.ts +0 -5
  164. package/lib/runtime/source-overlay/editors.d.ts.map +1 -1
  165. package/lib/runtime/source-overlay/editors.js +0 -5
  166. package/lib/runtime/source-overlay/editors.js.map +1 -1
  167. package/lib/runtime/source-overlay/mask-path.d.ts +0 -5
  168. package/lib/runtime/source-overlay/mask-path.d.ts.map +1 -1
  169. package/lib/runtime/source-overlay/mask-path.js +0 -5
  170. package/lib/runtime/source-overlay/mask-path.js.map +1 -1
  171. package/lib/runtime/source-overlay/overlay-element.d.ts +0 -5
  172. package/lib/runtime/source-overlay/overlay-element.d.ts.map +1 -1
  173. package/lib/runtime/source-overlay/overlay-element.js +0 -5
  174. package/lib/runtime/source-overlay/overlay-element.js.map +1 -1
  175. package/lib/runtime/source-overlay/source-host.d.ts +0 -5
  176. package/lib/runtime/source-overlay/source-host.d.ts.map +1 -1
  177. package/lib/runtime/source-overlay/source-host.js +0 -5
  178. package/lib/runtime/source-overlay/source-host.js.map +1 -1
  179. package/lib/runtime/source-overlay/template.d.ts +0 -5
  180. package/lib/runtime/source-overlay/template.d.ts.map +1 -1
  181. package/lib/runtime/source-overlay/template.js +0 -5
  182. package/lib/runtime/source-overlay/template.js.map +1 -1
  183. package/lib/runtime/source-overlay.d.ts +0 -5
  184. package/lib/runtime/source-overlay.d.ts.map +1 -1
  185. package/lib/runtime/source-overlay.js +0 -5
  186. package/lib/runtime/source-overlay.js.map +1 -1
  187. package/lib/runtime/standalone.d.ts +0 -5
  188. package/lib/runtime/standalone.d.ts.map +1 -1
  189. package/lib/runtime/standalone.js +0 -5
  190. package/lib/runtime/standalone.js.map +1 -1
  191. package/lib/runtime/timeline/chrome-tracks.d.ts +0 -5
  192. package/lib/runtime/timeline/chrome-tracks.d.ts.map +1 -1
  193. package/lib/runtime/timeline/chrome-tracks.js +5 -3
  194. package/lib/runtime/timeline/chrome-tracks.js.map +1 -1
  195. package/lib/runtime/timeline/clock.d.ts +7 -3
  196. package/lib/runtime/timeline/clock.d.ts.map +1 -1
  197. package/lib/runtime/timeline/clock.js +0 -5
  198. package/lib/runtime/timeline/clock.js.map +1 -1
  199. package/lib/runtime/timeline/flash.d.ts +0 -5
  200. package/lib/runtime/timeline/flash.d.ts.map +1 -1
  201. package/lib/runtime/timeline/flash.js +15 -3
  202. package/lib/runtime/timeline/flash.js.map +1 -1
  203. package/lib/runtime/timeline/identity.d.ts +0 -5
  204. package/lib/runtime/timeline/identity.d.ts.map +1 -1
  205. package/lib/runtime/timeline/identity.js +9 -3
  206. package/lib/runtime/timeline/identity.js.map +1 -1
  207. package/lib/runtime/timeline/input.d.ts +0 -5
  208. package/lib/runtime/timeline/input.d.ts.map +1 -1
  209. package/lib/runtime/timeline/input.js +2 -3
  210. package/lib/runtime/timeline/input.js.map +1 -1
  211. package/lib/runtime/timeline/install.d.ts +11 -3
  212. package/lib/runtime/timeline/install.d.ts.map +1 -1
  213. package/lib/runtime/timeline/install.js +0 -5
  214. package/lib/runtime/timeline/install.js.map +1 -1
  215. package/lib/runtime/timeline/lifecycle.d.ts +13 -3
  216. package/lib/runtime/timeline/lifecycle.d.ts.map +1 -1
  217. package/lib/runtime/timeline/lifecycle.js +0 -5
  218. package/lib/runtime/timeline/lifecycle.js.map +1 -1
  219. package/lib/runtime/timeline/public-api.d.ts +6 -3
  220. package/lib/runtime/timeline/public-api.d.ts.map +1 -1
  221. package/lib/runtime/timeline/public-api.js +0 -5
  222. package/lib/runtime/timeline/public-api.js.map +1 -1
  223. package/lib/runtime/timeline/render.d.ts +0 -5
  224. package/lib/runtime/timeline/render.d.ts.map +1 -1
  225. package/lib/runtime/timeline/render.js +21 -3
  226. package/lib/runtime/timeline/render.js.map +1 -1
  227. package/lib/runtime/timeline/transport.d.ts +0 -5
  228. package/lib/runtime/timeline/transport.d.ts.map +1 -1
  229. package/lib/runtime/timeline/transport.js +10 -3
  230. package/lib/runtime/timeline/transport.js.map +1 -1
  231. package/lib/segmented-tabs.d.ts +0 -5
  232. package/lib/segmented-tabs.d.ts.map +1 -1
  233. package/lib/segmented-tabs.js +0 -5
  234. package/lib/segmented-tabs.js.map +1 -1
  235. package/lib/snapshot.d.ts +11 -3
  236. package/lib/snapshot.d.ts.map +1 -1
  237. package/lib/snapshot.js +0 -5
  238. package/lib/snapshot.js.map +1 -1
  239. package/lib/source-meta.d.ts +0 -5
  240. package/lib/source-meta.d.ts.map +1 -1
  241. package/lib/source-meta.js +0 -5
  242. package/lib/source-meta.js.map +1 -1
  243. package/lib/timeline/derive.d.ts +0 -5
  244. package/lib/timeline/derive.d.ts.map +1 -1
  245. package/lib/timeline/derive.js +22 -3
  246. package/lib/timeline/derive.js.map +1 -1
  247. package/lib/timeline/filter.d.ts +0 -5
  248. package/lib/timeline/filter.d.ts.map +1 -1
  249. package/lib/timeline/filter.js +6 -3
  250. package/lib/timeline/filter.js.map +1 -1
  251. package/lib/timeline/tracks.d.ts +0 -5
  252. package/lib/timeline/tracks.d.ts.map +1 -1
  253. package/lib/timeline/tracks.js +12 -3
  254. package/lib/timeline/tracks.js.map +1 -1
  255. package/lib/tokens.d.ts +0 -5
  256. package/lib/tokens.d.ts.map +1 -1
  257. package/lib/tokens.js +0 -5
  258. package/lib/tokens.js.map +1 -1
  259. package/lib/transform.d.ts +0 -5
  260. package/lib/transform.d.ts.map +1 -1
  261. package/lib/transform.js +0 -5
  262. package/lib/transform.js.map +1 -1
  263. package/lib/types.d.ts +10 -5
  264. package/lib/types.d.ts.map +1 -1
  265. package/lib/types.js +0 -5
  266. package/lib/types.js.map +1 -1
  267. package/lib/wrap-table.d.ts +0 -5
  268. package/lib/wrap-table.d.ts.map +1 -1
  269. package/lib/wrap-table.js +12 -3
  270. package/lib/wrap-table.js.map +1 -1
  271. package/package.json +2 -2
  272. package/types/hmr-incompatibility.d.ts +0 -5
  273. package/types/hmr-incompatibility.d.ts.map +1 -1
  274. package/types/hmr-incompatibility.js +13 -3
  275. package/types/hmr-incompatibility.js.map +1 -1
  276. package/types/in-page.d.ts +0 -5
  277. package/types/in-page.d.ts.map +1 -1
  278. package/types/in-page.js +0 -5
  279. package/types/in-page.js.map +1 -1
  280. package/types/inspector.d.ts +0 -5
  281. package/types/inspector.d.ts.map +1 -1
  282. package/types/inspector.js +13 -3
  283. package/types/inspector.js.map +1 -1
  284. package/types/snapshot.d.ts +0 -5
  285. package/types/snapshot.d.ts.map +1 -1
  286. package/types/snapshot.js +12 -3
  287. package/types/snapshot.js.map +1 -1
  288. package/types/timeline.d.ts +0 -5
  289. package/types/timeline.d.ts.map +1 -1
  290. package/types/timeline.js +0 -5
  291. package/types/timeline.js.map +1 -1
  292. package/dist/client/assets/index-D632jo79.js.map +0 -1
package/lib/plugin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/lib/plugin.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2026 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\nimport {resolve as resolvePath} from 'node:path';\nimport {loadEnv, type Plugin} from 'vite';\nimport MagicString from 'magic-string';\nimport {injectSourceMeta} from './source-meta.js';\nimport {INSTALL_ID, VIRTUAL_PREFIX, transformLitModule} from './transform.js';\nimport {WRAP_TABLE} from './wrap-table.js';\nimport {createLitDevframePlugin} from './devframe/vite.js';\nimport {PACKAGE_VERSION} from './devframe/paths.js';\nimport {\n ENV_PREFIX,\n type LitPluginOptions,\n type ResolvedOptions,\n resolveOptions,\n toFeatureSettings,\n} from './options.js';\nimport {\n OPEN_IN_EDITOR_PATH,\n createOpenInEditorMiddleware,\n} from './plugins/open-in-editor.js';\nimport {litCssQueries} from './plugins/css-queries.js';\nimport {litTimelineVirtual} from './plugins/timeline-virtual.js';\nimport {litCssLiterals} from './plugins/css-literals.js';\nimport {litPrivateFields} from './plugins/private-fields.js';\nimport {resolveRuntimeModule, JS_FILE_RE} from './plugins/shared.js';\n\nexport {createOpenInEditorMiddleware} from './plugins/open-in-editor.js';\nexport {litCssQueries} from './plugins/css-queries.js';\nexport {litTimelineVirtual} from './plugins/timeline-virtual.js';\nexport type {\n HmrIndicatorOptions,\n HmrOptions,\n CssSheetBuild,\n LitPluginOptions,\n ResolvedOptions,\n} from './options.js';\nexport {resolveOptions} from './options.js';\n\n/**\n * Vite plugin set providing HMR, CSS helpers, and Lightning CSS processing\n * for Lit projects.\n */\nexport const litPlugin = (options: LitPluginOptions = {}): Plugin[] => {\n // Resolved from explicit options first, env vars second, defaults last. The\n // `lit-plugin-options` `config` hook below re-resolves with the loaded env\n // once Vite hands us the mode; this initial pass covers code paths that run\n // before (or without) it.\n let resolved: ResolvedOptions = resolveOptions(options, {});\n let root = '';\n // Env resolution lives in its own always-applied plugin: `?css-sheet` is a\n // build-time feature too, and the HMR plugin (`apply: 'serve'`) never gets a\n // `config` hook under `vite build`. `enforce: 'pre'` and first position put\n // it ahead of every other hook that reads `resolved`.\n const optionsPlugin: Plugin = {\n name: 'lit-plugin-options',\n enforce: 'pre',\n config(viteConfig, {mode}) {\n // `loadEnv` reads `.env*` files from the env dir (root by default) and\n // merges in matching `process.env` keys, filtered to the `LIT_PLUGIN`\n // prefix. Explicit options still win (handled in resolveOptions).\n const envDir = viteConfig.envDir\n ? resolvePath(viteConfig.envDir)\n : viteConfig.root\n ? resolvePath(viteConfig.root)\n : process.cwd();\n resolved = resolveOptions(options, loadEnv(mode, envDir, ENV_PREFIX));\n },\n };\n const sourceOverlayPlugin: Plugin = {\n name: 'lit-source-overlay',\n apply: 'serve',\n // Run before Vite's esbuild TS transform so source-meta line numbers are\n // measured against the author's raw source (and the `@customElement … class`\n // forms are still intact), not against transpiled output.\n enforce: 'pre',\n configResolved(config) {\n root = config.root;\n },\n resolveId(id) {\n if (id === '@oddsquad/vite-plugin-lit/source-overlay.js') {\n return resolveRuntimeModule('source-overlay');\n }\n return null;\n },\n configureServer(server) {\n if (!resolved.sourceOverlay) return;\n // Allow opens from everything vite itself is willing to serve\n // (`server.fs.allow` defaults to the workspace root), not just\n // `config.root` — in monorepos, component sources regularly live in\n // sibling packages outside the served app's root.\n const fsAllow = server.config.server.fs?.allow ?? [];\n server.middlewares.use(\n OPEN_IN_EDITOR_PATH,\n createOpenInEditorMiddleware([root, ...fsAllow])\n );\n },\n transform(code, id, transformOptions) {\n if (!resolved.sourceOverlay) return null;\n if (transformOptions?.ssr) return null;\n if (\n id.startsWith('\\0') ||\n id.includes('__x00__') ||\n id.includes('lit-plugin:') ||\n id.includes('/node_modules/')\n ) {\n return null;\n }\n const [file] = id.split('?', 2);\n if (!JS_FILE_RE.test(file) && !id.includes('?html-proxy')) {\n return null;\n }\n if (!code.includes('customElement') && !code.includes('customElements')) {\n return null;\n }\n const ms = new MagicString(code);\n const relativeFile = file.startsWith(root + '/')\n ? file.slice(root.length + 1)\n : file;\n if (!injectSourceMeta(code, relativeFile, ms)) {\n return null;\n }\n return {code: ms.toString(), map: ms.generateMap({hires: true})};\n },\n transformIndexHtml() {\n if (!resolved.sourceOverlay) return;\n const overlayUrl = `/@fs/${resolveRuntimeModule('source-overlay')}`;\n const {\n exclude: _exclude,\n onSelect: _onSelect,\n ...overlayInit\n } = resolved.sourceOverlay;\n const initConfig = {\n ...overlayInit,\n openInEditorPath: OPEN_IN_EDITOR_PATH,\n };\n return [\n {\n tag: 'script',\n attrs: {type: 'module'},\n children: `import {initSourceOverlay} from ${JSON.stringify(overlayUrl)};\\ninitSourceOverlay(${JSON.stringify(initConfig)});\\n`,\n injectTo: 'body',\n },\n ];\n },\n };\n const hmr: Plugin = {\n name: 'lit-plugin',\n apply: 'serve',\n config: () => {\n // Options are already resolved against the loaded env by\n // `lit-plugin-options`, which runs first.\n if (!resolved.hmrEnabled) {\n return;\n }\n // The injected runtime imports are invisible to the dep scanner. The\n // lit family stays prebundle-eligible on purpose: the wrapper modules'\n // bare imports then resolve to the same URL every other importer gets —\n // single lit instance, single template cache.\n return {optimizeDeps: {exclude: ['@oddsquad/vite-plugin-lit']}};\n },\n resolveId(id) {\n // Resolve the browser CSS helpers and indicator runtime to the copy\n // shipped next to this plugin, so they work even when the package\n // isn't reachable through node resolution from the served root (and\n // stay out of prebundling).\n //\n // These bare specifiers must match the package name in package.json —\n // consumers import them by name (see README \"Stylesheets\"), and Vite\n // only consults this hook for the exact string. A rename that misses\n // them turns the fallback into silently dead code.\n if (id === '@oddsquad/vite-plugin-lit/css.js') {\n return resolveRuntimeModule('css');\n }\n if (id === '@oddsquad/vite-plugin-lit/indicator.js') {\n return resolveRuntimeModule('indicator');\n }\n if (id === '@oddsquad/vite-plugin-lit/source-overlay.js') {\n return resolveRuntimeModule('source-overlay');\n }\n if (resolved.hmrEnabled && id.startsWith(VIRTUAL_PREFIX)) {\n return id;\n }\n return null;\n },\n load(id) {\n if (!resolved.hmrEnabled || !id.startsWith(VIRTUAL_PREFIX)) {\n return null;\n }\n if (id === INSTALL_ID) {\n const patchPath = resolveRuntimeModule('patch');\n const runtimeOptions = {\n reconnect: resolved.reconnect,\n onIncompatible: resolved.onIncompatible,\n childState: resolved.childState,\n };\n return {\n code:\n `import {install} from ${JSON.stringify(patchPath)};\\n` +\n `install(${JSON.stringify(runtimeOptions)});\\n`,\n moduleType: 'js',\n };\n }\n const spec = id.slice(VIRTUAL_PREFIX.length);\n const wrappedTags = WRAP_TABLE.get(spec);\n if (wrappedTags === undefined) {\n return null;\n }\n const internPath = resolveRuntimeModule('intern');\n // Browser-native ESM: explicit local exports shadow `export *` names\n // (spec-guaranteed), so everything except the wrapped tags passes\n // through unchanged.\n const lines = [\n `import * as __lit from ${JSON.stringify(spec)};`,\n `import {wrapTag} from ${JSON.stringify(internPath)};`,\n `export * from ${JSON.stringify(spec)};`,\n ];\n for (const {exportName, ns} of wrappedTags) {\n lines.push(\n `export const ${exportName} = wrapTag(__lit.${exportName}, ${JSON.stringify(\n ns\n )});`\n );\n }\n return {code: lines.join('\\n') + '\\n', moduleType: 'js'};\n },\n async transform(code, id, transformOptions) {\n if (!resolved.hmrEnabled) {\n return null;\n }\n if (transformOptions?.ssr) {\n return null;\n }\n if (id.startsWith('\\0') || id.includes('/node_modules/')) {\n return null;\n }\n const [file] = id.split('?', 2);\n // Allow inline scripts extracted from HTML (`?html-proxy`).\n if (!JS_FILE_RE.test(file) && !id.includes('?html-proxy')) {\n return null;\n }\n return transformLitModule(code);\n },\n transformIndexHtml() {\n const tags: {\n tag: string;\n attrs?: Record<string, string | undefined | boolean>;\n children?: string;\n injectTo: 'body';\n }[] = [];\n\n const indicator = resolved.indicator;\n if (indicator) {\n const indicatorUrl = `/@fs/` + resolveRuntimeModule('indicator');\n tags.push(\n {\n tag: 'script',\n attrs: {type: 'module', src: indicatorUrl},\n injectTo: 'body',\n },\n {\n tag: 'lit-devtools-hmr-indicator',\n attrs: indicator.count ? {count: ''} : undefined,\n children: '',\n injectTo: 'body',\n }\n );\n }\n\n if (resolved.timeline) {\n const installUrl = `/@fs/` + resolveRuntimeModule('timeline/install');\n tags.push({\n tag: 'script',\n attrs: {type: 'module', src: installUrl},\n injectTo: 'body',\n });\n // Components inspector runtime — answers the panel's tree/details\n // requests. Paired with the timeline panel, which hosts its tab.\n const inspectorUrl =\n `/@fs/` + resolveRuntimeModule('inspector/install');\n tags.push({\n tag: 'script',\n attrs: {type: 'module', src: inspectorUrl},\n injectTo: 'body',\n });\n }\n\n return tags.length > 0 ? tags : undefined;\n },\n };\n // The source-overlay plugin is always present; its hooks no-op when the\n // feature is disabled (which env may decide), so inclusion can't be gated\n // on the synchronously-known options here.\n const plugins: Plugin[] = [\n optionsPlugin,\n // Getter, not a snapshot: `resolved` is re-resolved against the loaded env\n // in `optionsPlugin`'s `config` hook, which runs after this array is built.\n litCssQueries(() => resolved.cssSheetBuild),\n litTimelineVirtual(() => resolved.timeline),\n litCssLiterals(),\n litPrivateFields(() => resolved.hmrEnabled && resolved.privateFields),\n sourceOverlayPlugin,\n hmr,\n ];\n if (resolved.timeline) {\n // `features` is a getter, not a snapshot: `resolved` is re-resolved\n // against the loaded env in `optionsPlugin`'s `config` hook, which runs\n // after this array is built.\n plugins.push(\n createLitDevframePlugin({\n version: PACKAGE_VERSION,\n features: () => toFeatureSettings(resolved),\n // Only a named editor counts: `toFeatureSettings` reports `vscode`\n // for \"never chose\", which must not turn into a forced `code`.\n configuredEditor: () => {\n const so = resolved.sourceOverlay;\n return so !== false && typeof so.editor === 'string'\n ? so.editor\n : undefined;\n },\n })\n );\n }\n return plugins;\n};\n"]}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/lib/plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import {resolve as resolvePath} from 'node:path';\nimport {loadEnv, type Plugin} from 'vite';\nimport MagicString from 'magic-string';\nimport {injectSourceMeta} from './source-meta.js';\nimport {INSTALL_ID, VIRTUAL_PREFIX, transformLitModule} from './transform.js';\nimport {WRAP_TABLE} from './wrap-table.js';\nimport {createLitDevframePlugin} from './devframe/vite.js';\nimport {PACKAGE_VERSION} from './devframe/paths.js';\nimport {\n ENV_PREFIX,\n type LitPluginOptions,\n type ResolvedOptions,\n resolveOptions,\n toFeatureSettings,\n} from './options.js';\nimport {\n OPEN_IN_EDITOR_PATH,\n createOpenInEditorMiddleware,\n} from './plugins/open-in-editor.js';\nimport {litCssQueries} from './plugins/css-queries.js';\nimport {litTimelineVirtual} from './plugins/timeline-virtual.js';\nimport {litCssLiterals} from './plugins/css-literals.js';\nimport {litPrivateFields} from './plugins/private-fields.js';\nimport {resolveRuntimeModule, JS_FILE_RE} from './plugins/shared.js';\n\nexport {createOpenInEditorMiddleware} from './plugins/open-in-editor.js';\nexport {litCssQueries} from './plugins/css-queries.js';\nexport {litTimelineVirtual} from './plugins/timeline-virtual.js';\nexport type {\n HmrIndicatorOptions,\n HmrOptions,\n CssSheetBuild,\n LitPluginOptions,\n ResolvedOptions,\n} from './options.js';\nexport {resolveOptions} from './options.js';\n\n/**\n * Vite plugin set providing HMR, CSS helpers, and Lightning CSS processing\n * for Lit projects.\n */\nexport const litPlugin = (options: LitPluginOptions = {}): Plugin[] => {\n // Resolved from explicit options first, env vars second, defaults last. The\n // `lit-plugin-options` `config` hook below re-resolves with the loaded env\n // once Vite hands us the mode; this initial pass covers code paths that run\n // before (or without) it.\n let resolved: ResolvedOptions = resolveOptions(options, {});\n let root = '';\n // Env resolution lives in its own always-applied plugin: `?css-sheet` is a\n // build-time feature too, and the HMR plugin (`apply: 'serve'`) never gets a\n // `config` hook under `vite build`. `enforce: 'pre'` and first position put\n // it ahead of every other hook that reads `resolved`.\n const optionsPlugin: Plugin = {\n name: 'lit-plugin-options',\n enforce: 'pre',\n config(viteConfig, {mode}) {\n // `loadEnv` reads `.env*` files from the env dir (root by default) and\n // merges in matching `process.env` keys, filtered to the `LIT_PLUGIN`\n // prefix. Explicit options still win (handled in resolveOptions).\n const envDir = viteConfig.envDir\n ? resolvePath(viteConfig.envDir)\n : viteConfig.root\n ? resolvePath(viteConfig.root)\n : process.cwd();\n resolved = resolveOptions(options, loadEnv(mode, envDir, ENV_PREFIX));\n },\n };\n const sourceOverlayPlugin: Plugin = {\n name: 'lit-source-overlay',\n apply: 'serve',\n // Run before Vite's esbuild TS transform so source-meta line numbers are\n // measured against the author's raw source (and the `@customElement … class`\n // forms are still intact), not against transpiled output.\n enforce: 'pre',\n configResolved(config) {\n root = config.root;\n },\n resolveId(id) {\n if (id === '@oddsquad/vite-plugin-lit/source-overlay.js') {\n return resolveRuntimeModule('source-overlay');\n }\n return null;\n },\n configureServer(server) {\n if (!resolved.sourceOverlay) return;\n // Allow opens from everything vite itself is willing to serve\n // (`server.fs.allow` defaults to the workspace root), not just\n // `config.root` — in monorepos, component sources regularly live in\n // sibling packages outside the served app's root.\n const fsAllow = server.config.server.fs?.allow ?? [];\n server.middlewares.use(\n OPEN_IN_EDITOR_PATH,\n createOpenInEditorMiddleware([root, ...fsAllow])\n );\n },\n transform(code, id, transformOptions) {\n if (!resolved.sourceOverlay) return null;\n if (transformOptions?.ssr) return null;\n if (\n id.startsWith('\\0') ||\n id.includes('__x00__') ||\n id.includes('lit-plugin:') ||\n id.includes('/node_modules/')\n ) {\n return null;\n }\n const [file] = id.split('?', 2);\n if (!JS_FILE_RE.test(file) && !id.includes('?html-proxy')) {\n return null;\n }\n if (!code.includes('customElement') && !code.includes('customElements')) {\n return null;\n }\n const ms = new MagicString(code);\n const relativeFile = file.startsWith(root + '/')\n ? file.slice(root.length + 1)\n : file;\n if (!injectSourceMeta(code, relativeFile, ms)) {\n return null;\n }\n return {code: ms.toString(), map: ms.generateMap({hires: true})};\n },\n transformIndexHtml() {\n if (!resolved.sourceOverlay) return;\n const overlayUrl = `/@fs/${resolveRuntimeModule('source-overlay')}`;\n const {\n exclude: _exclude,\n onSelect: _onSelect,\n ...overlayInit\n } = resolved.sourceOverlay;\n const initConfig = {\n ...overlayInit,\n openInEditorPath: OPEN_IN_EDITOR_PATH,\n };\n return [\n {\n tag: 'script',\n attrs: {type: 'module'},\n children: `import {initSourceOverlay} from ${JSON.stringify(overlayUrl)};\\ninitSourceOverlay(${JSON.stringify(initConfig)});\\n`,\n injectTo: 'body',\n },\n ];\n },\n };\n const hmr: Plugin = {\n name: 'lit-plugin',\n apply: 'serve',\n config: () => {\n // Options are already resolved against the loaded env by\n // `lit-plugin-options`, which runs first.\n if (!resolved.hmrEnabled) {\n return;\n }\n // The injected runtime imports are invisible to the dep scanner. The\n // lit family stays prebundle-eligible on purpose: the wrapper modules'\n // bare imports then resolve to the same URL every other importer gets —\n // single lit instance, single template cache.\n return {optimizeDeps: {exclude: ['@oddsquad/vite-plugin-lit']}};\n },\n resolveId(id) {\n // Resolve the browser CSS helpers and indicator runtime to the copy\n // shipped next to this plugin, so they work even when the package\n // isn't reachable through node resolution from the served root (and\n // stay out of prebundling).\n //\n // These bare specifiers must match the package name in package.json —\n // consumers import them by name (see README \"Stylesheets\"), and Vite\n // only consults this hook for the exact string. A rename that misses\n // them turns the fallback into silently dead code.\n if (id === '@oddsquad/vite-plugin-lit/css.js') {\n return resolveRuntimeModule('css');\n }\n if (id === '@oddsquad/vite-plugin-lit/indicator.js') {\n return resolveRuntimeModule('indicator');\n }\n if (id === '@oddsquad/vite-plugin-lit/source-overlay.js') {\n return resolveRuntimeModule('source-overlay');\n }\n if (resolved.hmrEnabled && id.startsWith(VIRTUAL_PREFIX)) {\n return id;\n }\n return null;\n },\n load(id) {\n if (!resolved.hmrEnabled || !id.startsWith(VIRTUAL_PREFIX)) {\n return null;\n }\n if (id === INSTALL_ID) {\n const patchPath = resolveRuntimeModule('patch');\n const runtimeOptions = {\n reconnect: resolved.reconnect,\n onIncompatible: resolved.onIncompatible,\n childState: resolved.childState,\n };\n return {\n code:\n `import {install} from ${JSON.stringify(patchPath)};\\n` +\n `install(${JSON.stringify(runtimeOptions)});\\n`,\n moduleType: 'js',\n };\n }\n const spec = id.slice(VIRTUAL_PREFIX.length);\n const wrappedTags = WRAP_TABLE.get(spec);\n if (wrappedTags === undefined) {\n return null;\n }\n const internPath = resolveRuntimeModule('intern');\n // Browser-native ESM: explicit local exports shadow `export *` names\n // (spec-guaranteed), so everything except the wrapped tags passes\n // through unchanged.\n const lines = [\n `import * as __lit from ${JSON.stringify(spec)};`,\n `import {wrapTag} from ${JSON.stringify(internPath)};`,\n `export * from ${JSON.stringify(spec)};`,\n ];\n for (const {exportName, ns} of wrappedTags) {\n lines.push(\n `export const ${exportName} = wrapTag(__lit.${exportName}, ${JSON.stringify(\n ns\n )});`\n );\n }\n return {code: lines.join('\\n') + '\\n', moduleType: 'js'};\n },\n async transform(code, id, transformOptions) {\n if (!resolved.hmrEnabled) {\n return null;\n }\n if (transformOptions?.ssr) {\n return null;\n }\n if (id.startsWith('\\0') || id.includes('/node_modules/')) {\n return null;\n }\n const [file] = id.split('?', 2);\n // Allow inline scripts extracted from HTML (`?html-proxy`).\n if (!JS_FILE_RE.test(file) && !id.includes('?html-proxy')) {\n return null;\n }\n return transformLitModule(code);\n },\n transformIndexHtml() {\n const tags: {\n tag: string;\n attrs?: Record<string, string | undefined | boolean>;\n children?: string;\n injectTo: 'body';\n }[] = [];\n\n const indicator = resolved.indicator;\n if (indicator) {\n const indicatorUrl = `/@fs/` + resolveRuntimeModule('indicator');\n tags.push(\n {\n tag: 'script',\n attrs: {type: 'module', src: indicatorUrl},\n injectTo: 'body',\n },\n {\n tag: 'lit-devtools-hmr-indicator',\n attrs: indicator.count ? {count: ''} : undefined,\n children: '',\n injectTo: 'body',\n }\n );\n }\n\n if (resolved.timeline) {\n const installUrl = `/@fs/` + resolveRuntimeModule('timeline/install');\n tags.push({\n tag: 'script',\n attrs: {type: 'module', src: installUrl},\n injectTo: 'body',\n });\n // Components inspector runtime — answers the panel's tree/details\n // requests. Paired with the timeline panel, which hosts its tab.\n const inspectorUrl =\n `/@fs/` + resolveRuntimeModule('inspector/install');\n tags.push({\n tag: 'script',\n attrs: {type: 'module', src: inspectorUrl},\n injectTo: 'body',\n });\n }\n\n return tags.length > 0 ? tags : undefined;\n },\n };\n // The source-overlay plugin is always present; its hooks no-op when the\n // feature is disabled (which env may decide), so inclusion can't be gated\n // on the synchronously-known options here.\n const plugins: Plugin[] = [\n optionsPlugin,\n // Getter, not a snapshot: `resolved` is re-resolved against the loaded env\n // in `optionsPlugin`'s `config` hook, which runs after this array is built.\n litCssQueries(() => resolved.cssSheetBuild),\n litTimelineVirtual(() => resolved.timeline),\n litCssLiterals(),\n litPrivateFields(() => resolved.hmrEnabled && resolved.privateFields),\n sourceOverlayPlugin,\n hmr,\n ];\n if (resolved.timeline) {\n // `features` is a getter, not a snapshot: `resolved` is re-resolved\n // against the loaded env in `optionsPlugin`'s `config` hook, which runs\n // after this array is built.\n plugins.push(\n createLitDevframePlugin({\n version: PACKAGE_VERSION,\n features: () => toFeatureSettings(resolved),\n // Only a named editor counts: `toFeatureSettings` reports `vscode`\n // for \"never chose\", which must not turn into a forced `code`.\n configuredEditor: () => {\n const so = resolved.sourceOverlay;\n return so !== false && typeof so.editor === 'string'\n ? so.editor\n : undefined;\n },\n })\n );\n }\n return plugins;\n};\n"]}
@@ -1,8 +1,3 @@
1
- /**
2
- * @license
3
- * Copyright 2026 Google LLC
4
- * SPDX-License-Identifier: BSD-3-Clause
5
- */
6
1
  import type { Plugin } from 'vite';
7
2
  /**
8
3
  * Runs Vite's configured Lightning CSS over `css` tagged template literals
@@ -1 +1 @@
1
- {"version":3,"file":"css-literals.d.ts","sourceRoot":"","sources":["../../src/lib/plugins/css-literals.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAa,MAAM,EAAC,MAAM,MAAM,CAAC;AAsF7C;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,QAAO,MA0EjC,CAAC"}
1
+ {"version":3,"file":"css-literals.d.ts","sourceRoot":"","sources":["../../src/lib/plugins/css-literals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,MAAM,EAAC,MAAM,MAAM,CAAC;AAsF7C;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,QAAO,MA0EjC,CAAC"}
@@ -1,8 +1,3 @@
1
- /**
2
- * @license
3
- * Copyright 2026 Google LLC
4
- * SPDX-License-Identifier: BSD-3-Clause
5
- */
6
1
  import {parseAst} from 'vite';
7
2
  import MagicString from 'magic-string';
8
3
  import {JS_FILE_RE} from './shared.js';
@@ -1 +1 @@
1
- {"version":3,"file":"css-literals.js","sourceRoot":"","sources":["../../src/lib/plugins/css-literals.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAC,QAAQ,EAAC,MAAM,MAAM,CAAC;AAC9B,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,EAAC,UAAU,EAAC,MAAM,aAAa,CAAC;AAgBvC;;;;GAIG;AACH,MAAM,YAAY,GAAG,CAAC,IAA6B,EAAqB,EAAE;IACxE,MAAM,GAAG,GAAG,IAAI,CAAC,GAA0C,CAAC;IAC5D,0EAA0E;IAC1E,mEAAmE;IACnE,0CAA0C;IAC1C,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAA4C,CAAC;IAChE,MAAM,WAAW,GAAG,KAAK,EAAE,WAAoC,CAAC;IAChE,oEAAoE;IACpE,+CAA+C;IAC/C,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,EAAE,MAAoD,CAAC;IAC3E,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,OAAO,EAAE,KAAmC,CAAC;IAC3D,MAAM,GAAG,GAAG,KAAK,EAAE,GAAG,CAAC;IACvB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACvE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,CAAC;IAC7B,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,CAAC;IACzB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,EAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAC,CAAC;AAC3B,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,eAAe,GAAG,CAAC,IAAa,EAAE,GAAiB,EAAQ,EAAE;IACjE,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9C,OAAO;IACT,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACxB,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,IAA+B,CAAC;IAC/C,IAAI,MAAM,CAAC,IAAI,KAAK,0BAA0B,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,OAAO,EAAE,CAAC;YACZ,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrB,SAAS;QACX,CAAC;QACD,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;AACH,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,GAAW,EAAE;IACzC,IAAI,YAAY,GAAyC,IAAI,CAAC;IAC9D,IAAI,OAAmC,CAAC;IACxC,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,OAAO;QACL,IAAI,EAAE,kBAAkB;QACxB,KAAK,CAAC,cAAc,CAAC,MAAM;YACzB,IAAI,MAAM,CAAC,GAAG,CAAC,WAAW,KAAK,cAAc,EAAE,CAAC;gBAC9C,OAAO;YACT,CAAC;YACD,iEAAiE;YACjE,uCAAuC;YACvC,YAAY,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;YAC5C,mEAAmE;YACnE,QAAQ;YACR,MAAM,EAAC,UAAU,EAAE,WAAW,EAAE,GAAG,IAAI,EAAC,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;YACzE,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,GAAG,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC;QACtC,CAAC;QACD,SAAS,CAAC,IAAI,EAAE,EAAE;YAChB,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;gBAC1B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACzD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,GAAY,CAAC;YACjB,IAAI,CAAC;gBACH,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAC,UAAU,EAAE,QAAQ,EAAC,EAAE,IAAI,CAAC,CAAC;YACrD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,QAAQ,GAAiB,EAAE,CAAC;YAClC,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC/B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,EAAE,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,KAAK,MAAM,EAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAC,IAAI,QAAQ,EAAE,CAAC;gBACzC,IAAI,GAAW,CAAC;gBAChB,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC;wBACpC,GAAG,OAAO;wBACV,QAAQ,EAAE,IAAI;wBACd,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;wBACtB,MAAM;qBACP,CAAC,CAAC;oBACH,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC5C,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,IAAI,CAAC,IAAI,CACP,mEACG,CAAW,CAAC,OACf,EAAE,CACH,CAAC;oBACF,SAAS;gBACX,CAAC;gBACD,gEAAgE;gBAChE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBACrC,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;oBAChB,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC9B,OAAO,GAAG,IAAI,CAAC;gBACjB,CAAC;YACH,CAAC;YACD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,EAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,EAAC,CAAC;QACnE,CAAC;KACF,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2026 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\nimport type {CSSOptions, Plugin} from 'vite';\nimport {parseAst} from 'vite';\nimport MagicString from 'magic-string';\nimport {JS_FILE_RE} from './shared.js';\n\n/**\n * A `css` tagged template literal with no interpolations and no escape\n * sequences — the only kind we can hand to a CSS parser as-is. Literals\n * with `${…}` holes or backslashes are left untouched.\n */\ninterface CssLiteral {\n /** Offset of the literal's content, just after the opening backtick. */\n start: number;\n /** Offset just before the closing backtick. */\n end: number;\n /** Raw source text between the backticks. */\n raw: string;\n}\n\n/**\n * Reads a `TaggedTemplateExpression` AST node and returns the literal we can\n * safely hand to Lightning CSS, or `null` if it isn't a bare `css` tag, has\n * interpolations, or contains an escape sequence.\n */\nconst asCssLiteral = (node: Record<string, unknown>): CssLiteral | null => {\n const tag = node.tag as Record<string, unknown> | undefined;\n // The lookbehind in the old regex kept `unsafeCSS`/`myCss`-style tags and\n // member-expression tags (`x.css`) from matching; requiring a bare\n // `Identifier` named `css` does the same.\n if (!tag || tag.type !== 'Identifier' || tag.name !== 'css') {\n return null;\n }\n const quasi = node.quasi as Record<string, unknown> | undefined;\n const expressions = quasi?.expressions as unknown[] | undefined;\n // quasis.length === expressions.length + 1, so no expressions means\n // exactly one quasi holding the whole literal.\n if (!expressions || expressions.length !== 0) {\n return null;\n }\n const quasis = quasi?.quasis as Array<Record<string, unknown>> | undefined;\n const element = quasis?.[0];\n const value = element?.value as {raw?: string} | undefined;\n const raw = value?.raw;\n if (typeof raw !== 'string' || raw.trim() === '' || raw.includes('\\\\')) {\n return null;\n }\n const start = element?.start;\n const end = element?.end;\n if (typeof start !== 'number' || typeof end !== 'number') {\n return null;\n }\n return {start, end, raw};\n};\n\n/**\n * Walks the parsed AST looking for `css` tagged template literals. Recurses\n * into every property (skipping `parent` to avoid cycles) since a literal\n * can appear anywhere an expression can — this is what tells a real literal\n * apart from `css\\`` text sitting inside a string, a comment, or another\n * template literal's text, none of which produce a matching AST node.\n */\nconst findCssLiterals = (node: unknown, out: CssLiteral[]): void => {\n if (node === null || typeof node !== 'object') {\n return;\n }\n if (Array.isArray(node)) {\n for (const item of node) {\n findCssLiterals(item, out);\n }\n return;\n }\n const record = node as Record<string, unknown>;\n if (record.type === 'TaggedTemplateExpression') {\n const literal = asCssLiteral(record);\n if (literal) {\n out.push(literal);\n }\n }\n for (const key in record) {\n if (key === 'parent') {\n continue;\n }\n findCssLiterals(record[key], out);\n }\n};\n\n/**\n * Runs Vite's configured Lightning CSS over `css` tagged template literals\n * in user modules, which the CSS pipeline itself never sees (they're plain\n * JS strings to it). Inert unless `css.transformer` is `'lightningcss'`;\n * options come from `css.lightningcss`, so component styles get the same\n * treatment (targets, drafts, …) as `.css` files. Applies in dev and build.\n */\nexport const litCssLiterals = (): Plugin => {\n let lightningcss: typeof import('lightningcss') | null = null;\n let options: CSSOptions['lightningcss'];\n let minify = false;\n return {\n name: 'lit-css-literals',\n async configResolved(config) {\n if (config.css.transformer !== 'lightningcss') {\n return;\n }\n // The transformer setting guarantees the dependency: Vite itself\n // can't process .css files without it.\n lightningcss = await import('lightningcss');\n // cssModules makes no sense for a literal; everything else carries\n // over.\n const {cssModules: _cssModules, ...rest} = config.css.lightningcss ?? {};\n options = rest;\n minify = config.command === 'build';\n },\n transform(code, id) {\n if (lightningcss === null) {\n return null;\n }\n if (id.startsWith('\\0') || id.includes('/node_modules/')) {\n return null;\n }\n const [file] = id.split('?', 2);\n if (!JS_FILE_RE.test(file) || !code.includes('css`')) {\n return null;\n }\n let ast: unknown;\n try {\n ast = parseAst(code, {sourceType: 'module'}, file);\n } catch {\n return null;\n }\n const literals: CssLiteral[] = [];\n findCssLiterals(ast, literals);\n if (literals.length === 0) {\n return null;\n }\n const ms = new MagicString(code);\n let changed = false;\n for (const {start, end, raw} of literals) {\n let out: string;\n try {\n const result = lightningcss.transform({\n ...options,\n filename: file,\n code: Buffer.from(raw),\n minify,\n });\n out = Buffer.from(result.code).toString();\n } catch (e) {\n this.warn(\n `[lit-plugin] skipping css literal Lightning CSS couldn't parse: ${\n (e as Error).message\n }`\n );\n continue;\n }\n // Re-escape for the template literal the output goes back into.\n out = out.replace(/[\\\\`$]/g, '\\\\$&');\n if (out !== raw) {\n ms.overwrite(start, end, out);\n changed = true;\n }\n }\n if (!changed) {\n return null;\n }\n return {code: ms.toString(), map: ms.generateMap({hires: true})};\n },\n };\n};\n"]}
1
+ {"version":3,"file":"css-literals.js","sourceRoot":"","sources":["../../src/lib/plugins/css-literals.ts"],"names":[],"mappings":"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","sourcesContent":["import type {CSSOptions, Plugin} from 'vite';\nimport {parseAst} from 'vite';\nimport MagicString from 'magic-string';\nimport {JS_FILE_RE} from './shared.js';\n\n/**\n * A `css` tagged template literal with no interpolations and no escape\n * sequences — the only kind we can hand to a CSS parser as-is. Literals\n * with `${…}` holes or backslashes are left untouched.\n */\ninterface CssLiteral {\n /** Offset of the literal's content, just after the opening backtick. */\n start: number;\n /** Offset just before the closing backtick. */\n end: number;\n /** Raw source text between the backticks. */\n raw: string;\n}\n\n/**\n * Reads a `TaggedTemplateExpression` AST node and returns the literal we can\n * safely hand to Lightning CSS, or `null` if it isn't a bare `css` tag, has\n * interpolations, or contains an escape sequence.\n */\nconst asCssLiteral = (node: Record<string, unknown>): CssLiteral | null => {\n const tag = node.tag as Record<string, unknown> | undefined;\n // The lookbehind in the old regex kept `unsafeCSS`/`myCss`-style tags and\n // member-expression tags (`x.css`) from matching; requiring a bare\n // `Identifier` named `css` does the same.\n if (!tag || tag.type !== 'Identifier' || tag.name !== 'css') {\n return null;\n }\n const quasi = node.quasi as Record<string, unknown> | undefined;\n const expressions = quasi?.expressions as unknown[] | undefined;\n // quasis.length === expressions.length + 1, so no expressions means\n // exactly one quasi holding the whole literal.\n if (!expressions || expressions.length !== 0) {\n return null;\n }\n const quasis = quasi?.quasis as Array<Record<string, unknown>> | undefined;\n const element = quasis?.[0];\n const value = element?.value as {raw?: string} | undefined;\n const raw = value?.raw;\n if (typeof raw !== 'string' || raw.trim() === '' || raw.includes('\\\\')) {\n return null;\n }\n const start = element?.start;\n const end = element?.end;\n if (typeof start !== 'number' || typeof end !== 'number') {\n return null;\n }\n return {start, end, raw};\n};\n\n/**\n * Walks the parsed AST looking for `css` tagged template literals. Recurses\n * into every property (skipping `parent` to avoid cycles) since a literal\n * can appear anywhere an expression can — this is what tells a real literal\n * apart from `css\\`` text sitting inside a string, a comment, or another\n * template literal's text, none of which produce a matching AST node.\n */\nconst findCssLiterals = (node: unknown, out: CssLiteral[]): void => {\n if (node === null || typeof node !== 'object') {\n return;\n }\n if (Array.isArray(node)) {\n for (const item of node) {\n findCssLiterals(item, out);\n }\n return;\n }\n const record = node as Record<string, unknown>;\n if (record.type === 'TaggedTemplateExpression') {\n const literal = asCssLiteral(record);\n if (literal) {\n out.push(literal);\n }\n }\n for (const key in record) {\n if (key === 'parent') {\n continue;\n }\n findCssLiterals(record[key], out);\n }\n};\n\n/**\n * Runs Vite's configured Lightning CSS over `css` tagged template literals\n * in user modules, which the CSS pipeline itself never sees (they're plain\n * JS strings to it). Inert unless `css.transformer` is `'lightningcss'`;\n * options come from `css.lightningcss`, so component styles get the same\n * treatment (targets, drafts, …) as `.css` files. Applies in dev and build.\n */\nexport const litCssLiterals = (): Plugin => {\n let lightningcss: typeof import('lightningcss') | null = null;\n let options: CSSOptions['lightningcss'];\n let minify = false;\n return {\n name: 'lit-css-literals',\n async configResolved(config) {\n if (config.css.transformer !== 'lightningcss') {\n return;\n }\n // The transformer setting guarantees the dependency: Vite itself\n // can't process .css files without it.\n lightningcss = await import('lightningcss');\n // cssModules makes no sense for a literal; everything else carries\n // over.\n const {cssModules: _cssModules, ...rest} = config.css.lightningcss ?? {};\n options = rest;\n minify = config.command === 'build';\n },\n transform(code, id) {\n if (lightningcss === null) {\n return null;\n }\n if (id.startsWith('\\0') || id.includes('/node_modules/')) {\n return null;\n }\n const [file] = id.split('?', 2);\n if (!JS_FILE_RE.test(file) || !code.includes('css`')) {\n return null;\n }\n let ast: unknown;\n try {\n ast = parseAst(code, {sourceType: 'module'}, file);\n } catch {\n return null;\n }\n const literals: CssLiteral[] = [];\n findCssLiterals(ast, literals);\n if (literals.length === 0) {\n return null;\n }\n const ms = new MagicString(code);\n let changed = false;\n for (const {start, end, raw} of literals) {\n let out: string;\n try {\n const result = lightningcss.transform({\n ...options,\n filename: file,\n code: Buffer.from(raw),\n minify,\n });\n out = Buffer.from(result.code).toString();\n } catch (e) {\n this.warn(\n `[lit-plugin] skipping css literal Lightning CSS couldn't parse: ${\n (e as Error).message\n }`\n );\n continue;\n }\n // Re-escape for the template literal the output goes back into.\n out = out.replace(/[\\\\`$]/g, '\\\\$&');\n if (out !== raw) {\n ms.overwrite(start, end, out);\n changed = true;\n }\n }\n if (!changed) {\n return null;\n }\n return {code: ms.toString(), map: ms.generateMap({hires: true})};\n },\n };\n};\n"]}
@@ -1,8 +1,3 @@
1
- /**
2
- * @license
3
- * Copyright 2026 Google LLC
4
- * SPDX-License-Identifier: BSD-3-Clause
5
- */
6
1
  import type { Plugin } from 'vite';
7
2
  import type { CssSheetBuild } from '../options.js';
8
3
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"css-queries.d.ts","sourceRoot":"","sources":["../../src/lib/plugins/css-queries.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,eAAe,CAAC;AAqCjD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,sBACN,MAAM,aAAa,KACpC,MAwFF,CAAC"}
1
+ {"version":3,"file":"css-queries.d.ts","sourceRoot":"","sources":["../../src/lib/plugins/css-queries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,eAAe,CAAC;AAqCjD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,sBACN,MAAM,aAAa,KACpC,MAwFF,CAAC"}
@@ -1,8 +1,3 @@
1
- /**
2
- * @license
3
- * Copyright 2026 Google LLC
4
- * SPDX-License-Identifier: BSD-3-Clause
5
- */
6
1
  import {resolveRuntimeModule} from './shared.js';
7
2
  /**
8
3
  * `import href from './x.css?hmr-url'` — `?url` semantics with working HMR.
@@ -1 +1 @@
1
- {"version":3,"file":"css-queries.js","sourceRoot":"","sources":["../../src/lib/plugins/css-queries.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2026 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\nimport type {Plugin} from 'vite';\nimport type {CssSheetBuild} from '../options.js';\nimport {resolveRuntimeModule} from './shared.js';\n\n/**\n * `import href from './x.css?hmr-url'` — `?url` semantics with working HMR.\n * The string is a real stylesheet URL (dev-served CSS file; hashed `.css`\n * asset on build) for shadow-root `<link>` hrefs and `@import url()`s. In\n * dev, each HMR re-execution yields a freshly cache-busted href, so the\n * browser refetches the changed stylesheet; in build the `?url` asset URL\n * passes through unchanged.\n */\nconst CSS_URL_QUERY_RE = /^([^?]+\\.css)\\?(?:[^&]*&)*hmr-url(?:&.*)?$/;\nconst CSS_URL_VIRTUAL_PREFIX = '\\0lit-plugin:hmr-url:';\n\n/**\n * `import sheet from './x.css?css-sheet'` — a constructed, shareable\n * `CSSStyleSheet` backed by the `.css` asset that hot-swaps in place. Adopt it\n * from any number of components (`static styles = [sheet]`); a source edit\n * re-fetches and `replaceSync()`s it, updating every shadow root that adopted\n * it without re-rendering a component or reloading the page.\n *\n * This is the `urlSheet()` helper plus its irreducible HMR wiring, lifted into\n * a plugin-generated module: the `import.meta.hot.accept` lives here (where\n * Vite's static analysis sees the literal specifier), so callers write a bare\n * import and never touch `import.meta.hot` themselves.\n *\n * Under `vite build` the generated module can instead inline the css text (see\n * `cssSheetBuild`) — a library's consumers bundle its JS only, so a\n * fetch-backed sheet would 404 on the `.css` asset that never reached their\n * build.\n */\nconst CSS_SHEET_QUERY_RE = /^([^?]+\\.css)\\?(?:[^&]*&)*css-sheet(?:&.*)?$/;\nconst CSS_SHEET_VIRTUAL_PREFIX = '\\0lit-plugin:css-sheet:';\n// The virtual id must not end in `.css`, or Vite's CSS plugins (which match\n// the id's extension regardless of `\\0`) would compile the wrapper as CSS.\nconst CSS_VIRTUAL_SUFFIX = '.js';\n\n/**\n * Import-query support, served in dev and build alike (source code using\n * `?hmr-url`/`?css-sheet` must keep working under `vite build`, where the HMR\n * plugin doesn't apply). Exported for the baseline e2e run, which needs the\n * queries working without the HMR plugin.\n *\n * `getCssSheetBuild` is a getter, not a value: `litPlugin()` re-resolves its\n * options against the loaded env in a `config` hook, which runs after the\n * plugin array is built. Standalone (no getter) it behaves like the `'auto'`\n * default.\n */\nexport const litCssQueries = (\n getCssSheetBuild: () => CssSheetBuild = () => 'auto'\n): Plugin => {\n let isBuild = false;\n let isLib = false;\n return {\n name: 'lit-css-query',\n // Vite's core resolver claims `./x.css?hmr-url` for the CSS pipeline\n // before normal plugins get a look, so resolve ahead of it.\n enforce: 'pre',\n configResolved(config) {\n isBuild = config.command === 'build';\n isLib = config.build.lib !== false && config.build.lib !== undefined;\n },\n async resolveId(id, importer) {\n const prefix = CSS_URL_QUERY_RE.test(id)\n ? CSS_URL_VIRTUAL_PREFIX\n : CSS_SHEET_QUERY_RE.test(id)\n ? CSS_SHEET_VIRTUAL_PREFIX\n : null;\n if (prefix === null) {\n return null;\n }\n const file = id.slice(0, id.indexOf('?'));\n const resolved = await this.resolve(file, importer);\n if (resolved === null) {\n return null;\n }\n return prefix + resolved.id + CSS_VIRTUAL_SUFFIX;\n },\n load(id) {\n const helperPath = resolveRuntimeModule('css');\n if (id.startsWith(CSS_URL_VIRTUAL_PREFIX)) {\n const file = id.slice(\n CSS_URL_VIRTUAL_PREFIX.length,\n -CSS_VIRTUAL_SUFFIX.length\n );\n return {\n code:\n `import url from ${JSON.stringify(`${file}?url`)};\\n` +\n `import {devCacheBust} from ${JSON.stringify(helperPath)};\\n` +\n `export default devCacheBust(url);\\n`,\n moduleType: 'js',\n };\n }\n if (id.startsWith(CSS_SHEET_VIRTUAL_PREFIX)) {\n const file = id.slice(\n CSS_SHEET_VIRTUAL_PREFIX.length,\n -CSS_VIRTUAL_SUFFIX.length\n );\n const mode = getCssSheetBuild();\n const inlineQuery =\n !isBuild || mode === 'url' || (mode === 'auto' && !isLib)\n ? null\n : mode === 'inline-raw'\n ? '?raw'\n : '?inline';\n if (inlineQuery !== null) {\n // Build only, so no `import.meta.hot` block. The sheet is still\n // constructed once per virtual module, so adopters share it exactly\n // as they do in the fetch-backed form.\n return {\n code:\n `import css from ${JSON.stringify(`${file}${inlineQuery}`)};\\n` +\n `const sheet = new CSSStyleSheet();\\n` +\n `sheet.replaceSync(css);\\n` +\n `export default sheet;\\n`,\n moduleType: 'js',\n };\n }\n // The accept specifier must be byte-identical to the import above —\n // Vite resolves accepted HMR deps by static analysis. Generating both\n // here is exactly what frees the caller from writing it. The swap is\n // self-accepted at this boundary, so it never propagates to adopters.\n const urlSpecifier = JSON.stringify(`${file}?url`);\n return {\n code:\n `import url from ${urlSpecifier};\\n` +\n `import {urlSheet} from ${JSON.stringify(helperPath)};\\n` +\n `const {sheet, onHotUpdate} = urlSheet(url);\\n` +\n `export default sheet;\\n` +\n `if (import.meta.hot) {\\n` +\n ` import.meta.hot.accept(${urlSpecifier}, onHotUpdate);\\n` +\n `}\\n`,\n moduleType: 'js',\n };\n }\n return null;\n },\n };\n};\n"]}
1
+ {"version":3,"file":"css-queries.js","sourceRoot":"","sources":["../../src/lib/plugins/css-queries.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Plugin} from 'vite';\nimport type {CssSheetBuild} from '../options.js';\nimport {resolveRuntimeModule} from './shared.js';\n\n/**\n * `import href from './x.css?hmr-url'` — `?url` semantics with working HMR.\n * The string is a real stylesheet URL (dev-served CSS file; hashed `.css`\n * asset on build) for shadow-root `<link>` hrefs and `@import url()`s. In\n * dev, each HMR re-execution yields a freshly cache-busted href, so the\n * browser refetches the changed stylesheet; in build the `?url` asset URL\n * passes through unchanged.\n */\nconst CSS_URL_QUERY_RE = /^([^?]+\\.css)\\?(?:[^&]*&)*hmr-url(?:&.*)?$/;\nconst CSS_URL_VIRTUAL_PREFIX = '\\0lit-plugin:hmr-url:';\n\n/**\n * `import sheet from './x.css?css-sheet'` — a constructed, shareable\n * `CSSStyleSheet` backed by the `.css` asset that hot-swaps in place. Adopt it\n * from any number of components (`static styles = [sheet]`); a source edit\n * re-fetches and `replaceSync()`s it, updating every shadow root that adopted\n * it without re-rendering a component or reloading the page.\n *\n * This is the `urlSheet()` helper plus its irreducible HMR wiring, lifted into\n * a plugin-generated module: the `import.meta.hot.accept` lives here (where\n * Vite's static analysis sees the literal specifier), so callers write a bare\n * import and never touch `import.meta.hot` themselves.\n *\n * Under `vite build` the generated module can instead inline the css text (see\n * `cssSheetBuild`) — a library's consumers bundle its JS only, so a\n * fetch-backed sheet would 404 on the `.css` asset that never reached their\n * build.\n */\nconst CSS_SHEET_QUERY_RE = /^([^?]+\\.css)\\?(?:[^&]*&)*css-sheet(?:&.*)?$/;\nconst CSS_SHEET_VIRTUAL_PREFIX = '\\0lit-plugin:css-sheet:';\n// The virtual id must not end in `.css`, or Vite's CSS plugins (which match\n// the id's extension regardless of `\\0`) would compile the wrapper as CSS.\nconst CSS_VIRTUAL_SUFFIX = '.js';\n\n/**\n * Import-query support, served in dev and build alike (source code using\n * `?hmr-url`/`?css-sheet` must keep working under `vite build`, where the HMR\n * plugin doesn't apply). Exported for the baseline e2e run, which needs the\n * queries working without the HMR plugin.\n *\n * `getCssSheetBuild` is a getter, not a value: `litPlugin()` re-resolves its\n * options against the loaded env in a `config` hook, which runs after the\n * plugin array is built. Standalone (no getter) it behaves like the `'auto'`\n * default.\n */\nexport const litCssQueries = (\n getCssSheetBuild: () => CssSheetBuild = () => 'auto'\n): Plugin => {\n let isBuild = false;\n let isLib = false;\n return {\n name: 'lit-css-query',\n // Vite's core resolver claims `./x.css?hmr-url` for the CSS pipeline\n // before normal plugins get a look, so resolve ahead of it.\n enforce: 'pre',\n configResolved(config) {\n isBuild = config.command === 'build';\n isLib = config.build.lib !== false && config.build.lib !== undefined;\n },\n async resolveId(id, importer) {\n const prefix = CSS_URL_QUERY_RE.test(id)\n ? CSS_URL_VIRTUAL_PREFIX\n : CSS_SHEET_QUERY_RE.test(id)\n ? CSS_SHEET_VIRTUAL_PREFIX\n : null;\n if (prefix === null) {\n return null;\n }\n const file = id.slice(0, id.indexOf('?'));\n const resolved = await this.resolve(file, importer);\n if (resolved === null) {\n return null;\n }\n return prefix + resolved.id + CSS_VIRTUAL_SUFFIX;\n },\n load(id) {\n const helperPath = resolveRuntimeModule('css');\n if (id.startsWith(CSS_URL_VIRTUAL_PREFIX)) {\n const file = id.slice(\n CSS_URL_VIRTUAL_PREFIX.length,\n -CSS_VIRTUAL_SUFFIX.length\n );\n return {\n code:\n `import url from ${JSON.stringify(`${file}?url`)};\\n` +\n `import {devCacheBust} from ${JSON.stringify(helperPath)};\\n` +\n `export default devCacheBust(url);\\n`,\n moduleType: 'js',\n };\n }\n if (id.startsWith(CSS_SHEET_VIRTUAL_PREFIX)) {\n const file = id.slice(\n CSS_SHEET_VIRTUAL_PREFIX.length,\n -CSS_VIRTUAL_SUFFIX.length\n );\n const mode = getCssSheetBuild();\n const inlineQuery =\n !isBuild || mode === 'url' || (mode === 'auto' && !isLib)\n ? null\n : mode === 'inline-raw'\n ? '?raw'\n : '?inline';\n if (inlineQuery !== null) {\n // Build only, so no `import.meta.hot` block. The sheet is still\n // constructed once per virtual module, so adopters share it exactly\n // as they do in the fetch-backed form.\n return {\n code:\n `import css from ${JSON.stringify(`${file}${inlineQuery}`)};\\n` +\n `const sheet = new CSSStyleSheet();\\n` +\n `sheet.replaceSync(css);\\n` +\n `export default sheet;\\n`,\n moduleType: 'js',\n };\n }\n // The accept specifier must be byte-identical to the import above —\n // Vite resolves accepted HMR deps by static analysis. Generating both\n // here is exactly what frees the caller from writing it. The swap is\n // self-accepted at this boundary, so it never propagates to adopters.\n const urlSpecifier = JSON.stringify(`${file}?url`);\n return {\n code:\n `import url from ${urlSpecifier};\\n` +\n `import {urlSheet} from ${JSON.stringify(helperPath)};\\n` +\n `const {sheet, onHotUpdate} = urlSheet(url);\\n` +\n `export default sheet;\\n` +\n `if (import.meta.hot) {\\n` +\n ` import.meta.hot.accept(${urlSpecifier}, onHotUpdate);\\n` +\n `}\\n`,\n moduleType: 'js',\n };\n }\n return null;\n },\n };\n};\n"]}
@@ -1,8 +1,3 @@
1
- /**
2
- * @license
3
- * Copyright 2026 Google LLC
4
- * SPDX-License-Identifier: BSD-3-Clause
5
- */
6
1
  import { type TrustHeaders } from '../http.js';
7
2
  export declare const OPEN_IN_EDITOR_PATH = "/__lit-open-in-editor";
8
3
  export declare const createOpenInEditorMiddleware: (allowedRoots: readonly string[]) => (req: {
@@ -1 +1 @@
1
- {"version":3,"file":"open-in-editor.d.ts","sourceRoot":"","sources":["../../src/lib/plugins/open-in-editor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAmB,KAAK,YAAY,EAAC,MAAM,YAAY,CAAC;AAE/D,eAAO,MAAM,mBAAmB,0BAA0B,CAAC;AAE3D,eAAO,MAAM,4BAA4B,iBACzB,SAAS,MAAM,EAAE,WAMxB;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAC,OACvD;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAC,QAC/C,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,IAAI,SAyFhC,CAAC"}
1
+ {"version":3,"file":"open-in-editor.d.ts","sourceRoot":"","sources":["../../src/lib/plugins/open-in-editor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAmB,KAAK,YAAY,EAAC,MAAM,YAAY,CAAC;AAE/D,eAAO,MAAM,mBAAmB,0BAA0B,CAAC;AAE3D,eAAO,MAAM,4BAA4B,iBACzB,SAAS,MAAM,EAAE,WAMxB;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAC,OACvD;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAC,QAC/C,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,IAAI,SAyFhC,CAAC"}
@@ -1,8 +1,3 @@
1
- /**
2
- * @license
3
- * Copyright 2026 Google LLC
4
- * SPDX-License-Identifier: BSD-3-Clause
5
- */
6
1
  import {resolve as resolvePath} from 'node:path';
7
2
  import {confineToRoots} from '../confine.js';
8
3
  import {toLaunchEditor} from '../devframe/launch-editor.js';
@@ -1 +1 @@
1
- {"version":3,"file":"open-in-editor.js","sourceRoot":"","sources":["../../src/lib/plugins/open-in-editor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2026 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\nimport {resolve as resolvePath} from 'node:path';\nimport {confineToRoots} from '../confine.js';\nimport {toLaunchEditor} from '../devframe/launch-editor.js';\nimport {isTrustedRequest, type TrustHeaders} from '../http.js';\n\nexport const OPEN_IN_EDITOR_PATH = '/__lit-open-in-editor';\n\nexport const createOpenInEditorMiddleware = (\n allowedRoots: readonly string[]\n) => {\n // First entry is the primary root: relative `file` params resolve against\n // it. Every entry grants open access to files beneath it.\n const roots = allowedRoots.map((r) => resolvePath(r));\n return (\n req: {url?: string; method?: string; headers?: TrustHeaders},\n res: {statusCode: number; end: (msg: string) => void},\n next: (err?: unknown) => void\n ) => {\n if (req.url === undefined) {\n next();\n return;\n }\n if (req.method !== undefined && req.method !== 'GET') {\n res.statusCode = 405;\n res.end('method not allowed');\n return;\n }\n if (!isTrustedRequest(req.headers ?? {})) {\n res.statusCode = 403;\n res.end('forbidden');\n return;\n }\n const query = req.url.includes('?')\n ? req.url.slice(req.url.indexOf('?') + 1)\n : '';\n const params = new URLSearchParams(query);\n const file = params.get('file');\n if (file === null) {\n res.statusCode = 400;\n res.end('missing file parameter');\n return;\n }\n // Confine the open to the allowed roots: `launch-editor` spawns the\n // user's editor on this path, so an unvalidated `file` is a\n // local-file-open / arg-injection vector.\n const confined = confineToRoots(roots, file);\n if ('failure' in confined) {\n const outside = confined.failure === 'outside';\n res.statusCode = outside ? 403 : 404;\n res.end(outside ? 'file outside allowed roots' : 'file not found');\n return;\n }\n const resolved = confined.path;\n // Coerce to integers so a crafted `line`/`column` can't smuggle extra\n // shell-visible content through the `file:line:column` ref.\n const line = String(\n Math.max(1, Number.parseInt(params.get('line') ?? '1', 10) || 1)\n );\n const column = String(\n Math.max(1, Number.parseInt(params.get('column') ?? '1', 10) || 1)\n );\n // The overlay names the editor it is using (the panel's override, else the\n // configured one). Only keys `toLaunchEditor` knows become a command;\n // anything else, or nothing, leaves `launch-editor` to auto-detect.\n const editor = toLaunchEditor(params.get('editor') ?? undefined);\n const fileRef = `${resolved}:${line}:${column}`;\n import('launch-editor')\n .then(\n (mod: {\n default?: (\n file: string,\n editor: string | undefined,\n cb: (fileName: string, errorMessage: string | null) => void\n ) => void;\n }) => {\n const launch = (mod.default ?? mod) as (\n file: string,\n editor: string | undefined,\n cb: (fileName: string, errorMessage: string | null) => void\n ) => void;\n // `launch-editor` invokes the callback only on failure — synchronously\n // when it can't guess an editor, later if the spawn errors. Reply `ok`\n // right after launching; the guard keeps a sync failure's 500 first\n // and drops a late async failure (the response is long gone).\n let finished = false;\n const finish = (statusCode: number, msg: string) => {\n if (finished) return;\n finished = true;\n res.statusCode = statusCode;\n res.end(msg);\n };\n launch(\n fileRef,\n editor,\n (_fileName: string, errorMessage: string | null) => {\n if (errorMessage !== null) {\n finish(500, errorMessage);\n }\n }\n );\n finish(200, 'ok');\n }\n )\n .catch(next);\n };\n};\n"]}
1
+ {"version":3,"file":"open-in-editor.js","sourceRoot":"","sources":["../../src/lib/plugins/open-in-editor.ts"],"names":[],"mappings":"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","sourcesContent":["import {resolve as resolvePath} from 'node:path';\nimport {confineToRoots} from '../confine.js';\nimport {toLaunchEditor} from '../devframe/launch-editor.js';\nimport {isTrustedRequest, type TrustHeaders} from '../http.js';\n\nexport const OPEN_IN_EDITOR_PATH = '/__lit-open-in-editor';\n\nexport const createOpenInEditorMiddleware = (\n allowedRoots: readonly string[]\n) => {\n // First entry is the primary root: relative `file` params resolve against\n // it. Every entry grants open access to files beneath it.\n const roots = allowedRoots.map((r) => resolvePath(r));\n return (\n req: {url?: string; method?: string; headers?: TrustHeaders},\n res: {statusCode: number; end: (msg: string) => void},\n next: (err?: unknown) => void\n ) => {\n if (req.url === undefined) {\n next();\n return;\n }\n if (req.method !== undefined && req.method !== 'GET') {\n res.statusCode = 405;\n res.end('method not allowed');\n return;\n }\n if (!isTrustedRequest(req.headers ?? {})) {\n res.statusCode = 403;\n res.end('forbidden');\n return;\n }\n const query = req.url.includes('?')\n ? req.url.slice(req.url.indexOf('?') + 1)\n : '';\n const params = new URLSearchParams(query);\n const file = params.get('file');\n if (file === null) {\n res.statusCode = 400;\n res.end('missing file parameter');\n return;\n }\n // Confine the open to the allowed roots: `launch-editor` spawns the\n // user's editor on this path, so an unvalidated `file` is a\n // local-file-open / arg-injection vector.\n const confined = confineToRoots(roots, file);\n if ('failure' in confined) {\n const outside = confined.failure === 'outside';\n res.statusCode = outside ? 403 : 404;\n res.end(outside ? 'file outside allowed roots' : 'file not found');\n return;\n }\n const resolved = confined.path;\n // Coerce to integers so a crafted `line`/`column` can't smuggle extra\n // shell-visible content through the `file:line:column` ref.\n const line = String(\n Math.max(1, Number.parseInt(params.get('line') ?? '1', 10) || 1)\n );\n const column = String(\n Math.max(1, Number.parseInt(params.get('column') ?? '1', 10) || 1)\n );\n // The overlay names the editor it is using (the panel's override, else the\n // configured one). Only keys `toLaunchEditor` knows become a command;\n // anything else, or nothing, leaves `launch-editor` to auto-detect.\n const editor = toLaunchEditor(params.get('editor') ?? undefined);\n const fileRef = `${resolved}:${line}:${column}`;\n import('launch-editor')\n .then(\n (mod: {\n default?: (\n file: string,\n editor: string | undefined,\n cb: (fileName: string, errorMessage: string | null) => void\n ) => void;\n }) => {\n const launch = (mod.default ?? mod) as (\n file: string,\n editor: string | undefined,\n cb: (fileName: string, errorMessage: string | null) => void\n ) => void;\n // `launch-editor` invokes the callback only on failure — synchronously\n // when it can't guess an editor, later if the spawn errors. Reply `ok`\n // right after launching; the guard keeps a sync failure's 500 first\n // and drops a late async failure (the response is long gone).\n let finished = false;\n const finish = (statusCode: number, msg: string) => {\n if (finished) return;\n finished = true;\n res.statusCode = statusCode;\n res.end(msg);\n };\n launch(\n fileRef,\n editor,\n (_fileName: string, errorMessage: string | null) => {\n if (errorMessage !== null) {\n finish(500, errorMessage);\n }\n }\n );\n finish(200, 'ok');\n }\n )\n .catch(next);\n };\n};\n"]}
@@ -1,8 +1,3 @@
1
- /**
2
- * @license
3
- * Copyright 2026 Google LLC
4
- * SPDX-License-Identifier: BSD-3-Clause
5
- */
6
1
  import type { Plugin } from 'vite';
7
2
  import MagicString from 'magic-string';
8
3
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"private-fields.d.ts","sourceRoot":"","sources":["../../src/lib/plugins/private-fields.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,MAAM,CAAC;AAEjC,OAAO,WAAW,MAAM,cAAc,CAAC;AAwCvC;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,SACxB,MAAM,MACR,MAAM,KACT;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAA;CAAC,GAAG,IA4NhE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,YAAa,MAAM,OAAO,KAAG,MAgBxD,CAAC"}
1
+ {"version":3,"file":"private-fields.d.ts","sourceRoot":"","sources":["../../src/lib/plugins/private-fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,MAAM,CAAC;AAEjC,OAAO,WAAW,MAAM,cAAc,CAAC;AAwCvC;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,SACxB,MAAM,MACR,MAAM,KACT;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAA;CAAC,GAAG,IA4NhE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,YAAa,MAAM,OAAO,KAAG,MAgBxD,CAAC"}
@@ -1,8 +1,3 @@
1
- /**
2
- * @license
3
- * Copyright 2026 Google LLC
4
- * SPDX-License-Identifier: BSD-3-Clause
5
- */
6
1
  import {parseAst} from 'vite';
7
2
  import MagicString from 'magic-string';
8
3
  import {JS_FILE_RE} from './shared.js';
@@ -1 +1 @@
1
- {"version":3,"file":"private-fields.js","sourceRoot":"","sources":["../../src/lib/plugins/private-fields.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2026 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\nimport type {Plugin} from 'vite';\nimport {parseAst} from 'vite';\nimport MagicString from 'magic-string';\nimport {JS_FILE_RE} from './shared.js';\n\ntype Node = Record<string, unknown> & {\n type: string;\n start: number;\n end: number;\n};\n\n/** One class body that declares at least one private name. */\ninterface ClassScope {\n /** Private name (without `#`) to the identifier of its symbol constant. */\n names: Map<string, string>;\n}\n\nconst PRIVATE_KEY_HOLDERS = new Set([\n 'PropertyDefinition',\n 'MethodDefinition',\n 'AccessorProperty',\n]);\n\nconst isNode = (v: unknown): v is Node =>\n v !== null && typeof v === 'object' && typeof (v as Node).type === 'string';\n\n/** Private names declared directly in a class body. */\nconst declaredNames = (cls: Node): Node[] => {\n const body = cls.body as {body?: Node[]} | undefined;\n const out: Node[] = [];\n for (const member of body?.body ?? []) {\n if (\n PRIVATE_KEY_HOLDERS.has(member.type) &&\n isNode(member.key) &&\n member.key.type === 'PrivateIdentifier'\n ) {\n out.push(member);\n }\n }\n return out;\n};\n\n/**\n * Rewrites native `#private` class members into computed keys backed by\n * `Symbol.for(...)`. The key is stable across re-evaluations of the module,\n * so instances built by an earlier evaluation of a class and methods copied\n * from a later one agree on where private state lives. That is what lets HMR\n * patch a class in place. Returns `null` when there is nothing to rewrite or\n * the module can't be handled safely.\n */\nexport const rewritePrivateNames = (\n code: string,\n id: string\n): {code: string; map: ReturnType<MagicString['generateMap']>} | null => {\n if (!code.includes('#')) {\n return null;\n }\n const [file] = id.split('?', 1);\n let ast: Node;\n try {\n ast = parseAst(code, {sourceType: 'module'}, file) as unknown as Node;\n } catch {\n return null;\n }\n\n let prefix = '__litPriv';\n while (code.includes(prefix)) {\n prefix += '_';\n }\n\n const magic = new MagicString(code);\n const decls: string[] = [];\n const classKeyCounts = new Map<string, number>();\n let symbolCount = 0;\n let failed = false;\n\n const symbolFor = (scope: ClassScope, name: string): string | undefined =>\n scope.names.get(name);\n\n const resolve = (stack: ClassScope[], name: string): string => {\n for (let i = stack.length - 1; i >= 0; i--) {\n const sym = symbolFor(stack[i], name);\n if (sym !== undefined) {\n return sym;\n }\n }\n failed = true;\n return '';\n };\n\n const classKeyOf = (cls: Node, hint: string | undefined): string => {\n const cid = cls.id as {name?: string} | null | undefined;\n const base = cid?.name ?? hint ?? 'anonymous';\n const n = classKeyCounts.get(base) ?? 0;\n classKeyCounts.set(base, n + 1);\n return n === 0 ? base : `${base}~${n}`;\n };\n\n const rewriteMemberAccess = (node: Node, sym: string): void => {\n const prop = node.property as Node;\n // Find the `.` / `?.` token before the property; the object's own end\n // can't be used because a parenthesised object ends before its `)`.\n let i = prop.start - 1;\n while (i >= 0 && /\\s/.test(code[i])) {\n i--;\n }\n if (code[i] !== '.') {\n failed = true;\n return;\n }\n const optional = code[i - 1] === '?';\n const from = optional ? i - 1 : i;\n magic.overwrite(from, prop.end, `${optional ? '?.' : ''}[${sym}]`);\n };\n\n const visit = (\n node: unknown,\n stack: ClassScope[],\n hint: string | undefined\n ): void => {\n if (failed || node === null || typeof node !== 'object') {\n return;\n }\n if (Array.isArray(node)) {\n for (const item of node) {\n visit(item, stack, hint);\n }\n return;\n }\n if (!isNode(node)) {\n return;\n }\n\n if (node.type === 'ClassDeclaration' || node.type === 'ClassExpression') {\n const members = declaredNames(node);\n const heritage = node.superClass;\n // Decorators are outside the class body's private-name scope.\n visit(node.decorators, stack, undefined);\n visit(heritage, stack, undefined);\n if (members.length === 0) {\n visit(node.body, stack, undefined);\n return;\n }\n const classKey = classKeyOf(node, hint);\n const scope: ClassScope = {names: new Map()};\n for (const member of members) {\n const name = (member.key as unknown as {name: string}).name;\n if (!scope.names.has(name)) {\n const ident = `${prefix}${symbolCount++}`;\n scope.names.set(name, ident);\n decls.push(\n `const ${ident} = Symbol.for(${JSON.stringify(\n `@oddsquad/vite-plugin-lit#private:${file}:${classKey}#${name}`\n )});`\n );\n }\n if ((member.decorators as unknown[] | undefined)?.length) {\n // A decorator directly before a computed key would parse as an\n // index access on the decorator expression.\n failed = true;\n return;\n }\n const key = member.key as Node;\n const sym = scope.names.get(name)!;\n // A computed key at the start of a member can continue the previous\n // member's initializer when that one relied on ASI (`a = 1` + newline\n // + `#b`), so lead with an explicit terminator.\n let lead = '';\n if (member.start === key.start) {\n let j = key.start - 1;\n while (j >= 0 && /\\s/.test(code[j])) {\n j--;\n }\n if (code[j] !== '{' && code[j] !== ';') {\n lead = ';';\n }\n }\n magic.overwrite(key.start, key.end, `${lead}[${sym}]`);\n }\n // Members: keys of non-private members and all values live in scope.\n const inner = [...stack, scope];\n const body = node.body as Node;\n for (const member of (body.body as Node[]) ?? []) {\n for (const k in member) {\n if (k === 'parent' || (k === 'key' && isPrivateKey(member))) {\n continue;\n }\n visit(member[k], inner, undefined);\n }\n }\n return;\n }\n\n if (node.type === 'MemberExpression' && isNode(node.property)) {\n if (node.property.type === 'PrivateIdentifier') {\n const sym = resolve(\n stack,\n (node.property as unknown as {name: string}).name\n );\n if (failed) {\n return;\n }\n rewriteMemberAccess(node, sym);\n visit(node.object, stack, undefined);\n return;\n }\n }\n\n if (\n node.type === 'BinaryExpression' &&\n isNode(node.left) &&\n node.left.type === 'PrivateIdentifier'\n ) {\n const sym = resolve(stack, (node.left as unknown as {name: string}).name);\n if (failed) {\n return;\n }\n magic.overwrite(node.left.start, node.left.end, sym);\n visit(node.right, stack, undefined);\n return;\n }\n\n let childHint: string | undefined;\n for (const key in node) {\n if (key === 'parent') {\n continue;\n }\n switch (node.type) {\n case 'VariableDeclarator':\n childHint =\n key === 'init' && isNode(node.id) && node.id.type === 'Identifier'\n ? (node.id as unknown as {name: string}).name\n : undefined;\n break;\n case 'AssignmentExpression':\n childHint =\n key === 'right' &&\n isNode(node.left) &&\n node.left.type === 'Identifier'\n ? (node.left as unknown as {name: string}).name\n : undefined;\n break;\n case 'ExportDefaultDeclaration':\n childHint = 'default';\n break;\n default:\n childHint = undefined;\n }\n visit(node[key], stack, childHint);\n }\n };\n\n const isPrivateKey = (member: Node): boolean =>\n PRIVATE_KEY_HOLDERS.has(member.type) &&\n isNode(member.key) &&\n member.key.type === 'PrivateIdentifier';\n\n visit(ast, [], undefined);\n if (failed || decls.length === 0) {\n return null;\n }\n\n const header = `${decls.join('')}\\n`;\n if (code.startsWith('#!')) {\n const nl = code.indexOf('\\n');\n if (nl === -1) {\n return null;\n }\n magic.appendLeft(nl + 1, header);\n } else {\n magic.prepend(header);\n }\n return {code: magic.toString(), map: magic.generateMap({hires: 'boundary'})};\n};\n\n/**\n * Dev-only transform that swaps native `#private` class members for stable\n * symbol keys so HMR's in-place class patching keeps working. See\n * {@link rewritePrivateNames}. `enabled` is read lazily because options are\n * re-resolved against the loaded env after the plugin array is built.\n */\nexport const litPrivateFields = (enabled: () => boolean): Plugin => ({\n name: 'lit-private-fields',\n apply: 'serve',\n transform(code, id, options) {\n if (options?.ssr || !enabled()) {\n return null;\n }\n if (id.startsWith('\\0') || id.includes('/node_modules/')) {\n return null;\n }\n const [file, query] = id.split('?', 2);\n if (!JS_FILE_RE.test(file) && !query?.includes('html-proxy')) {\n return null;\n }\n return rewritePrivateNames(code, id);\n },\n});\n"]}
1
+ {"version":3,"file":"private-fields.js","sourceRoot":"","sources":["../../src/lib/plugins/private-fields.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAC,MAAM,MAAM,CAAC;AAC9B,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,EAAC,UAAU,EAAC,MAAM,aAAa,CAAC;AAcvC,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,oBAAoB;IACpB,kBAAkB;IAClB,kBAAkB;CACnB,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG,CAAC,CAAU,EAAa,EAAE,CACvC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAQ,CAAU,CAAC,IAAI,KAAK,QAAQ,CAAC;AAE9E,uDAAuD;AACvD,MAAM,aAAa,GAAG,CAAC,GAAS,EAAU,EAAE;IAC1C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAmC,CAAC;IACrD,MAAM,GAAG,GAAW,EAAE,CAAC;IACvB,KAAK,MAAM,MAAM,IAAI,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;QACtC,IACE,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;YAClB,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,mBAAmB,EACvC,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,IAAY,EACZ,EAAU,EAC0D,EAAE;IACtE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAChC,IAAI,GAAS,CAAC;IACd,IAAI,CAAC;QACH,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAC,UAAU,EAAE,QAAQ,EAAC,EAAE,IAAI,CAAoB,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAM,GAAG,WAAW,CAAC;IACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,CAAC;IAChB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IACjD,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,MAAM,SAAS,GAAG,CAAC,KAAiB,EAAE,IAAY,EAAsB,EAAE,CACxE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAExB,MAAM,OAAO,GAAG,CAAC,KAAmB,EAAE,IAAY,EAAU,EAAE;QAC5D,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACtC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtB,OAAO,GAAG,CAAC;YACb,CAAC;QACH,CAAC;QACD,MAAM,GAAG,IAAI,CAAC;QACd,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,CAAC,GAAS,EAAE,IAAwB,EAAU,EAAE;QACjE,MAAM,GAAG,GAAG,GAAG,CAAC,EAAwC,CAAC;QACzD,MAAM,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,WAAW,CAAC;QAC9C,MAAM,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC;IACzC,CAAC,CAAC;IAEF,MAAM,mBAAmB,GAAG,CAAC,IAAU,EAAE,GAAW,EAAQ,EAAE;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,QAAgB,CAAC;QACnC,sEAAsE;QACtE,oEAAoE;QACpE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACpC,CAAC,EAAE,CAAC;QACN,CAAC;QACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACpB,MAAM,GAAG,IAAI,CAAC;YACd,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;QACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC;IACrE,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,CACZ,IAAa,EACb,KAAmB,EACnB,IAAwB,EAClB,EAAE;QACR,IAAI,MAAM,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACxD,OAAO;QACT,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAC3B,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACxE,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC;YACjC,8DAA8D;YAC9D,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YACzC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YAClC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;gBACnC,OAAO;YACT,CAAC;YACD,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACxC,MAAM,KAAK,GAAe,EAAC,KAAK,EAAE,IAAI,GAAG,EAAE,EAAC,CAAC;YAC7C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,IAAI,GAAI,MAAM,CAAC,GAAiC,CAAC,IAAI,CAAC;gBAC5D,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC3B,MAAM,KAAK,GAAG,GAAG,MAAM,GAAG,WAAW,EAAE,EAAE,CAAC;oBAC1C,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;oBAC7B,KAAK,CAAC,IAAI,CACR,SAAS,KAAK,iBAAiB,IAAI,CAAC,SAAS,CAC3C,qCAAqC,IAAI,IAAI,QAAQ,IAAI,IAAI,EAAE,CAChE,IAAI,CACN,CAAC;gBACJ,CAAC;gBACD,IAAK,MAAM,CAAC,UAAoC,EAAE,MAAM,EAAE,CAAC;oBACzD,+DAA+D;oBAC/D,4CAA4C;oBAC5C,MAAM,GAAG,IAAI,CAAC;oBACd,OAAO;gBACT,CAAC;gBACD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAW,CAAC;gBAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;gBACnC,oEAAoE;gBACpE,sEAAsE;gBACtE,gDAAgD;gBAChD,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,IAAI,MAAM,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC;oBAC/B,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;oBACtB,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBACpC,CAAC,EAAE,CAAC;oBACN,CAAC;oBACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;wBACvC,IAAI,GAAG,GAAG,CAAC;oBACb,CAAC;gBACH,CAAC;gBACD,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC;YACzD,CAAC;YACD,qEAAqE;YACrE,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC;YAChC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAY,CAAC;YAC/B,KAAK,MAAM,MAAM,IAAK,IAAI,CAAC,IAAe,IAAI,EAAE,EAAE,CAAC;gBACjD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;oBACvB,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;wBAC5D,SAAS;oBACX,CAAC;oBACD,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9D,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBAC/C,MAAM,GAAG,GAAG,OAAO,CACjB,KAAK,EACJ,IAAI,CAAC,QAAsC,CAAC,IAAI,CAClD,CAAC;gBACF,IAAI,MAAM,EAAE,CAAC;oBACX,OAAO;gBACT,CAAC;gBACD,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAC/B,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;gBACrC,OAAO;YACT,CAAC;QACH,CAAC;QAED,IACE,IAAI,CAAC,IAAI,KAAK,kBAAkB;YAChC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,mBAAmB,EACtC,CAAC;YACD,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,EAAG,IAAI,CAAC,IAAkC,CAAC,IAAI,CAAC,CAAC;YAC1E,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO;YACT,CAAC;YACD,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACrD,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QAED,IAAI,SAA6B,CAAC;QAClC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACrB,SAAS;YACX,CAAC;YACD,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;gBAClB,KAAK,oBAAoB;oBACvB,SAAS;wBACP,GAAG,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,YAAY;4BAChE,CAAC,CAAE,IAAI,CAAC,EAAgC,CAAC,IAAI;4BAC7C,CAAC,CAAC,SAAS,CAAC;oBAChB,MAAM;gBACR,KAAK,sBAAsB;oBACzB,SAAS;wBACP,GAAG,KAAK,OAAO;4BACf,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;4BACjB,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY;4BAC7B,CAAC,CAAE,IAAI,CAAC,IAAkC,CAAC,IAAI;4BAC/C,CAAC,CAAC,SAAS,CAAC;oBAChB,MAAM;gBACR,KAAK,0BAA0B;oBAC7B,SAAS,GAAG,SAAS,CAAC;oBACtB,MAAM;gBACR;oBACE,SAAS,GAAG,SAAS,CAAC;YAC1B,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QACrC,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,MAAY,EAAW,EAAE,CAC7C,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;QAClB,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,mBAAmB,CAAC;IAE1C,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;IAC1B,IAAI,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;IACrC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,EAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,WAAW,CAAC,EAAC,KAAK,EAAE,UAAU,EAAC,CAAC,EAAC,CAAC;AAC/E,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAsB,EAAU,EAAE,CAAC,CAAC;IACnE,IAAI,EAAE,oBAAoB;IAC1B,KAAK,EAAE,OAAO;IACd,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO;QACzB,IAAI,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACzD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7D,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,mBAAmB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACvC,CAAC;CACF,CAAC,CAAC","sourcesContent":["import type {Plugin} from 'vite';\nimport {parseAst} from 'vite';\nimport MagicString from 'magic-string';\nimport {JS_FILE_RE} from './shared.js';\n\ntype Node = Record<string, unknown> & {\n type: string;\n start: number;\n end: number;\n};\n\n/** One class body that declares at least one private name. */\ninterface ClassScope {\n /** Private name (without `#`) to the identifier of its symbol constant. */\n names: Map<string, string>;\n}\n\nconst PRIVATE_KEY_HOLDERS = new Set([\n 'PropertyDefinition',\n 'MethodDefinition',\n 'AccessorProperty',\n]);\n\nconst isNode = (v: unknown): v is Node =>\n v !== null && typeof v === 'object' && typeof (v as Node).type === 'string';\n\n/** Private names declared directly in a class body. */\nconst declaredNames = (cls: Node): Node[] => {\n const body = cls.body as {body?: Node[]} | undefined;\n const out: Node[] = [];\n for (const member of body?.body ?? []) {\n if (\n PRIVATE_KEY_HOLDERS.has(member.type) &&\n isNode(member.key) &&\n member.key.type === 'PrivateIdentifier'\n ) {\n out.push(member);\n }\n }\n return out;\n};\n\n/**\n * Rewrites native `#private` class members into computed keys backed by\n * `Symbol.for(...)`. The key is stable across re-evaluations of the module,\n * so instances built by an earlier evaluation of a class and methods copied\n * from a later one agree on where private state lives. That is what lets HMR\n * patch a class in place. Returns `null` when there is nothing to rewrite or\n * the module can't be handled safely.\n */\nexport const rewritePrivateNames = (\n code: string,\n id: string\n): {code: string; map: ReturnType<MagicString['generateMap']>} | null => {\n if (!code.includes('#')) {\n return null;\n }\n const [file] = id.split('?', 1);\n let ast: Node;\n try {\n ast = parseAst(code, {sourceType: 'module'}, file) as unknown as Node;\n } catch {\n return null;\n }\n\n let prefix = '__litPriv';\n while (code.includes(prefix)) {\n prefix += '_';\n }\n\n const magic = new MagicString(code);\n const decls: string[] = [];\n const classKeyCounts = new Map<string, number>();\n let symbolCount = 0;\n let failed = false;\n\n const symbolFor = (scope: ClassScope, name: string): string | undefined =>\n scope.names.get(name);\n\n const resolve = (stack: ClassScope[], name: string): string => {\n for (let i = stack.length - 1; i >= 0; i--) {\n const sym = symbolFor(stack[i], name);\n if (sym !== undefined) {\n return sym;\n }\n }\n failed = true;\n return '';\n };\n\n const classKeyOf = (cls: Node, hint: string | undefined): string => {\n const cid = cls.id as {name?: string} | null | undefined;\n const base = cid?.name ?? hint ?? 'anonymous';\n const n = classKeyCounts.get(base) ?? 0;\n classKeyCounts.set(base, n + 1);\n return n === 0 ? base : `${base}~${n}`;\n };\n\n const rewriteMemberAccess = (node: Node, sym: string): void => {\n const prop = node.property as Node;\n // Find the `.` / `?.` token before the property; the object's own end\n // can't be used because a parenthesised object ends before its `)`.\n let i = prop.start - 1;\n while (i >= 0 && /\\s/.test(code[i])) {\n i--;\n }\n if (code[i] !== '.') {\n failed = true;\n return;\n }\n const optional = code[i - 1] === '?';\n const from = optional ? i - 1 : i;\n magic.overwrite(from, prop.end, `${optional ? '?.' : ''}[${sym}]`);\n };\n\n const visit = (\n node: unknown,\n stack: ClassScope[],\n hint: string | undefined\n ): void => {\n if (failed || node === null || typeof node !== 'object') {\n return;\n }\n if (Array.isArray(node)) {\n for (const item of node) {\n visit(item, stack, hint);\n }\n return;\n }\n if (!isNode(node)) {\n return;\n }\n\n if (node.type === 'ClassDeclaration' || node.type === 'ClassExpression') {\n const members = declaredNames(node);\n const heritage = node.superClass;\n // Decorators are outside the class body's private-name scope.\n visit(node.decorators, stack, undefined);\n visit(heritage, stack, undefined);\n if (members.length === 0) {\n visit(node.body, stack, undefined);\n return;\n }\n const classKey = classKeyOf(node, hint);\n const scope: ClassScope = {names: new Map()};\n for (const member of members) {\n const name = (member.key as unknown as {name: string}).name;\n if (!scope.names.has(name)) {\n const ident = `${prefix}${symbolCount++}`;\n scope.names.set(name, ident);\n decls.push(\n `const ${ident} = Symbol.for(${JSON.stringify(\n `@oddsquad/vite-plugin-lit#private:${file}:${classKey}#${name}`\n )});`\n );\n }\n if ((member.decorators as unknown[] | undefined)?.length) {\n // A decorator directly before a computed key would parse as an\n // index access on the decorator expression.\n failed = true;\n return;\n }\n const key = member.key as Node;\n const sym = scope.names.get(name)!;\n // A computed key at the start of a member can continue the previous\n // member's initializer when that one relied on ASI (`a = 1` + newline\n // + `#b`), so lead with an explicit terminator.\n let lead = '';\n if (member.start === key.start) {\n let j = key.start - 1;\n while (j >= 0 && /\\s/.test(code[j])) {\n j--;\n }\n if (code[j] !== '{' && code[j] !== ';') {\n lead = ';';\n }\n }\n magic.overwrite(key.start, key.end, `${lead}[${sym}]`);\n }\n // Members: keys of non-private members and all values live in scope.\n const inner = [...stack, scope];\n const body = node.body as Node;\n for (const member of (body.body as Node[]) ?? []) {\n for (const k in member) {\n if (k === 'parent' || (k === 'key' && isPrivateKey(member))) {\n continue;\n }\n visit(member[k], inner, undefined);\n }\n }\n return;\n }\n\n if (node.type === 'MemberExpression' && isNode(node.property)) {\n if (node.property.type === 'PrivateIdentifier') {\n const sym = resolve(\n stack,\n (node.property as unknown as {name: string}).name\n );\n if (failed) {\n return;\n }\n rewriteMemberAccess(node, sym);\n visit(node.object, stack, undefined);\n return;\n }\n }\n\n if (\n node.type === 'BinaryExpression' &&\n isNode(node.left) &&\n node.left.type === 'PrivateIdentifier'\n ) {\n const sym = resolve(stack, (node.left as unknown as {name: string}).name);\n if (failed) {\n return;\n }\n magic.overwrite(node.left.start, node.left.end, sym);\n visit(node.right, stack, undefined);\n return;\n }\n\n let childHint: string | undefined;\n for (const key in node) {\n if (key === 'parent') {\n continue;\n }\n switch (node.type) {\n case 'VariableDeclarator':\n childHint =\n key === 'init' && isNode(node.id) && node.id.type === 'Identifier'\n ? (node.id as unknown as {name: string}).name\n : undefined;\n break;\n case 'AssignmentExpression':\n childHint =\n key === 'right' &&\n isNode(node.left) &&\n node.left.type === 'Identifier'\n ? (node.left as unknown as {name: string}).name\n : undefined;\n break;\n case 'ExportDefaultDeclaration':\n childHint = 'default';\n break;\n default:\n childHint = undefined;\n }\n visit(node[key], stack, childHint);\n }\n };\n\n const isPrivateKey = (member: Node): boolean =>\n PRIVATE_KEY_HOLDERS.has(member.type) &&\n isNode(member.key) &&\n member.key.type === 'PrivateIdentifier';\n\n visit(ast, [], undefined);\n if (failed || decls.length === 0) {\n return null;\n }\n\n const header = `${decls.join('')}\\n`;\n if (code.startsWith('#!')) {\n const nl = code.indexOf('\\n');\n if (nl === -1) {\n return null;\n }\n magic.appendLeft(nl + 1, header);\n } else {\n magic.prepend(header);\n }\n return {code: magic.toString(), map: magic.generateMap({hires: 'boundary'})};\n};\n\n/**\n * Dev-only transform that swaps native `#private` class members for stable\n * symbol keys so HMR's in-place class patching keeps working. See\n * {@link rewritePrivateNames}. `enabled` is read lazily because options are\n * re-resolved against the loaded env after the plugin array is built.\n */\nexport const litPrivateFields = (enabled: () => boolean): Plugin => ({\n name: 'lit-private-fields',\n apply: 'serve',\n transform(code, id, options) {\n if (options?.ssr || !enabled()) {\n return null;\n }\n if (id.startsWith('\\0') || id.includes('/node_modules/')) {\n return null;\n }\n const [file, query] = id.split('?', 2);\n if (!JS_FILE_RE.test(file) && !query?.includes('html-proxy')) {\n return null;\n }\n return rewritePrivateNames(code, id);\n },\n});\n"]}
@@ -1,8 +1,3 @@
1
- /**
2
- * @license
3
- * Copyright 2026 Google LLC
4
- * SPDX-License-Identifier: BSD-3-Clause
5
- */
6
1
  /**
7
2
  * Resolves a runtime module to an absolute fs path (served via `/@fs/`), so
8
3
  * the plugin works from any served root. Falls back from the built `.js` to
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/lib/plugins/shared.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,SAAU,MAAM,KAAG,MAQnD,CAAC;AAEF,eAAO,MAAM,UAAU,QAAoB,CAAC"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/lib/plugins/shared.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,SAAU,MAAM,KAAG,MAQnD,CAAC;AAEF,eAAO,MAAM,UAAU,QAAoB,CAAC"}
@@ -1,8 +1,3 @@
1
- /**
2
- * @license
3
- * Copyright 2026 Google LLC
4
- * SPDX-License-Identifier: BSD-3-Clause
5
- */
6
1
  import {existsSync} from 'node:fs';
7
2
  import {fileURLToPath} from 'node:url';
8
3
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/lib/plugins/shared.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,UAAU,EAAC,MAAM,SAAS,CAAC;AACnC,OAAO,EAAC,aAAa,EAAC,MAAM,UAAU,CAAC;AAEvC;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,IAAY,EAAU,EAAE;IAC3D,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAU,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,cAAc,IAAI,IAAI,GAAG,EAAE,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QAClE,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,EAAE,CAAC,CAAC;AACpE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,iBAAiB,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2026 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\nimport {existsSync} from 'node:fs';\nimport {fileURLToPath} from 'node:url';\n\n/**\n * Resolves a runtime module to an absolute fs path (served via `/@fs/`), so\n * the plugin works from any served root. Falls back from the built `.js` to\n * the `.ts` source when running un-built (e.g. under vitest).\n */\nexport const resolveRuntimeModule = (name: string): string => {\n for (const ext of ['js', 'ts'] as const) {\n const url = new URL(`../runtime/${name}.${ext}`, import.meta.url);\n if (existsSync(url)) {\n return fileURLToPath(url).replace(/\\\\/g, '/');\n }\n }\n throw new Error(`[lit-plugin] runtime module not found: ${name}`);\n};\n\nexport const JS_FILE_RE = /\\.[cm]?[jt]sx?$/;\n"]}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/lib/plugins/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,SAAS,CAAC;AACnC,OAAO,EAAC,aAAa,EAAC,MAAM,UAAU,CAAC;AAEvC;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,IAAY,EAAU,EAAE;IAC3D,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAU,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,cAAc,IAAI,IAAI,GAAG,EAAE,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QAClE,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,EAAE,CAAC,CAAC;AACpE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,iBAAiB,CAAC","sourcesContent":["import {existsSync} from 'node:fs';\nimport {fileURLToPath} from 'node:url';\n\n/**\n * Resolves a runtime module to an absolute fs path (served via `/@fs/`), so\n * the plugin works from any served root. Falls back from the built `.js` to\n * the `.ts` source when running un-built (e.g. under vitest).\n */\nexport const resolveRuntimeModule = (name: string): string => {\n for (const ext of ['js', 'ts'] as const) {\n const url = new URL(`../runtime/${name}.${ext}`, import.meta.url);\n if (existsSync(url)) {\n return fileURLToPath(url).replace(/\\\\/g, '/');\n }\n }\n throw new Error(`[lit-plugin] runtime module not found: ${name}`);\n};\n\nexport const JS_FILE_RE = /\\.[cm]?[jt]sx?$/;\n"]}
@@ -1,8 +1,3 @@
1
- /**
2
- * @license
3
- * Copyright 2026 Google LLC
4
- * SPDX-License-Identifier: BSD-3-Clause
5
- */
6
1
  import type { Plugin } from 'vite';
7
2
  /**
8
3
  * The public timeline API virtual module, served in dev and build alike:
@@ -1 +1 @@
1
- {"version":3,"file":"timeline-virtual.d.ts","sourceRoot":"","sources":["../../src/lib/plugins/timeline-virtual.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,MAAM,CAAC;AASjC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,iBAChB,MAAM,OAAO,KACzB,MA6BF,CAAC"}
1
+ {"version":3,"file":"timeline-virtual.d.ts","sourceRoot":"","sources":["../../src/lib/plugins/timeline-virtual.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,MAAM,CAAC;AASjC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,iBAChB,MAAM,OAAO,KACzB,MA6BF,CAAC"}
@@ -1,8 +1,3 @@
1
- /**
2
- * @license
3
- * Copyright 2026 Google LLC
4
- * SPDX-License-Identifier: BSD-3-Clause
5
- */
6
1
  import {resolveRuntimeModule} from './shared.js';
7
2
  const TIMELINE_VIRTUAL_ID = 'virtual:lit-plugin/timeline';
8
3
  const TIMELINE_RESOLVED_ID = '\0virtual:lit-plugin/timeline';
@@ -1 +1 @@
1
- {"version":3,"file":"timeline-virtual.js","sourceRoot":"","sources":["../../src/lib/plugins/timeline-virtual.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAC,oBAAoB,EAAC,MAAM,aAAa,CAAC;AAEjD,MAAM,mBAAmB,GAAG,6BAA6B,CAAC;AAC1D,MAAM,oBAAoB,GAAG,+BAA+B,CAAC;AAC7D,MAAM,aAAa,GACjB,6CAA6C;IAC7C,6CAA6C,CAAC;AAEhD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,WAAW,GAAkB,GAAG,EAAE,CAAC,KAAK,EAChC,EAAE;IACV,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,OAAO;QACL,IAAI,EAAE,sBAAsB;QAC5B,cAAc,CAAC,MAAM;YACnB,OAAO,GAAG,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC;QACvC,CAAC;QACD,SAAS,CAAC,EAAE;YACV,OAAO,EAAE,KAAK,mBAAmB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC;QAClE,CAAC;QACD,IAAI,CAAC,EAAE;YACL,IAAI,EAAE,KAAK,oBAAoB,EAAE,CAAC;gBAChC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,qEAAqE;YACrE,uEAAuE;YACvE,uEAAuE;YACvE,mEAAmE;YACnE,iBAAiB;YACjB,IAAI,OAAO,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC9B,OAAO,EAAC,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,EAAC,CAAC;YACjD,CAAC;YACD,MAAM,OAAO,GAAG,oBAAoB,CAAC,qBAAqB,CAAC,CAAC;YAC5D,OAAO;gBACL,IAAI,EAAE,iBAAiB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK;gBACnD,UAAU,EAAE,IAAI;aACjB,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2026 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\nimport type {Plugin} from 'vite';\nimport {resolveRuntimeModule} from './shared.js';\n\nconst TIMELINE_VIRTUAL_ID = 'virtual:lit-plugin/timeline';\nconst TIMELINE_RESOLVED_ID = '\\0virtual:lit-plugin/timeline';\nconst TIMELINE_STUB =\n 'export const addTimelineEvent = () => {};\\n' +\n 'export const addTimelineLayer = () => {};\\n';\n\n/**\n * The public timeline API virtual module, served in dev and build alike:\n * app code importing it must keep building under `vite build`, where the HMR\n * plugin doesn't apply. While these hooks lived on that serve-only plugin,\n * nothing claimed the specifier during a build and the bundler failed to\n * resolve it.\n *\n * `getTimeline` is a getter, not a value: `litPlugin()` re-resolves its\n * options against the loaded env in a `config` hook, which runs after the\n * plugin array is built.\n */\nexport const litTimelineVirtual = (\n getTimeline: () => boolean = () => false\n): Plugin => {\n let isBuild = false;\n return {\n name: 'lit-timeline-virtual',\n configResolved(config) {\n isBuild = config.command === 'build';\n },\n resolveId(id) {\n return id === TIMELINE_VIRTUAL_ID ? TIMELINE_RESOLVED_ID : null;\n },\n load(id) {\n if (id !== TIMELINE_RESOLVED_ID) {\n return null;\n }\n // Under build the stub is unconditional, even with `timeline: true`.\n // The runtime delivers only over `import.meta.hot`, so in a production\n // bundle it is a queue that never drains; the stub keeps the transport\n // out of the bundle and makes the documented \"no-op in production\"\n // behavior true.\n if (isBuild || !getTimeline()) {\n return {code: TIMELINE_STUB, moduleType: 'js'};\n }\n const apiPath = resolveRuntimeModule('timeline/public-api');\n return {\n code: `export * from ${JSON.stringify(apiPath)};\\n`,\n moduleType: 'js',\n };\n },\n };\n};\n"]}
1
+ {"version":3,"file":"timeline-virtual.js","sourceRoot":"","sources":["../../src/lib/plugins/timeline-virtual.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,oBAAoB,EAAC,MAAM,aAAa,CAAC;AAEjD,MAAM,mBAAmB,GAAG,6BAA6B,CAAC;AAC1D,MAAM,oBAAoB,GAAG,+BAA+B,CAAC;AAC7D,MAAM,aAAa,GACjB,6CAA6C;IAC7C,6CAA6C,CAAC;AAEhD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,WAAW,GAAkB,GAAG,EAAE,CAAC,KAAK,EAChC,EAAE;IACV,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,OAAO;QACL,IAAI,EAAE,sBAAsB;QAC5B,cAAc,CAAC,MAAM;YACnB,OAAO,GAAG,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC;QACvC,CAAC;QACD,SAAS,CAAC,EAAE;YACV,OAAO,EAAE,KAAK,mBAAmB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC;QAClE,CAAC;QACD,IAAI,CAAC,EAAE;YACL,IAAI,EAAE,KAAK,oBAAoB,EAAE,CAAC;gBAChC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,qEAAqE;YACrE,uEAAuE;YACvE,uEAAuE;YACvE,mEAAmE;YACnE,iBAAiB;YACjB,IAAI,OAAO,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC9B,OAAO,EAAC,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,EAAC,CAAC;YACjD,CAAC;YACD,MAAM,OAAO,GAAG,oBAAoB,CAAC,qBAAqB,CAAC,CAAC;YAC5D,OAAO;gBACL,IAAI,EAAE,iBAAiB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK;gBACnD,UAAU,EAAE,IAAI;aACjB,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import type {Plugin} from 'vite';\nimport {resolveRuntimeModule} from './shared.js';\n\nconst TIMELINE_VIRTUAL_ID = 'virtual:lit-plugin/timeline';\nconst TIMELINE_RESOLVED_ID = '\\0virtual:lit-plugin/timeline';\nconst TIMELINE_STUB =\n 'export const addTimelineEvent = () => {};\\n' +\n 'export const addTimelineLayer = () => {};\\n';\n\n/**\n * The public timeline API virtual module, served in dev and build alike:\n * app code importing it must keep building under `vite build`, where the HMR\n * plugin doesn't apply. While these hooks lived on that serve-only plugin,\n * nothing claimed the specifier during a build and the bundler failed to\n * resolve it.\n *\n * `getTimeline` is a getter, not a value: `litPlugin()` re-resolves its\n * options against the loaded env in a `config` hook, which runs after the\n * plugin array is built.\n */\nexport const litTimelineVirtual = (\n getTimeline: () => boolean = () => false\n): Plugin => {\n let isBuild = false;\n return {\n name: 'lit-timeline-virtual',\n configResolved(config) {\n isBuild = config.command === 'build';\n },\n resolveId(id) {\n return id === TIMELINE_VIRTUAL_ID ? TIMELINE_RESOLVED_ID : null;\n },\n load(id) {\n if (id !== TIMELINE_RESOLVED_ID) {\n return null;\n }\n // Under build the stub is unconditional, even with `timeline: true`.\n // The runtime delivers only over `import.meta.hot`, so in a production\n // bundle it is a queue that never drains; the stub keeps the transport\n // out of the bundle and makes the documented \"no-op in production\"\n // behavior true.\n if (isBuild || !getTimeline()) {\n return {code: TIMELINE_STUB, moduleType: 'js'};\n }\n const apiPath = resolveRuntimeModule('timeline/public-api');\n return {\n code: `export * from ${JSON.stringify(apiPath)};\\n`,\n moduleType: 'js',\n };\n },\n };\n};\n"]}
@@ -1,8 +1,3 @@
1
- /**
2
- * @license
3
- * Copyright 2026 Google LLC
4
- * SPDX-License-Identifier: BSD-3-Clause
5
- */
6
1
  /**
7
2
  * Carries child element state across a template re-instantiation.
8
3
  *
@@ -1 +1 @@
1
- {"version":3,"file":"child-state.d.ts","sourceRoot":"","sources":["../../src/lib/runtime/child-state.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;AAE5D,0EAA0E;AAC1E,eAAO,MAAM,kBAAkB,uCAAuC,CAAC;AAEvE,yDAAyD;AACzD,eAAO,MAAM,aAAa,OAAO,CAAC;AAelC,gCAAgC;AAChC,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,gDAAgD;AAChD,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG;IACtC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAuDF;;;;GAIG;AACH,eAAO,MAAM,WAAW,OAAQ,IAAI,KAAG,QAAQ,EAAE,GAAG,SAkBnD,CAAC;AAiCF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,OACzB,WAAW,SACR,SAAS,QAAQ,EAAE,GAAG,SAAS,KACrC,GAAG,CAAC,WAAW,CAyBjB,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,WAAW,OAAQ,MAAM,KAAG,MAAM,EAG5C,CAAC;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,aAAa,SAClB,WAAW,MACb,WAAW,SACR,SAAS,QAAQ,EAAE,GAAG,SAAS,KACrC,IA6BF,CAAC;AAQF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,OAClB,WAAW,SACR,SAAS,QAAQ,EAAE,GAAG,SAAS,KACrC,OA6BF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,QAAQ,QAAS,WAAW,SAAS,WAAW,KAAG,IAa/D,CAAC;AAwBF,MAAM,WAAW,iBAAiB;IAChC,8BAA8B;IAC9B,IAAI,EAAE,MAAM,cAAc,CAAC;IAC3B,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,SAAS,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACjD,oDAAoD;IACpD,YAAY,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAAC;IACpC,8EAA8E;IAC9E,IAAI,IAAI,IAAI,CAAC;IACb,oEAAoE;IACpE,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IACxC,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,eAAO,MAAM,gBAAgB,YAAa,iBAAiB,KAAG,UA6M7D,CAAC"}
1
+ {"version":3,"file":"child-state.d.ts","sourceRoot":"","sources":["../../src/lib/runtime/child-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;AAE5D,0EAA0E;AAC1E,eAAO,MAAM,kBAAkB,uCAAuC,CAAC;AAEvE,yDAAyD;AACzD,eAAO,MAAM,aAAa,OAAO,CAAC;AAelC,gCAAgC;AAChC,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,gDAAgD;AAChD,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG;IACtC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAuDF;;;;GAIG;AACH,eAAO,MAAM,WAAW,OAAQ,IAAI,KAAG,QAAQ,EAAE,GAAG,SAkBnD,CAAC;AAiCF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,OACzB,WAAW,SACR,SAAS,QAAQ,EAAE,GAAG,SAAS,KACrC,GAAG,CAAC,WAAW,CAyBjB,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,WAAW,OAAQ,MAAM,KAAG,MAAM,EAG5C,CAAC;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,aAAa,SAClB,WAAW,MACb,WAAW,SACR,SAAS,QAAQ,EAAE,GAAG,SAAS,KACrC,IA6BF,CAAC;AAQF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,OAClB,WAAW,SACR,SAAS,QAAQ,EAAE,GAAG,SAAS,KACrC,OA6BF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,QAAQ,QAAS,WAAW,SAAS,WAAW,KAAG,IAa/D,CAAC;AAwBF,MAAM,WAAW,iBAAiB;IAChC,8BAA8B;IAC9B,IAAI,EAAE,MAAM,cAAc,CAAC;IAC3B,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,SAAS,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACjD,oDAAoD;IACpD,YAAY,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAAC;IACpC,8EAA8E;IAC9E,IAAI,IAAI,IAAI,CAAC;IACb,oEAAoE;IACpE,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IACxC,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,eAAO,MAAM,gBAAgB,YAAa,iBAAiB,KAAG,UA6M7D,CAAC"}
@@ -1,7 +1,22 @@
1
1
  /**
2
- * @license
3
- * Copyright 2026 Google LLC
4
- * SPDX-License-Identifier: BSD-3-Clause
2
+ * Carries child element state across a template re-instantiation.
3
+ *
4
+ * When a hot patch changes a template's text, lit-html sees a new template,
5
+ * clones fresh DOM and swaps it in: every custom element inside the edited
6
+ * template is re-created and starts from its defaults. For a short window
7
+ * after a hot patch this module pairs each element dropped from a root with
8
+ * the next freshly created element of the same tag connected in that root
9
+ * (FIFO, i.e. document order), then either copies the old element's state
10
+ * onto the new one (`'transfer'`) or, where the new element carries no
11
+ * bindings, puts the old element back in its place (`'reuse'`).
12
+ *
13
+ * Dependency-free and duck-typed like `patch.ts`. The lit-html internals it
14
+ * reads (`_$litPart$`, `_$committedValue`, `_$template`, `_$parts`,
15
+ * `_$startNode`, `_$endNode`) are looked up by their development names first
16
+ * and then by the stable minified names lit's prod build gives them
17
+ * (`_$AH`, `_$AD`, `_$AV`, `_$AA`, `_$AB`). Every access is guarded; when the
18
+ * part tree can't be read, transfer skips only attribute-driven keys and
19
+ * reuse falls back to transfer.
5
20
  */
6
21
  /** `Symbol.for` description prefix of the dev-only `#private` rewrite. */
7
22
  export const PRIVATE_KEY_PREFIX = '@oddsquad/vite-plugin-lit#private:';