owndesign 0.2.2 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/server/index.js +889 -809
- package/dist/server/prompts/agents/design-page.md +21 -2
- package/dist/server/prompts/index.ts +0 -1
- package/dist/server/templates/html/page-shell.html +1 -3
- package/dist/server/templates/owndesign-runtime.test.ts +51 -0
- package/dist/server/templates/owndesign-runtime.ts +138 -0
- package/dist/server/templates/single-html.ts +18 -0
- package/dist/web/assets/{angular-html-BC-ehZ2Z.js → angular-html-BdqUTOSr.js} +1 -1
- package/dist/web/assets/{angular-ts-CbNdIQVH.js → angular-ts-CHVPl0K2.js} +1 -1
- package/dist/web/assets/{apl-CKXIPXmN.js → apl-Cdj8xhOr.js} +1 -1
- package/dist/web/assets/{arc-DCbsmfyT.js → arc-CQzLFt8P.js} +1 -1
- package/dist/web/assets/architecture-7EHR7CIX-D_1q3iHJ.js +1 -0
- package/dist/web/assets/{architectureDiagram-3BPJPVTR-C3CSEDbb.js → architectureDiagram-3BPJPVTR-DQRev6P0.js} +1 -1
- package/dist/web/assets/{astro-0YgDtFyB.js → astro-CqvP6Sm9.js} +1 -1
- package/dist/web/assets/{blade-DCBz6o9i.js → blade-AHcrF7FJ.js} +1 -1
- package/dist/web/assets/{blockDiagram-GPEHLZMM-Wy4mtab2.js → blockDiagram-GPEHLZMM-wWr1jqbH.js} +1 -1
- package/dist/web/assets/{c-B_5YfUT4.js → c-L6BASEY4.js} +1 -1
- package/dist/web/assets/{c4Diagram-AAUBKEIU-DvAQK-yr.js → c4Diagram-AAUBKEIU-QcoxyP1-.js} +1 -1
- package/dist/web/assets/channel-CKLAyPXF.js +1 -0
- package/dist/web/assets/{chunk-2J33WTMH-D12BmulM.js → chunk-2J33WTMH-Rt8Y9qQM.js} +1 -1
- package/dist/web/assets/{chunk-4BX2VUAB-CUsT6Yoy.js → chunk-4BX2VUAB-DgnUshBl.js} +1 -1
- package/dist/web/assets/{chunk-55IACEB6-B1fNBh7K.js → chunk-55IACEB6-C4VtZ0S1.js} +1 -1
- package/dist/web/assets/{chunk-727SXJPM-BNwBLitG.js → chunk-727SXJPM-pX8vxQBM.js} +1 -1
- package/dist/web/assets/{chunk-AQP2D5EJ-Cj6w8RRN.js → chunk-AQP2D5EJ-CtASt0uL.js} +1 -1
- package/dist/web/assets/{chunk-FMBD7UC4-DZQMeOiP.js → chunk-FMBD7UC4-AYbdnBZ-.js} +1 -1
- package/dist/web/assets/{chunk-ND2GUHAM-BDZZZpgK.js → chunk-ND2GUHAM-Bi2LmhY7.js} +1 -1
- package/dist/web/assets/chunk-QZHKN3VN-_jfeFdsU.js +1 -0
- package/dist/web/assets/classDiagram-4FO5ZUOK-CPA3GyTp.js +1 -0
- package/dist/web/assets/classDiagram-v2-Q7XG4LA2-CPA3GyTp.js +1 -0
- package/dist/web/assets/{cobol-B7rjWy71.js → cobol-2mv2h2I-.js} +1 -1
- package/dist/web/assets/{coffee-327Z21kX.js → coffee-WyF-3t43.js} +1 -1
- package/dist/web/assets/{cose-bilkent-S5V4N54A-D1c4YrLP.js → cose-bilkent-S5V4N54A-DM6dd-q1.js} +1 -1
- package/dist/web/assets/{cpp-76QBVYPh.js → cpp-CAEbN4Ya.js} +1 -1
- package/dist/web/assets/{crystal-B4heXbZm.js → crystal-DyRNEnWF.js} +1 -1
- package/dist/web/assets/{css-CzEdf7OR.js → css-CG0mYlL5.js} +1 -1
- package/dist/web/assets/{dagre-BM42HDAG-ET87-tzF.js → dagre-BM42HDAG-D_NqzEVm.js} +1 -1
- package/dist/web/assets/{diagram-2AECGRRQ-CBQXEPqZ.js → diagram-2AECGRRQ-Bgm-_Eko.js} +1 -1
- package/dist/web/assets/{diagram-5GNKFQAL-CtNzeaR4.js → diagram-5GNKFQAL-C_9mv9Qd.js} +1 -1
- package/dist/web/assets/{diagram-KO2AKTUF-DKv9ewpj.js → diagram-KO2AKTUF-BHQT9JgD.js} +1 -1
- package/dist/web/assets/{diagram-LMA3HP47-BdL7Q4hm.js → diagram-LMA3HP47-B48NzL_Q.js} +1 -1
- package/dist/web/assets/{diagram-OG6HWLK6-BTYYRviK.js → diagram-OG6HWLK6-DKk01CLS.js} +1 -1
- package/dist/web/assets/{edge-CbifZx89.js → edge-WFDIDqY1.js} +1 -1
- package/dist/web/assets/{elixir-D7epo7XU.js → elixir-CP1ajsZR.js} +1 -1
- package/dist/web/assets/{elm-CDnfHiSW.js → elm-oora7HJE.js} +1 -1
- package/dist/web/assets/{erDiagram-TEJ5UH35-DoS_g6rc.js → erDiagram-TEJ5UH35-ClLJSrwL.js} +1 -1
- package/dist/web/assets/{erb-CJPDtktp.js → erb-DpZNjJ9_.js} +1 -1
- package/dist/web/assets/eventmodeling-FCH6USID-1ivGez78.js +1 -0
- package/dist/web/assets/{flowDiagram-I6XJVG4X-INqAi_9A.js → flowDiagram-I6XJVG4X-m1zK1OOI.js} +1 -1
- package/dist/web/assets/{ganttDiagram-6RSMTGT7-BtV9RfaV.js → ganttDiagram-6RSMTGT7-R7B6FFxw.js} +1 -1
- package/dist/web/assets/{git-rebase-XN1VAGxD.js → git-rebase-Dg9skXJz.js} +1 -1
- package/dist/web/assets/gitGraph-WXDBUCRP-Dpi4pm_y.js +1 -0
- package/dist/web/assets/{gitGraphDiagram-PVQCEYII-Bg7oxgNx.js → gitGraphDiagram-PVQCEYII-rvpKbkxm.js} +1 -1
- package/dist/web/assets/{glimmer-js-jAUeYMlX.js → glimmer-js-BM1sc5ia.js} +1 -1
- package/dist/web/assets/{glimmer-ts-wcJbAc9L.js → glimmer-ts-BJ5aeU1p.js} +1 -1
- package/dist/web/assets/{glsl-CqkwmhMS.js → glsl-DAXCJ1Bs.js} +1 -1
- package/dist/web/assets/{graphql-MSHUJ_J9.js → graphql-_HTUmoJJ.js} +1 -1
- package/dist/web/assets/{hack-o9VcDxFX.js → hack-Bbw_IBNu.js} +1 -1
- package/dist/web/assets/{haml-yMII7dOY.js → haml-BElCN2ig.js} +1 -1
- package/dist/web/assets/{handlebars-DqywSDps.js → handlebars-PfBBM4Ul.js} +1 -1
- package/dist/web/assets/{highlighted-body-OFNGDK62-DZUhBEEf.js → highlighted-body-OFNGDK62-B7shmJas.js} +1 -1
- package/dist/web/assets/{html-D8D_RndX.js → html-BF5zzurH.js} +1 -1
- package/dist/web/assets/{html-derivative-Db1SyKg8.js → html-derivative-oPCMAlhR.js} +1 -1
- package/dist/web/assets/{http-Bqs_GAGw.js → http-B3FNtPG9.js} +1 -1
- package/dist/web/assets/{hurl-j0mDeRMp.js → hurl-Dp2M6dIg.js} +1 -1
- package/dist/web/assets/index-YSa89xAk.js +977 -0
- package/dist/web/assets/index-qzT4Spui.css +2 -0
- package/dist/web/assets/info-J43DQDTF-CCIIC-lT.js +1 -0
- package/dist/web/assets/{infoDiagram-5YYISTIA-D4cmnLLV.js → infoDiagram-5YYISTIA-DUiIIzSJ.js} +1 -1
- package/dist/web/assets/{ishikawaDiagram-YF4QCWOH-BY9yvtJK.js → ishikawaDiagram-YF4QCWOH-BDoM1IJ1.js} +1 -1
- package/dist/web/assets/{java-CegvNhLh.js → java-D8VYPdmO.js} +1 -1
- package/dist/web/assets/{javascript-DhcUAesx.js → javascript-8l7nZMBo.js} +1 -1
- package/dist/web/assets/{jinja-BdSDD1Q-.js → jinja-CTV42GN6.js} +1 -1
- package/dist/web/assets/{jison-CarYqmfq.js → jison-DOEd3yQu.js} +1 -1
- package/dist/web/assets/{journeyDiagram-JHISSGLW-rDquyMpx.js → journeyDiagram-JHISSGLW-o_K8r6Fc.js} +1 -1
- package/dist/web/assets/{json-wCF8Ai7e.js → json-BJP4ONN0.js} +1 -1
- package/dist/web/assets/{jsx-Ct3LR2iE.js → jsx-kpZBrH4w.js} +1 -1
- package/dist/web/assets/{julia-Brh5r__6.js → julia-H9ccs9iA.js} +1 -1
- package/dist/web/assets/{just-CK9u7rV8.js → just-hj2UAEFQ.js} +1 -1
- package/dist/web/assets/{kanban-definition-UN3LZRKU-DRY4BHuX.js → kanban-definition-UN3LZRKU-QwMAKT_f.js} +1 -1
- package/dist/web/assets/{latex-CnioxxTZ.js → latex-CyO33iPb.js} +1 -1
- package/dist/web/assets/{linear-DdVYArrQ.js → linear-o7e5jEgw.js} +1 -1
- package/dist/web/assets/{liquid-CWr27PHL.js → liquid-_mek6fOE.js} +1 -1
- package/dist/web/assets/{lua-BHz_f72B.js → lua-C2DhJyVI.js} +1 -1
- package/dist/web/assets/{marko-DYZOkg7A.js → marko-CZEiD-NB.js} +1 -1
- package/dist/web/assets/{mdc-a5KQMe4S.js → mdc-A90dq1MH.js} +1 -1
- package/dist/web/assets/mermaid-GHXKKRXX-BHX3ego2.js +1 -0
- package/dist/web/assets/{mermaid-parser.core-BAsHbYUQ.js → mermaid-parser.core-CwzV1M_V.js} +2 -2
- package/dist/web/assets/{mindmap-definition-RKZ34NQL-C1ndv4OX.js → mindmap-definition-RKZ34NQL-BMri-V6y.js} +1 -1
- package/dist/web/assets/{nginx-DYjAek21.js → nginx-DOMnJ23j.js} +1 -1
- package/dist/web/assets/{nim-BY3DE5rh.js → nim-zbR5LDAV.js} +1 -1
- package/dist/web/assets/packet-YPE3B663-ByXdjZNB.js +1 -0
- package/dist/web/assets/{perl-Q7rsz5p8.js → perl-DdSkRoeE.js} +1 -1
- package/dist/web/assets/{php-wkLOOMEB.js → php-BpQLZPHO.js} +1 -1
- package/dist/web/assets/pie-LRSECV5Y-B4cm_9Re.js +1 -0
- package/dist/web/assets/{pieDiagram-4H26LBE5-hbmKZkAo.js → pieDiagram-4H26LBE5-DFad80u4.js} +1 -1
- package/dist/web/assets/{pug-DBjGFTz6.js → pug-C_fdPtH-.js} +1 -1
- package/dist/web/assets/{qml-6JbnGGh-.js → qml-CNXBf8kx.js} +1 -1
- package/dist/web/assets/{quadrantDiagram-W4KKPZXB-Ce3Tyy1v.js → quadrantDiagram-W4KKPZXB-CXH7Ps0K.js} +1 -1
- package/dist/web/assets/{r-CpWosUkA.js → r-BCVwx55G.js} +1 -1
- package/dist/web/assets/radar-GUYGQ44K-BfTLimWm.js +1 -0
- package/dist/web/assets/{razor-VaRLosil.js → razor-4UnzbliN.js} +1 -1
- package/dist/web/assets/{regexp-BXX0dR0g.js → regexp-Cx44IXhZ.js} +1 -1
- package/dist/web/assets/{requirementDiagram-4Y6WPE33-BvuMdAA_.js → requirementDiagram-4Y6WPE33-jgMAzOs_.js} +1 -1
- package/dist/web/assets/{rst-B5mAlZz_.js → rst-BQ98T0pl.js} +1 -1
- package/dist/web/assets/{ruby-CuJVGKz0.js → ruby-CQe2_1Mx.js} +1 -1
- package/dist/web/assets/{sankeyDiagram-5OEKKPKP-9vzIUX0R.js → sankeyDiagram-5OEKKPKP-D_3RedGH.js} +1 -1
- package/dist/web/assets/{sas-CVzjXYMr.js → sas-Df1AewjZ.js} +1 -1
- package/dist/web/assets/{scss-WQpgeU5g.js → scss-Mnube1Aq.js} +1 -1
- package/dist/web/assets/{sequenceDiagram-3UESZ5HK-q6rXjDsy.js → sequenceDiagram-3UESZ5HK-C1836wpQ.js} +1 -1
- package/dist/web/assets/{shellscript-CycmgFgs.js → shellscript-CDszjMg6.js} +1 -1
- package/dist/web/assets/{shellsession-CSmahWBB.js → shellsession-CnjHVqYh.js} +1 -1
- package/dist/web/assets/{soy-E8MJKPgz.js → soy-B5asYSZT.js} +1 -1
- package/dist/web/assets/{sql-ChzFHxMA.js → sql-BFrC3Vi5.js} +1 -1
- package/dist/web/assets/{stata-D-Voeimj.js → stata-KlFU2EjN.js} +1 -1
- package/dist/web/assets/{stateDiagram-AJRCARHV-QkbVYicl.js → stateDiagram-AJRCARHV-S48Ai71o.js} +1 -1
- package/dist/web/assets/stateDiagram-v2-BHNVJYJU-bf5jD_zW.js +1 -0
- package/dist/web/assets/{surrealql-CDreHe5D.js → surrealql-rIRDXr_v.js} +1 -1
- package/dist/web/assets/{svelte-UtC71yfS.js → svelte-BQftzg5X.js} +1 -1
- package/dist/web/assets/{templ-DI5vQSP6.js → templ-DfQQPqaN.js} +1 -1
- package/dist/web/assets/{tex-B1pg-O0j.js → tex-8LsiEF9g.js} +1 -1
- package/dist/web/assets/{timeline-definition-PNZ67QCA-hOb9CPgd.js → timeline-definition-PNZ67QCA-C9H3XLfz.js} +1 -1
- package/dist/web/assets/treeView-BLDUP644-mOvRjQhT.js +1 -0
- package/dist/web/assets/treemap-LRROVOQU--QiNmmi5.js +1 -0
- package/dist/web/assets/{ts-tags-DDRBQd18.js → ts-tags-i6Dbvl26.js} +1 -1
- package/dist/web/assets/{tsx-BNOyqGp9.js → tsx-BMATElFg.js} +1 -1
- package/dist/web/assets/{twig-zClWYmrr.js → twig-Cy6dMspl.js} +1 -1
- package/dist/web/assets/{typescript-Bywfx-vz.js → typescript-BMNfloOQ.js} +1 -1
- package/dist/web/assets/{vennDiagram-CIIHVFJN-Cx7yBOK-.js → vennDiagram-CIIHVFJN-DGW7CatZ.js} +1 -1
- package/dist/web/assets/{vue-Bp_voCJR.js → vue-DRQ1Vnbf.js} +1 -1
- package/dist/web/assets/{vue-html-C43GF5Id.js → vue-html-BbCBEXlS.js} +1 -1
- package/dist/web/assets/{vue-vine-CSRbNOMz.js → vue-vine-CgyY7JdC.js} +1 -1
- package/dist/web/assets/wardley-L42UT6IY-CX5eMTMw.js +1 -0
- package/dist/web/assets/{wardleyDiagram-YWT4CUSO-Cwiuub7b.js → wardleyDiagram-YWT4CUSO-DCGzfbps.js} +1 -1
- package/dist/web/assets/{xml-rhD_p6eK.js → xml-95qkb9yN.js} +1 -1
- package/dist/web/assets/{xsl-B-H8kR_6.js → xsl-D6gyo8CK.js} +1 -1
- package/dist/web/assets/{xychartDiagram-2RQKCTM6-DAix_-GG.js → xychartDiagram-2RQKCTM6-YEjKJtlZ.js} +1 -1
- package/dist/web/assets/{yaml-CRIMWRGF.js → yaml-KYdypczj.js} +1 -1
- package/dist/web/index.html +2 -2
- package/package.json +4 -1
- package/dist/server/prompts/agents/component-audit.md +0 -24
- package/dist/web/assets/architecture-7EHR7CIX-Dy_x80xD.js +0 -1
- package/dist/web/assets/channel-CNy21oVR.js +0 -1
- package/dist/web/assets/chunk-QZHKN3VN-ZvBMuvS3.js +0 -1
- package/dist/web/assets/classDiagram-4FO5ZUOK-CdVQzF3q.js +0 -1
- package/dist/web/assets/classDiagram-v2-Q7XG4LA2-CdVQzF3q.js +0 -1
- package/dist/web/assets/eventmodeling-FCH6USID-dHNYNvhr.js +0 -1
- package/dist/web/assets/gitGraph-WXDBUCRP-BTlPmENP.js +0 -1
- package/dist/web/assets/index-BMuMlfUY.css +0 -2
- package/dist/web/assets/index-DlSOjemg.js +0 -977
- package/dist/web/assets/info-J43DQDTF-Dk_AfWti.js +0 -1
- package/dist/web/assets/mermaid-GHXKKRXX-DsECfWij.js +0 -1
- package/dist/web/assets/packet-YPE3B663-C6X9xd7B.js +0 -1
- package/dist/web/assets/pie-LRSECV5Y-B7m9jxWQ.js +0 -1
- package/dist/web/assets/radar-GUYGQ44K-CNV--1hE.js +0 -1
- package/dist/web/assets/stateDiagram-v2-BHNVJYJU-CemwCoPd.js +0 -1
- package/dist/web/assets/treeView-BLDUP644-4kzz9e5T.js +0 -1
- package/dist/web/assets/treemap-LRROVOQU-CUGlq2kA.js +0 -1
- package/dist/web/assets/wardley-L42UT6IY-NTb3kln2.js +0 -1
|
@@ -41,12 +41,29 @@ Choose one strong visual direction that fits the product instead of blending gen
|
|
|
41
41
|
- `index.html` is the only previewable page and the main design canvas.
|
|
42
42
|
- Put the page structure, CSS, and local prototype JavaScript directly in `index.html`.
|
|
43
43
|
- Do not create additional HTML pages, React/Vue/Svelte apps, framework build files, custom elements, Shadow DOM, component module folders, or reuse metadata.
|
|
44
|
-
- For multiple pages, screens,
|
|
44
|
+
- For multiple pages, page-level screens, or route-like navigation, use hash routing inside `index.html`.
|
|
45
|
+
- Do not use path-based browser routing.
|
|
45
46
|
- Use `<main id="app">` for the visible app/page body.
|
|
46
47
|
- Keep CSS in the file's `<style>` block and organize it clearly: reset, tokens, layout, components, states, responsive rules, and motion.
|
|
47
48
|
- Keep JavaScript in the file's `<script>` block and include only prototype behavior that is needed for visible interaction.
|
|
49
|
+
- Preserve the OwnDesign protected runtime script with `data-owndesign-runtime="preview-route-bridge"` unchanged, exactly once, as the last element inside `<body>`.
|
|
50
|
+
- Put app-specific prototype JavaScript in a separate earlier script block, not inside the OwnDesign protected runtime script.
|
|
48
51
|
- Prefer one coherent, finished file over abstractions that make the prototype harder to inspect.
|
|
49
52
|
|
|
53
|
+
## Hash-addressable UI State
|
|
54
|
+
|
|
55
|
+
Every design state that a viewer would want to link to or return to directly should be restorable from `location.hash`, so the same state appears on direct load.
|
|
56
|
+
|
|
57
|
+
- Use stable semantic hash routes such as `#/dashboard`, `#/orders`, `#/settings`, and `#/detail/123`.
|
|
58
|
+
- Encode deep-link-worthy route state in the hash query when it changes the designed screen, such as `#/orders?tab=kanban&drawer=filters`, `#/settings?tab=billing&modal=invite-member`, or `#/products/42?panel=details`.
|
|
59
|
+
- The current page-level view and any deep-link-worthy UI state must be derived from `location.hash`, not only from in-memory variables or prior click history.
|
|
60
|
+
- A direct load of `index.html#/route?...` must render the matching route and any material active tab, open modal, open drawer or side panel, selected detail, filter, mode, and route-specific mock content without requiring previous clicks.
|
|
61
|
+
- Render the current hash state on initial load, such as `DOMContentLoaded`, as well as on `hashchange`; do not rely on `hashchange` firing for the first paint.
|
|
62
|
+
- Use normal hash navigation for page-level route changes. For in-page sub-state such as active tabs, open modals, drawers, side panels, filters, modes, and selected details, update the hash with `history.replaceState` so the Back button moves between pages instead of every toggle.
|
|
63
|
+
- Navigation links, tab controls, modal open and close controls, drawer toggles, side-panel controls, filters, modes, and selected-detail controls should update `location.hash` when they control a deep-link-worthy design state.
|
|
64
|
+
- Provide a sensible default route and default UI state when the hash is empty, incomplete, or unknown.
|
|
65
|
+
- Keep ephemeral micro-interactions in local state only, such as hover, focus, pressed button feedback, transient toasts, loading spinners, and unsubmitted form typing.
|
|
66
|
+
|
|
50
67
|
## Frontend Taste Model
|
|
51
68
|
|
|
52
69
|
Every rendered `index.html` should feel like a complete product-quality prototype:
|
|
@@ -86,7 +103,7 @@ Avoid data-first implementation. Start from the visible interface structure, the
|
|
|
86
103
|
|
|
87
104
|
Build frontend prototypes. Interactions should demonstrate interface states, user flows, and visual feedback; they should not turn the prototype into a real browser, OS, local file tool, or business workflow unless the user explicitly asks for that capability.
|
|
88
105
|
|
|
89
|
-
Good prototype interactions include active tabs, modal open/close, drawer visibility, filter chips, selected rows, toast messages, simple steppers,
|
|
106
|
+
Good prototype interactions include hash-addressable routes and UI states, active tabs, modal open/close, drawer visibility, side-panel state, filter chips, selected rows, toast messages, simple steppers, local preview toggles, and small local state changes that make the UI intention clear. Follow the Hash-addressable UI State rules for direct-load recovery.
|
|
90
107
|
|
|
91
108
|
For complex actions such as Add, Import, Upload, Select folder, Connect source, Sync, Export, Pay, Sign in, or Publish, default to a mock UI flow: open a modal, show sample items, update a visible state, or display a credible simulated result. Do not access local files or external services by default.
|
|
92
109
|
|
|
@@ -120,12 +137,14 @@ Before calling `previewRefresh`, review the current `index.html` source and veri
|
|
|
120
137
|
|
|
121
138
|
- First viewport: the product purpose, visual direction, and at least one primary action or workflow entry point are visible without scrolling.
|
|
122
139
|
- Single target: the complete previewable prototype lives in `index.html` and uses `<main id="app">` for the visible body.
|
|
140
|
+
- Hash recovery: any route, tab, modal, drawer, panel, filter, mode, or selected-detail state that materially changes the design can be restored by direct-loading the current URL hash.
|
|
123
141
|
- Readability: body text is at least 14px, contrast is comfortable, and no important text is clipped, hidden, or overlapping.
|
|
124
142
|
- Layout: desktop and any required mobile layout have no accidental horizontal overflow, cramped controls, or incoherent stacking.
|
|
125
143
|
- States: navigation, filters, tabs, buttons, modals, drawers, and form controls produce visible feedback when included.
|
|
126
144
|
- Content: labels, sample data, and copy are specific to the product domain, with no lorem ipsum or vague placeholder filler.
|
|
127
145
|
- Resources: font, icon, image, and dependency choices follow `resource_policy`.
|
|
128
146
|
- Icons: configured icons are aligned with adjacent text and controls, and dynamically inserted icons are initialized when needed.
|
|
147
|
+
- Runtime: the OwnDesign protected runtime script is unchanged, appears exactly once, and remains the last element inside `<body>`.
|
|
129
148
|
- Code: CSS and JavaScript are organized inside the file and contain no unfinished template placeholders or dead handlers.
|
|
130
149
|
- Finish: the page feels like a polished interface prototype, not a wireframe, empty scaffold, or code exercise.
|
|
131
150
|
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
OWNDESIGN_RUNTIME_ATTRIBUTE,
|
|
5
|
+
OWNDESIGN_RUNTIME_SCRIPT_TAG,
|
|
6
|
+
assertOwnDesignRuntimeScript,
|
|
7
|
+
} from './owndesign-runtime';
|
|
8
|
+
import { buildSingleHtmlTemplate } from './single-html';
|
|
9
|
+
|
|
10
|
+
describe('OwnDesign runtime script', () => {
|
|
11
|
+
it('renders the protected runtime script as the last body element', () => {
|
|
12
|
+
const html = buildSingleHtmlTemplate({ title: 'Dashboard' });
|
|
13
|
+
|
|
14
|
+
expect(html).toContain(OWNDESIGN_RUNTIME_ATTRIBUTE);
|
|
15
|
+
expect(html).toContain('source: \'owndesign-preview\'');
|
|
16
|
+
expect(html).toContain('type: \'route-changed\'');
|
|
17
|
+
expect(html).toContain('lucide.createIcons();');
|
|
18
|
+
expect(countOccurrences(html, OWNDESIGN_RUNTIME_SCRIPT_TAG)).toBe(1);
|
|
19
|
+
expect(() => assertOwnDesignRuntimeScript(html)).not.toThrow();
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('rejects missing, changed, duplicated, or non-final runtime scripts', () => {
|
|
23
|
+
const html = buildSingleHtmlTemplate({ title: 'Dashboard' });
|
|
24
|
+
|
|
25
|
+
expect(() => assertOwnDesignRuntimeScript(html.replace(OWNDESIGN_RUNTIME_SCRIPT_TAG, ''))).toThrow(
|
|
26
|
+
'OwnDesign runtime script',
|
|
27
|
+
);
|
|
28
|
+
expect(() =>
|
|
29
|
+
assertOwnDesignRuntimeScript(html.replace('route-changed', 'route-updated')),
|
|
30
|
+
).toThrow('OwnDesign runtime script');
|
|
31
|
+
expect(() =>
|
|
32
|
+
assertOwnDesignRuntimeScript(html.replace('</body>', `${OWNDESIGN_RUNTIME_SCRIPT_TAG}\n</body>`)),
|
|
33
|
+
).toThrow('OwnDesign runtime script');
|
|
34
|
+
expect(() =>
|
|
35
|
+
assertOwnDesignRuntimeScript(html.replace('</body>', '<div>After</div>\n</body>')),
|
|
36
|
+
).toThrow('last element');
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it('allows only whitespace or comments after the runtime script before body closes', () => {
|
|
40
|
+
const html = buildSingleHtmlTemplate({ title: 'Dashboard' }).replace(
|
|
41
|
+
'</body>',
|
|
42
|
+
'<!-- generated marker -->\n</body>',
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
expect(() => assertOwnDesignRuntimeScript(html)).not.toThrow();
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
function countOccurrences(content: string, needle: string) {
|
|
50
|
+
return content.split(needle).length - 1;
|
|
51
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
export const OWNDESIGN_RUNTIME_ATTRIBUTE = 'data-owndesign-runtime="preview-route-bridge"';
|
|
2
|
+
|
|
3
|
+
export const OWNDESIGN_RUNTIME_SCRIPT_TAG = `<script ${OWNDESIGN_RUNTIME_ATTRIBUTE}>
|
|
4
|
+
(() => {
|
|
5
|
+
const sendRoute = () => {
|
|
6
|
+
window.parent?.postMessage(
|
|
7
|
+
{
|
|
8
|
+
source: 'owndesign-preview',
|
|
9
|
+
type: 'route-changed',
|
|
10
|
+
version: 1,
|
|
11
|
+
hash: window.location.hash || '',
|
|
12
|
+
},
|
|
13
|
+
'*',
|
|
14
|
+
);
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const scheduleRouteUpdate = () => {
|
|
18
|
+
window.requestAnimationFrame(sendRoute);
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const patchHistory = (method) => {
|
|
22
|
+
const original = window.history[method];
|
|
23
|
+
|
|
24
|
+
window.history[method] = function patchedHistoryMethod(...args) {
|
|
25
|
+
const result = original.apply(this, args);
|
|
26
|
+
scheduleRouteUpdate();
|
|
27
|
+
return result;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
patchHistory('pushState');
|
|
32
|
+
patchHistory('replaceState');
|
|
33
|
+
window.addEventListener('hashchange', scheduleRouteUpdate);
|
|
34
|
+
window.addEventListener('popstate', scheduleRouteUpdate);
|
|
35
|
+
window.addEventListener('pageshow', scheduleRouteUpdate);
|
|
36
|
+
document.addEventListener('DOMContentLoaded', scheduleRouteUpdate);
|
|
37
|
+
scheduleRouteUpdate();
|
|
38
|
+
|
|
39
|
+
if (window.lucide) {
|
|
40
|
+
lucide.createIcons();
|
|
41
|
+
}
|
|
42
|
+
})();
|
|
43
|
+
</script>`;
|
|
44
|
+
|
|
45
|
+
const BODY_CLOSE_PATTERN = /<\/body\s*>/gi;
|
|
46
|
+
const BODY_OPEN_PATTERN = /<body(?:\s[^>]*)?>/i;
|
|
47
|
+
const HTML_COMMENT_PATTERN = /<!--[\s\S]*?-->/g;
|
|
48
|
+
|
|
49
|
+
export function assertOwnDesignRuntimeScript(content: string) {
|
|
50
|
+
const normalizedContent = normalizeLineEndings(content);
|
|
51
|
+
const normalizedRuntimeScript = normalizeLineEndings(OWNDESIGN_RUNTIME_SCRIPT_TAG);
|
|
52
|
+
const runtimeScriptCount = countOccurrences(normalizedContent, normalizedRuntimeScript);
|
|
53
|
+
|
|
54
|
+
if (runtimeScriptCount !== 1) {
|
|
55
|
+
throw new Error(
|
|
56
|
+
'Keep the OwnDesign runtime script unchanged and include it exactly once as the last element inside <body>.',
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const bodyOpen = BODY_OPEN_PATTERN.exec(normalizedContent);
|
|
61
|
+
BODY_OPEN_PATTERN.lastIndex = 0;
|
|
62
|
+
const bodyClose = getLastMatch(normalizedContent, BODY_CLOSE_PATTERN);
|
|
63
|
+
|
|
64
|
+
if (!bodyOpen || !bodyClose) {
|
|
65
|
+
throw new Error(
|
|
66
|
+
'Keep the OwnDesign runtime script inside <body> as the last element.',
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const runtimeScriptIndex = normalizedContent.indexOf(normalizedRuntimeScript);
|
|
71
|
+
const runtimeScriptEnd = runtimeScriptIndex + normalizedRuntimeScript.length;
|
|
72
|
+
const bodyContentStart = bodyOpen.index + bodyOpen[0].length;
|
|
73
|
+
|
|
74
|
+
if (runtimeScriptIndex < bodyContentStart || runtimeScriptEnd > bodyClose.index) {
|
|
75
|
+
throw new Error(
|
|
76
|
+
'Keep the OwnDesign runtime script inside <body> as the last element.',
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const trailingBodyContent = normalizedContent
|
|
81
|
+
.slice(runtimeScriptEnd, bodyClose.index)
|
|
82
|
+
.replace(HTML_COMMENT_PATTERN, '')
|
|
83
|
+
.trim();
|
|
84
|
+
|
|
85
|
+
if (trailingBodyContent) {
|
|
86
|
+
throw new Error(
|
|
87
|
+
'Keep the OwnDesign runtime script as the last element inside <body>.',
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export function isProtectedSingleHtmlPath(relativePath: string) {
|
|
93
|
+
return normalizeRelativePath(relativePath).toLowerCase() === 'index.html';
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function normalizeLineEndings(value: string) {
|
|
97
|
+
return value.replaceAll('\r\n', '\n').replaceAll('\r', '\n');
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function countOccurrences(content: string, needle: string) {
|
|
101
|
+
return content.split(needle).length - 1;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function normalizeRelativePath(relativePath: string) {
|
|
105
|
+
const segments: string[] = [];
|
|
106
|
+
|
|
107
|
+
for (const segment of relativePath.replaceAll('\\', '/').split('/')) {
|
|
108
|
+
if (!segment || segment === '.') {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (segment === '..') {
|
|
113
|
+
if (segments.length > 0 && segments.at(-1) !== '..') {
|
|
114
|
+
segments.pop();
|
|
115
|
+
} else {
|
|
116
|
+
segments.push(segment);
|
|
117
|
+
}
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
segments.push(segment);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
return segments.join('/');
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function getLastMatch(content: string, pattern: RegExp) {
|
|
128
|
+
pattern.lastIndex = 0;
|
|
129
|
+
let lastMatch: RegExpExecArray | null = null;
|
|
130
|
+
let currentMatch: RegExpExecArray | null;
|
|
131
|
+
|
|
132
|
+
while ((currentMatch = pattern.exec(content))) {
|
|
133
|
+
lastMatch = currentMatch;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
pattern.lastIndex = 0;
|
|
137
|
+
return lastMatch;
|
|
138
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { loadTemplate } from './index';
|
|
2
|
+
import { OWNDESIGN_RUNTIME_SCRIPT_TAG } from './owndesign-runtime';
|
|
3
|
+
|
|
4
|
+
export function buildSingleHtmlTemplate({ title }: { title: string }) {
|
|
5
|
+
return renderTemplate(loadTemplate('html/page-shell'), {
|
|
6
|
+
lang: 'zh-CN',
|
|
7
|
+
runtimeScript: OWNDESIGN_RUNTIME_SCRIPT_TAG,
|
|
8
|
+
title: escapeHtmlText(title),
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function renderTemplate(template: string, values: Record<string, string>) {
|
|
13
|
+
return `${template.replace(/\{\{([a-zA-Z0-9]+)\}\}/g, (_match, key: string) => values[key] ?? '')}\n`;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function escapeHtmlText(value: string) {
|
|
17
|
+
return value.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');
|
|
18
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Bn as e}from"./index-DlSOjemg.js";import{t}from"./html-D8D_RndX.js";var n=[Object.freeze(JSON.parse('{"injectionSelector":"L:text.html -comment","name":"angular-expression","patterns":[{"include":"#ngExpression"}],"repository":{"arrayLiteral":{"begin":"\\\\[","beginCaptures":{"0":{"name":"meta.brace.square.ts"}},"end":"]","endCaptures":{"0":{"name":"meta.brace.square.ts"}},"name":"meta.array.literal.ts","patterns":[{"include":"#ngExpression"},{"include":"#punctuationComma"}]},"booleanLiteral":{"patterns":[{"match":"(?<![$.])\\\\btrue\\\\b(?!\\\\$)","name":"constant.language.boolean.true.ts"},{"match":"(?<![$.])\\\\bfalse\\\\b(?!\\\\$)","name":"constant.language.boolean.false.ts"}]},"expressionOperator":{"patterns":[{"captures":{"1":{"name":"keyword.operator.logical.ts"},"2":{"name":"entity.name.function.pipe.ng"}},"match":"((?<!\\\\|)\\\\|(?!\\\\|))\\\\s?([-$0-9A-Z_a-z]*)"},{"match":"(?<![$.])\\\\b(let)\\\\b(?!\\\\$)","name":"storage.type.ts"},{"match":"(?<![$.])\\\\b(await)\\\\b(?!\\\\$)","name":"keyword.control.flow.ts"},{"match":"(?<![$.])\\\\bdelete\\\\b(?!\\\\$)","name":"keyword.operator.expression.delete.ts"},{"match":"(?<![$.])\\\\bin\\\\b(?!\\\\$)","name":"keyword.operator.expression.in.ts"},{"match":"(?<![$.])\\\\bof\\\\b(?!\\\\$)","name":"keyword.operator.expression.of.ts"},{"match":"(?<![$.])\\\\bif\\\\b(?!\\\\$)","name":"keyword.control.if.ts"},{"match":"(?<![$.])\\\\belse\\\\b(?!\\\\$)","name":"keyword.control.else.ts"},{"match":"(?<![$.])\\\\bthen\\\\b(?!\\\\$)","name":"keyword.control.then.ts"},{"match":"(?<![$.])\\\\binstanceof\\\\b(?!\\\\$)","name":"keyword.operator.expression.instanceof.ts"},{"match":"(?<![$.])\\\\bnew\\\\b(?!\\\\$)","name":"keyword.operator.new.ts"},{"match":"(?<![$.])\\\\bvoid\\\\b(?!\\\\$)","name":"keyword.operator.expression.void.ts"},{"begin":"(?<![$.])\\\\bas\\\\b(?!\\\\$)","beginCaptures":{"0":{"name":"storage.type.as.ts"}},"end":"(?=$|[]\\"\'),:;}])","patterns":[{"include":"#type"}]},{"match":"(?:\\\\*|(?<!\\\\()/|[-%+])=","name":"keyword.operator.assignment.compound.ts"},{"match":"(?:[\\\\&^]|<<|>>>??|\\\\|)=","name":"keyword.operator.assignment.compound.bitwise.ts"},{"match":"<<|>>>?","name":"keyword.operator.bitwise.shift.ts"},{"match":"[!=]==?","name":"keyword.operator.comparison.ts"},{"match":"<=|>=|<>|[<>]","name":"keyword.operator.relational.ts"},{"match":"!|&&|\\\\?\\\\?|\\\\|\\\\|","name":"keyword.operator.logical.ts"},{"match":"[\\\\&^|~]","name":"keyword.operator.bitwise.ts"},{"match":"=","name":"keyword.operator.assignment.ts"},{"match":"--","name":"keyword.operator.decrement.ts"},{"match":"\\\\+\\\\+","name":"keyword.operator.increment.ts"},{"match":"[-%*+/]","name":"keyword.operator.arithmetic.ts"},{"captures":{"1":{"name":"keyword.operator.arithmetic.ts"}},"match":"(?<=[$_[:alnum:]])\\\\s*(/)(?![*/])"},{"include":"#typeofOperator"}]},"functionCall":{"begin":"(?=(\\\\??\\\\.\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\()","end":"(?<=\\\\))(?!(\\\\??\\\\.\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\()","patterns":[{"match":"\\\\?","name":"punctuation.accessor.ts"},{"match":"\\\\.","name":"punctuation.accessor.ts"},{"match":"([$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.ts"},{"begin":"<","beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.ts"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.ts"}},"name":"meta.type.parameters.ts","patterns":[{"include":"#type"},{"include":"#punctuationComma"}]},{"include":"#parenExpression"}]},"functionParameters":{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.parameters.begin.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.ts"}},"name":"meta.parameters.ts","patterns":[{"include":"#decorator"},{"include":"#parameterName"},{"include":"#variableInitializer"},{"match":",","name":"punctuation.separator.parameter.ts"}]},"identifiers":{"patterns":[{"match":"([$_[:alpha:]][$_[:alnum:]]*)(?=\\\\s*\\\\.\\\\s*prototype\\\\b(?!\\\\$))","name":"support.class.ts"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"constant.other.object.property.ts"},"3":{"name":"variable.other.object.property.ts"}},"match":"([!?]?\\\\.)\\\\s*(?:(\\\\p{upper}[$_\\\\d[:upper:]]*)|([$_[:alpha:]][$_[:alnum:]]*))(?=\\\\s*\\\\.\\\\s*[$_[:alpha:]][$_[:alnum:]]*)"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"entity.name.function.ts"}},"match":"(?:([!?]?\\\\.)\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)(?=\\\\s*=\\\\s*((async\\\\s+)|(function\\\\s*[(<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)|((<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)(\\\\s*:\\\\s*(.)*)?\\\\s*=>)))"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"constant.other.property.ts"}},"match":"([!?]?\\\\.)\\\\s*(\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"variable.other.property.ts"}},"match":"([!?]?\\\\.)\\\\s*([$_[:alpha:]][$_[:alnum:]]*)"},{"captures":{"1":{"name":"constant.other.object.ts"},"2":{"name":"variable.other.object.ts"}},"match":"(?:(\\\\p{upper}[$_\\\\d[:upper:]]*)|([$_[:alpha:]][$_[:alnum:]]*))(?=\\\\s*\\\\.\\\\s*[$_[:alpha:]][$_[:alnum:]]*)"},{"match":"(\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])","name":"constant.character.other"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"variable.other.readwrite.ts"}]},"literal":{"name":"literal.ts","patterns":[{"include":"#numericLiteral"},{"include":"#booleanLiteral"},{"include":"#nullLiteral"},{"include":"#undefinedLiteral"},{"include":"#numericConstantLiteral"},{"include":"#arrayLiteral"},{"include":"#thisLiteral"}]},"ngExpression":{"name":"meta.expression.ng","patterns":[{"include":"#string"},{"include":"#literal"},{"include":"#ternaryExpression"},{"include":"#expressionOperator"},{"include":"#functionCall"},{"include":"#identifiers"},{"include":"#parenExpression"},{"include":"#punctuationComma"},{"include":"#punctuationSemicolon"},{"include":"#punctuationAccessor"}]},"nullLiteral":{"match":"(?<![$.])\\\\bnull\\\\b(?!\\\\$)","name":"constant.language.null.ts"},"numericConstantLiteral":{"patterns":[{"match":"(?<![$.])\\\\bNaN\\\\b(?!\\\\$)","name":"constant.language.nan.ts"},{"match":"(?<![$.])\\\\bInfinity\\\\b(?!\\\\$)","name":"constant.language.infinity.ts"}]},"numericLiteral":{"patterns":[{"match":"\\\\b(?<!\\\\$)0([Xx])\\\\h+\\\\b(?!\\\\$)","name":"constant.numeric.hex.ts"},{"match":"\\\\b(?<!\\\\$)0([Bb])[01]+\\\\b(?!\\\\$)","name":"constant.numeric.binary.ts"},{"match":"\\\\\\\\b(?<!\\\\$)0([Oo])?[0-7]+\\\\b(?!\\\\$)","name":"constant.numeric.octal.ts"},{"captures":{"0":{"name":"constant.numeric.decimal.ts"},"1":{"name":"meta.delimiter.decimal.period.ts"},"2":{"name":"meta.delimiter.decimal.period.ts"},"3":{"name":"meta.delimiter.decimal.period.ts"},"4":{"name":"meta.delimiter.decimal.period.ts"},"5":{"name":"meta.delimiter.decimal.period.ts"},"6":{"name":"meta.delimiter.decimal.period.ts"}},"match":"(?<!\\\\$)(?:\\\\b[0-9]+(\\\\.)[0-9]+[Ee][-+]?[0-9]+\\\\b|\\\\b[0-9]+(\\\\.)[Ee][-+]?[0-9]+\\\\b|\\\\B(\\\\.)[0-9]+[Ee][-+]?[0-9]+\\\\b|\\\\b[0-9]+[Ee][-+]?[0-9]+\\\\b|\\\\b[0-9]+(\\\\.)\\\\B|\\\\B(\\\\.)[0-9]+\\\\b|\\\\b[0-9]+\\\\b(?!\\\\.))(?!\\\\$)"}]},"parameterName":{"patterns":[{"captures":{"1":{"name":"storage.modifier.ts"},"2":{"name":"storage.modifier.ts"},"3":{"name":"keyword.operator.rest.ts"},"4":{"name":"entity.name.function.ts"},"5":{"name":"keyword.operator.optional.ts"}},"match":"(?:\\\\s*\\\\b(readonly)\\\\s+)?(?:\\\\s*\\\\b(p(?:ublic|rivate|rotected))\\\\s+)?(\\\\.\\\\.\\\\.)?\\\\s*(?<![:=])([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(\\\\??)(?=\\\\s*(=\\\\s*((async\\\\s+)|(function\\\\s*[(<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)|((<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)(\\\\s*:\\\\s*(.)*)?\\\\s*=>)))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>))))))))"},{"captures":{"1":{"name":"storage.modifier.ts"},"2":{"name":"storage.modifier.ts"},"3":{"name":"keyword.operator.rest.ts"},"4":{"name":"variable.parameter.ts"},"5":{"name":"keyword.operator.optional.ts"}},"match":"(?:\\\\s*\\\\b(readonly)\\\\s+)?(?:\\\\s*\\\\b(p(?:ublic|rivate|rotected))\\\\s+)?(\\\\.\\\\.\\\\.)?\\\\s*(?<![:=])([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(\\\\??)"}]},"parenExpression":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"patterns":[{"include":"#ngExpression"},{"include":"#punctuationComma"}]},"punctuationAccessor":{"match":"(?:\\\\?|!?)\\\\.","name":"punctuation.accessor.ts"},"punctuationComma":{"match":",","name":"punctuation.separator.comma.ts"},"punctuationSemicolon":{"match":";","name":"punctuation.terminator.statement.ts"},"qstringDouble":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ts"}},"end":"(\\")|([^\\\\n\\\\\\\\])$","endCaptures":{"1":{"name":"punctuation.definition.string.end.ts"},"2":{"name":"invalid.illegal.newline.ts"}},"name":"string.quoted.double.ts","patterns":[{"include":"#stringCharacterEscape"}]},"qstringSingle":{"begin":"\'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ts"}},"end":"(\')|([^\\\\n\\\\\\\\])$","endCaptures":{"1":{"name":"punctuation.definition.string.end.ts"},"2":{"name":"invalid.illegal.newline.ts"}},"name":"string.quoted.single.ts","patterns":[{"include":"#stringCharacterEscape"}]},"string":{"patterns":[{"include":"#qstringSingle"},{"include":"#qstringDouble"},{"include":"#templateLiteral"}]},"stringCharacterEscape":{"match":"\\\\\\\\(x\\\\h{2}|[012][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)","name":"constant.character.escape.ts"},"templateLiteral":{"patterns":[{"include":"#templateLiteralCall"},{"begin":"([$_[:alpha:]][$_[:alnum:]]*)?(`)","beginCaptures":{"1":{"name":"entity.name.function.tagged-template.ts"},"2":{"name":"string.template.ts punctuation.definition.string.template.begin.ts"}},"contentName":"string.template.ts","end":"`","endCaptures":{"0":{"name":"string.template.ts punctuation.definition.string.template.end.ts"}},"patterns":[{"include":"#templateLiteralSubstitutionElement"},{"include":"#stringCharacterEscape"}]}]},"templateLiteralCall":{"patterns":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([$_[:alpha:]][$_[:alnum:]]*)(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?<!=)>))*(?<!=)>)*(?<!=)>\\\\s*)?`)","end":"(?=`)","patterns":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([$_[:alpha:]][$_[:alnum:]]*))","end":"(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?<!=)>))*(?<!=)>)*(?<!=)>\\\\s*)?`)","patterns":[{"include":"#support-function-call-identifiers"},{"match":"([$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.tagged-template.ts"}]},{"include":"#typeArguments"}]},{"begin":"([$_[:alpha:]][$_[:alnum:]]*)?\\\\s*(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?<!=)>))*(?<!=)>)*(?<!=)>\\\\s*)`)","beginCaptures":{"1":{"name":"entity.name.function.tagged-template.ts"}},"end":"(?=`)","patterns":[{"include":"#typeArguments"}]}]},"templateLiteralSubstitutionElement":{"begin":"\\\\$\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.template-expression.begin.ts"}},"contentName":"meta.embedded.line.ts","end":"}","endCaptures":{"0":{"name":"punctuation.definition.template-expression.end.ts"}},"name":"meta.template.expression.ts","patterns":[{"include":"#ngExpression"}]},"ternaryExpression":{"begin":"(?!\\\\?\\\\.\\\\s*\\\\D)(\\\\?)(?!\\\\?)","beginCaptures":{"1":{"name":"keyword.operator.ternary.ts"}},"end":"\\\\s*(:)","endCaptures":{"1":{"name":"keyword.operator.ternary.ts"}},"patterns":[{"include":"#ngExpression"}]},"thisLiteral":{"match":"(?<![$.])\\\\bthis\\\\b(?!\\\\$)","name":"variable.language.this.ts"},"type":{"name":"meta.type.ts","patterns":[{"include":"#string"},{"include":"#numericLiteral"},{"include":"#typeBuiltinLiterals"},{"include":"#typeTuple"},{"include":"#typeObject"},{"include":"#typeOperators"},{"include":"#typeFnTypeParameters"},{"include":"#typeParenOrFunctionParameters"},{"include":"#typeName"}]},"typeAnnotation":{"begin":":","beginCaptures":{"0":{"name":"keyword.operator.type.annotation.ts"}},"end":"(?=$|[]),;}]|//|\\")|(?==[^>])|(?<=[]$)>_}[:alpha:]])\\\\s*(?=\\\\{)","name":"meta.type.annotation.ts","patterns":[{"include":"#type"}]},"typeArguments":{"begin":"<","beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.ts"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.ts"}},"name":"meta.type.parameters.ts","patterns":[{"include":"#typeArgumentsBody"}]},"typeArgumentsBody":{"patterns":[{"captures":{"0":{"name":"keyword.operator.type.ts"}},"match":"(?<![$_[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(_)(?![$_[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))"},{"include":"#type"},{"include":"#punctuationComma"}]},"typeBuiltinLiterals":{"match":"(?<![$.])\\\\b(this|true|false|undefined|null)\\\\b(?!\\\\$)","name":"support.type.builtin.ts"},"typeFnTypeParameters":{"patterns":[{"captures":{"1":{"name":"keyword.control.new.ts"}},"match":"(?<![$.])\\\\b(new)\\\\b(?=\\\\s*<)","name":"meta.type.constructor.ts"},{"begin":"(?<![$.])\\\\b(new)\\\\b\\\\s*(?=\\\\()","beginCaptures":{"1":{"name":"keyword.control.new.ts"}},"end":"(?<=\\\\))","name":"meta.type.constructor.ts","patterns":[{"include":"#functionParameters"}]},{"begin":"(?<=>)\\\\s*(?=\\\\()","end":"(?<=\\\\))","include":"#typeofOperator","name":"meta.type.function.ts","patterns":[{"include":"#functionParameters"}]},{"begin":"((?=\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>))))))","end":"(?<=\\\\))","name":"meta.type.function.ts","patterns":[{"include":"#functionParameters"}]}]},"typeName":{"patterns":[{"captures":{"1":{"name":"entity.name.type.module.ts"},"2":{"name":"punctuation.accessor.ts"}},"match":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*([!?]?\\\\.)"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"entity.name.type.ts"}]},"typeObject":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"name":"meta.object.type.ts","patterns":[{"include":"#typeObjectMembers"}]},"typeObjectMembers":{"patterns":[{"include":"#typeAnnotation"},{"include":"#punctuationComma"},{"include":"#punctuationSemicolon"}]},"typeOperators":{"patterns":[{"include":"#typeofOperator"},{"match":"[\\\\&|]","name":"keyword.operator.type.ts"},{"match":"(?<![$.])\\\\bkeyof\\\\b(?!\\\\$)","name":"keyword.operator.expression.keyof.ts"}]},"typeParenOrFunctionParameters":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"name":"meta.type.paren.cover.ts","patterns":[{"include":"#type"},{"include":"#functionParameters"}]},"typeTuple":{"begin":"\\\\[","beginCaptures":{"0":{"name":"meta.brace.square.ts"}},"end":"]","endCaptures":{"0":{"name":"meta.brace.square.ts"}},"name":"meta.type.tuple.ts","patterns":[{"include":"#type"},{"include":"#punctuationComma"}]},"typeofOperator":{"match":"(?<![$.])\\\\btypeof\\\\b(?!\\\\$)","name":"keyword.operator.expression.typeof.ts"},"undefinedLiteral":{"match":"(?<![$.])\\\\bundefined\\\\b(?!\\\\$)","name":"constant.language.undefined.ts"},"variableInitializer":{"begin":"(?<![!=])(=)(?!=)","beginCaptures":{"1":{"name":"keyword.operator.assignment.ts"}},"end":"(?=$|[]),;}])","patterns":[{"include":"#ngExpression"}]}},"scopeName":"expression.ng"}'))],r=Object.freeze(JSON.parse(`{"injectTo":["text.html.derivative","text.html.derivative.ng","source.ts.ng"],"injectionSelector":"L:text.html -comment -expression.ng -meta.tag -source.css -source.js","name":"angular-let-declaration","patterns":[{"include":"#letDeclaration"}],"repository":{"letDeclaration":{"begin":"(@let)\\\\s+([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(=)?","beginCaptures":{"1":{"name":"storage.type.ng"},"2":{"name":"variable.other.constant.ng"},"3":{"name":"keyword.operator.assignment.ng"}},"end":"(?<=;)","name":"meta.definition.variable.ng","patterns":[{"include":"#letInitializer"}]},"letInitializer":{"begin":"\\\\s*","beginCaptures":{"0":{"name":"keyword.operator.assignment.ng"}},"contentName":"meta.definition.variable.initializer.ng","end":";","endCaptures":{"0":{"name":"punctuation.terminator.statement.ng"}},"patterns":[{"include":"expression.ng"}]}},"scopeName":"template.let.ng","embeddedLangs":["angular-expression"]}`)),i=[...n,r],a=Object.freeze(JSON.parse(`{"injectTo":["text.html.derivative","text.html.derivative.ng","source.ts.ng"],"injectionSelector":"L:text.html -comment","name":"angular-template","patterns":[{"include":"#interpolation"}],"repository":{"interpolation":{"begin":"\\\\{\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"contentName":"expression.ng","end":"}}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"patterns":[{"include":"expression.ng"}]}},"scopeName":"template.ng","embeddedLangs":["angular-expression"]}`)),o=[...n,a],s=Object.freeze(JSON.parse(`{"injectTo":["text.html.derivative","text.html.derivative.ng","source.ts.ng"],"injectionSelector":"L:text.html -comment -expression.ng -meta.tag -source.css -source.js","name":"angular-template-blocks","patterns":[{"include":"#block"}],"repository":{"block":{"begin":"(@)(if|else if|else|defer|placeholder|loading|error|switch|case|default|for|empty)\\\\s*","beginCaptures":{"1":{"patterns":[{"include":"#transition"}]},"2":{"name":"keyword.control.block.kind.ng"}},"end":"(?<=})","name":"control.block.ng","patterns":[{"include":"#blockExpression"},{"include":"#blockBody"}]},"blockBody":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"contentName":"control.block.body.ng","end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"patterns":[{"include":"text.html.derivative.ng"},{"include":"template.ng"}]},"blockExpression":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"contentName":"control.block.expression.ng","end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"patterns":[{"include":"#blockExpressionOfClause"},{"include":"#blockExpressionLetBinding"},{"include":"#blockExpressionTrackClause"},{"include":"expression.ng"}]},"blockExpressionLetBinding":{"begin":"\\\\blet\\\\b","beginCaptures":{"0":{"name":"storage.type.ng"}},"end":"(?=[$)])|(?<=;)","patterns":[{"include":"expression.ng"}]},"blockExpressionOfClause":{"begin":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s+(of)\\\\b","beginCaptures":{"1":{"name":"variable.other.constant.ng"},"2":{"name":"keyword.operator.expression.of.ng"}},"end":"(?=[$)])|(?<=;)","patterns":[{"include":"expression.ng"}]},"blockExpressionTrackClause":{"begin":"\\\\btrack\\\\b","beginCaptures":{"0":{"name":"keyword.control.track.ng"}},"end":"(?=[$)])|(?<=;)","patterns":[{"include":"expression.ng"}]},"transition":{"match":"@","name":"keyword.control.block.transition.ng"}},"scopeName":"template.blocks.ng","embeddedLangs":["angular-expression","angular-template"]}`)),c=[...n,...o,s],l=e({default:()=>d}),u=Object.freeze(JSON.parse(`{"displayName":"Angular HTML","injections":{"R:text.html - (comment.block, text.html meta.embedded, meta.tag.*.*.html, meta.tag.*.*.*.html, meta.tag.*.*.*.*.html)":{"patterns":[{"match":"<","name":"invalid.illegal.bad-angle-bracket.html"}]}},"name":"angular-html","patterns":[{"include":"text.html.basic#core-minus-invalid"},{"begin":"(</?)(\\\\w[^>\\\\s]*)(?<!/)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"}},"end":"((?: ?/)?>)","endCaptures":{"1":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.other.unrecognized.html.derivative","patterns":[{"include":"text.html.basic#attribute"}]}],"scopeName":"text.html.derivative.ng","embeddedLangs":["html","angular-expression","angular-let-declaration","angular-template","angular-template-blocks"]}`)),d=[...t,...n,...i,...o,...c,u];export{i as a,o as i,l as n,n as o,c as r,d as t};
|
|
1
|
+
import{Bn as e}from"./index-YSa89xAk.js";import{t}from"./html-BF5zzurH.js";var n=[Object.freeze(JSON.parse('{"injectionSelector":"L:text.html -comment","name":"angular-expression","patterns":[{"include":"#ngExpression"}],"repository":{"arrayLiteral":{"begin":"\\\\[","beginCaptures":{"0":{"name":"meta.brace.square.ts"}},"end":"]","endCaptures":{"0":{"name":"meta.brace.square.ts"}},"name":"meta.array.literal.ts","patterns":[{"include":"#ngExpression"},{"include":"#punctuationComma"}]},"booleanLiteral":{"patterns":[{"match":"(?<![$.])\\\\btrue\\\\b(?!\\\\$)","name":"constant.language.boolean.true.ts"},{"match":"(?<![$.])\\\\bfalse\\\\b(?!\\\\$)","name":"constant.language.boolean.false.ts"}]},"expressionOperator":{"patterns":[{"captures":{"1":{"name":"keyword.operator.logical.ts"},"2":{"name":"entity.name.function.pipe.ng"}},"match":"((?<!\\\\|)\\\\|(?!\\\\|))\\\\s?([-$0-9A-Z_a-z]*)"},{"match":"(?<![$.])\\\\b(let)\\\\b(?!\\\\$)","name":"storage.type.ts"},{"match":"(?<![$.])\\\\b(await)\\\\b(?!\\\\$)","name":"keyword.control.flow.ts"},{"match":"(?<![$.])\\\\bdelete\\\\b(?!\\\\$)","name":"keyword.operator.expression.delete.ts"},{"match":"(?<![$.])\\\\bin\\\\b(?!\\\\$)","name":"keyword.operator.expression.in.ts"},{"match":"(?<![$.])\\\\bof\\\\b(?!\\\\$)","name":"keyword.operator.expression.of.ts"},{"match":"(?<![$.])\\\\bif\\\\b(?!\\\\$)","name":"keyword.control.if.ts"},{"match":"(?<![$.])\\\\belse\\\\b(?!\\\\$)","name":"keyword.control.else.ts"},{"match":"(?<![$.])\\\\bthen\\\\b(?!\\\\$)","name":"keyword.control.then.ts"},{"match":"(?<![$.])\\\\binstanceof\\\\b(?!\\\\$)","name":"keyword.operator.expression.instanceof.ts"},{"match":"(?<![$.])\\\\bnew\\\\b(?!\\\\$)","name":"keyword.operator.new.ts"},{"match":"(?<![$.])\\\\bvoid\\\\b(?!\\\\$)","name":"keyword.operator.expression.void.ts"},{"begin":"(?<![$.])\\\\bas\\\\b(?!\\\\$)","beginCaptures":{"0":{"name":"storage.type.as.ts"}},"end":"(?=$|[]\\"\'),:;}])","patterns":[{"include":"#type"}]},{"match":"(?:\\\\*|(?<!\\\\()/|[-%+])=","name":"keyword.operator.assignment.compound.ts"},{"match":"(?:[\\\\&^]|<<|>>>??|\\\\|)=","name":"keyword.operator.assignment.compound.bitwise.ts"},{"match":"<<|>>>?","name":"keyword.operator.bitwise.shift.ts"},{"match":"[!=]==?","name":"keyword.operator.comparison.ts"},{"match":"<=|>=|<>|[<>]","name":"keyword.operator.relational.ts"},{"match":"!|&&|\\\\?\\\\?|\\\\|\\\\|","name":"keyword.operator.logical.ts"},{"match":"[\\\\&^|~]","name":"keyword.operator.bitwise.ts"},{"match":"=","name":"keyword.operator.assignment.ts"},{"match":"--","name":"keyword.operator.decrement.ts"},{"match":"\\\\+\\\\+","name":"keyword.operator.increment.ts"},{"match":"[-%*+/]","name":"keyword.operator.arithmetic.ts"},{"captures":{"1":{"name":"keyword.operator.arithmetic.ts"}},"match":"(?<=[$_[:alnum:]])\\\\s*(/)(?![*/])"},{"include":"#typeofOperator"}]},"functionCall":{"begin":"(?=(\\\\??\\\\.\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\()","end":"(?<=\\\\))(?!(\\\\??\\\\.\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\()","patterns":[{"match":"\\\\?","name":"punctuation.accessor.ts"},{"match":"\\\\.","name":"punctuation.accessor.ts"},{"match":"([$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.ts"},{"begin":"<","beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.ts"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.ts"}},"name":"meta.type.parameters.ts","patterns":[{"include":"#type"},{"include":"#punctuationComma"}]},{"include":"#parenExpression"}]},"functionParameters":{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.parameters.begin.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.ts"}},"name":"meta.parameters.ts","patterns":[{"include":"#decorator"},{"include":"#parameterName"},{"include":"#variableInitializer"},{"match":",","name":"punctuation.separator.parameter.ts"}]},"identifiers":{"patterns":[{"match":"([$_[:alpha:]][$_[:alnum:]]*)(?=\\\\s*\\\\.\\\\s*prototype\\\\b(?!\\\\$))","name":"support.class.ts"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"constant.other.object.property.ts"},"3":{"name":"variable.other.object.property.ts"}},"match":"([!?]?\\\\.)\\\\s*(?:(\\\\p{upper}[$_\\\\d[:upper:]]*)|([$_[:alpha:]][$_[:alnum:]]*))(?=\\\\s*\\\\.\\\\s*[$_[:alpha:]][$_[:alnum:]]*)"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"entity.name.function.ts"}},"match":"(?:([!?]?\\\\.)\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)(?=\\\\s*=\\\\s*((async\\\\s+)|(function\\\\s*[(<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)|((<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)(\\\\s*:\\\\s*(.)*)?\\\\s*=>)))"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"constant.other.property.ts"}},"match":"([!?]?\\\\.)\\\\s*(\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"variable.other.property.ts"}},"match":"([!?]?\\\\.)\\\\s*([$_[:alpha:]][$_[:alnum:]]*)"},{"captures":{"1":{"name":"constant.other.object.ts"},"2":{"name":"variable.other.object.ts"}},"match":"(?:(\\\\p{upper}[$_\\\\d[:upper:]]*)|([$_[:alpha:]][$_[:alnum:]]*))(?=\\\\s*\\\\.\\\\s*[$_[:alpha:]][$_[:alnum:]]*)"},{"match":"(\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])","name":"constant.character.other"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"variable.other.readwrite.ts"}]},"literal":{"name":"literal.ts","patterns":[{"include":"#numericLiteral"},{"include":"#booleanLiteral"},{"include":"#nullLiteral"},{"include":"#undefinedLiteral"},{"include":"#numericConstantLiteral"},{"include":"#arrayLiteral"},{"include":"#thisLiteral"}]},"ngExpression":{"name":"meta.expression.ng","patterns":[{"include":"#string"},{"include":"#literal"},{"include":"#ternaryExpression"},{"include":"#expressionOperator"},{"include":"#functionCall"},{"include":"#identifiers"},{"include":"#parenExpression"},{"include":"#punctuationComma"},{"include":"#punctuationSemicolon"},{"include":"#punctuationAccessor"}]},"nullLiteral":{"match":"(?<![$.])\\\\bnull\\\\b(?!\\\\$)","name":"constant.language.null.ts"},"numericConstantLiteral":{"patterns":[{"match":"(?<![$.])\\\\bNaN\\\\b(?!\\\\$)","name":"constant.language.nan.ts"},{"match":"(?<![$.])\\\\bInfinity\\\\b(?!\\\\$)","name":"constant.language.infinity.ts"}]},"numericLiteral":{"patterns":[{"match":"\\\\b(?<!\\\\$)0([Xx])\\\\h+\\\\b(?!\\\\$)","name":"constant.numeric.hex.ts"},{"match":"\\\\b(?<!\\\\$)0([Bb])[01]+\\\\b(?!\\\\$)","name":"constant.numeric.binary.ts"},{"match":"\\\\\\\\b(?<!\\\\$)0([Oo])?[0-7]+\\\\b(?!\\\\$)","name":"constant.numeric.octal.ts"},{"captures":{"0":{"name":"constant.numeric.decimal.ts"},"1":{"name":"meta.delimiter.decimal.period.ts"},"2":{"name":"meta.delimiter.decimal.period.ts"},"3":{"name":"meta.delimiter.decimal.period.ts"},"4":{"name":"meta.delimiter.decimal.period.ts"},"5":{"name":"meta.delimiter.decimal.period.ts"},"6":{"name":"meta.delimiter.decimal.period.ts"}},"match":"(?<!\\\\$)(?:\\\\b[0-9]+(\\\\.)[0-9]+[Ee][-+]?[0-9]+\\\\b|\\\\b[0-9]+(\\\\.)[Ee][-+]?[0-9]+\\\\b|\\\\B(\\\\.)[0-9]+[Ee][-+]?[0-9]+\\\\b|\\\\b[0-9]+[Ee][-+]?[0-9]+\\\\b|\\\\b[0-9]+(\\\\.)\\\\B|\\\\B(\\\\.)[0-9]+\\\\b|\\\\b[0-9]+\\\\b(?!\\\\.))(?!\\\\$)"}]},"parameterName":{"patterns":[{"captures":{"1":{"name":"storage.modifier.ts"},"2":{"name":"storage.modifier.ts"},"3":{"name":"keyword.operator.rest.ts"},"4":{"name":"entity.name.function.ts"},"5":{"name":"keyword.operator.optional.ts"}},"match":"(?:\\\\s*\\\\b(readonly)\\\\s+)?(?:\\\\s*\\\\b(p(?:ublic|rivate|rotected))\\\\s+)?(\\\\.\\\\.\\\\.)?\\\\s*(?<![:=])([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(\\\\??)(?=\\\\s*(=\\\\s*((async\\\\s+)|(function\\\\s*[(<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)|((<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)(\\\\s*:\\\\s*(.)*)?\\\\s*=>)))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>))))))))"},{"captures":{"1":{"name":"storage.modifier.ts"},"2":{"name":"storage.modifier.ts"},"3":{"name":"keyword.operator.rest.ts"},"4":{"name":"variable.parameter.ts"},"5":{"name":"keyword.operator.optional.ts"}},"match":"(?:\\\\s*\\\\b(readonly)\\\\s+)?(?:\\\\s*\\\\b(p(?:ublic|rivate|rotected))\\\\s+)?(\\\\.\\\\.\\\\.)?\\\\s*(?<![:=])([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(\\\\??)"}]},"parenExpression":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"patterns":[{"include":"#ngExpression"},{"include":"#punctuationComma"}]},"punctuationAccessor":{"match":"(?:\\\\?|!?)\\\\.","name":"punctuation.accessor.ts"},"punctuationComma":{"match":",","name":"punctuation.separator.comma.ts"},"punctuationSemicolon":{"match":";","name":"punctuation.terminator.statement.ts"},"qstringDouble":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ts"}},"end":"(\\")|([^\\\\n\\\\\\\\])$","endCaptures":{"1":{"name":"punctuation.definition.string.end.ts"},"2":{"name":"invalid.illegal.newline.ts"}},"name":"string.quoted.double.ts","patterns":[{"include":"#stringCharacterEscape"}]},"qstringSingle":{"begin":"\'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ts"}},"end":"(\')|([^\\\\n\\\\\\\\])$","endCaptures":{"1":{"name":"punctuation.definition.string.end.ts"},"2":{"name":"invalid.illegal.newline.ts"}},"name":"string.quoted.single.ts","patterns":[{"include":"#stringCharacterEscape"}]},"string":{"patterns":[{"include":"#qstringSingle"},{"include":"#qstringDouble"},{"include":"#templateLiteral"}]},"stringCharacterEscape":{"match":"\\\\\\\\(x\\\\h{2}|[012][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)","name":"constant.character.escape.ts"},"templateLiteral":{"patterns":[{"include":"#templateLiteralCall"},{"begin":"([$_[:alpha:]][$_[:alnum:]]*)?(`)","beginCaptures":{"1":{"name":"entity.name.function.tagged-template.ts"},"2":{"name":"string.template.ts punctuation.definition.string.template.begin.ts"}},"contentName":"string.template.ts","end":"`","endCaptures":{"0":{"name":"string.template.ts punctuation.definition.string.template.end.ts"}},"patterns":[{"include":"#templateLiteralSubstitutionElement"},{"include":"#stringCharacterEscape"}]}]},"templateLiteralCall":{"patterns":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([$_[:alpha:]][$_[:alnum:]]*)(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?<!=)>))*(?<!=)>)*(?<!=)>\\\\s*)?`)","end":"(?=`)","patterns":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([$_[:alpha:]][$_[:alnum:]]*))","end":"(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?<!=)>))*(?<!=)>)*(?<!=)>\\\\s*)?`)","patterns":[{"include":"#support-function-call-identifiers"},{"match":"([$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.tagged-template.ts"}]},{"include":"#typeArguments"}]},{"begin":"([$_[:alpha:]][$_[:alnum:]]*)?\\\\s*(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?<!=)>))*(?<!=)>)*(?<!=)>\\\\s*)`)","beginCaptures":{"1":{"name":"entity.name.function.tagged-template.ts"}},"end":"(?=`)","patterns":[{"include":"#typeArguments"}]}]},"templateLiteralSubstitutionElement":{"begin":"\\\\$\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.template-expression.begin.ts"}},"contentName":"meta.embedded.line.ts","end":"}","endCaptures":{"0":{"name":"punctuation.definition.template-expression.end.ts"}},"name":"meta.template.expression.ts","patterns":[{"include":"#ngExpression"}]},"ternaryExpression":{"begin":"(?!\\\\?\\\\.\\\\s*\\\\D)(\\\\?)(?!\\\\?)","beginCaptures":{"1":{"name":"keyword.operator.ternary.ts"}},"end":"\\\\s*(:)","endCaptures":{"1":{"name":"keyword.operator.ternary.ts"}},"patterns":[{"include":"#ngExpression"}]},"thisLiteral":{"match":"(?<![$.])\\\\bthis\\\\b(?!\\\\$)","name":"variable.language.this.ts"},"type":{"name":"meta.type.ts","patterns":[{"include":"#string"},{"include":"#numericLiteral"},{"include":"#typeBuiltinLiterals"},{"include":"#typeTuple"},{"include":"#typeObject"},{"include":"#typeOperators"},{"include":"#typeFnTypeParameters"},{"include":"#typeParenOrFunctionParameters"},{"include":"#typeName"}]},"typeAnnotation":{"begin":":","beginCaptures":{"0":{"name":"keyword.operator.type.annotation.ts"}},"end":"(?=$|[]),;}]|//|\\")|(?==[^>])|(?<=[]$)>_}[:alpha:]])\\\\s*(?=\\\\{)","name":"meta.type.annotation.ts","patterns":[{"include":"#type"}]},"typeArguments":{"begin":"<","beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.ts"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.ts"}},"name":"meta.type.parameters.ts","patterns":[{"include":"#typeArgumentsBody"}]},"typeArgumentsBody":{"patterns":[{"captures":{"0":{"name":"keyword.operator.type.ts"}},"match":"(?<![$_[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(_)(?![$_[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))"},{"include":"#type"},{"include":"#punctuationComma"}]},"typeBuiltinLiterals":{"match":"(?<![$.])\\\\b(this|true|false|undefined|null)\\\\b(?!\\\\$)","name":"support.type.builtin.ts"},"typeFnTypeParameters":{"patterns":[{"captures":{"1":{"name":"keyword.control.new.ts"}},"match":"(?<![$.])\\\\b(new)\\\\b(?=\\\\s*<)","name":"meta.type.constructor.ts"},{"begin":"(?<![$.])\\\\b(new)\\\\b\\\\s*(?=\\\\()","beginCaptures":{"1":{"name":"keyword.control.new.ts"}},"end":"(?<=\\\\))","name":"meta.type.constructor.ts","patterns":[{"include":"#functionParameters"}]},{"begin":"(?<=>)\\\\s*(?=\\\\()","end":"(?<=\\\\))","include":"#typeofOperator","name":"meta.type.function.ts","patterns":[{"include":"#functionParameters"}]},{"begin":"((?=\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>))))))","end":"(?<=\\\\))","name":"meta.type.function.ts","patterns":[{"include":"#functionParameters"}]}]},"typeName":{"patterns":[{"captures":{"1":{"name":"entity.name.type.module.ts"},"2":{"name":"punctuation.accessor.ts"}},"match":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*([!?]?\\\\.)"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"entity.name.type.ts"}]},"typeObject":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"name":"meta.object.type.ts","patterns":[{"include":"#typeObjectMembers"}]},"typeObjectMembers":{"patterns":[{"include":"#typeAnnotation"},{"include":"#punctuationComma"},{"include":"#punctuationSemicolon"}]},"typeOperators":{"patterns":[{"include":"#typeofOperator"},{"match":"[\\\\&|]","name":"keyword.operator.type.ts"},{"match":"(?<![$.])\\\\bkeyof\\\\b(?!\\\\$)","name":"keyword.operator.expression.keyof.ts"}]},"typeParenOrFunctionParameters":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"name":"meta.type.paren.cover.ts","patterns":[{"include":"#type"},{"include":"#functionParameters"}]},"typeTuple":{"begin":"\\\\[","beginCaptures":{"0":{"name":"meta.brace.square.ts"}},"end":"]","endCaptures":{"0":{"name":"meta.brace.square.ts"}},"name":"meta.type.tuple.ts","patterns":[{"include":"#type"},{"include":"#punctuationComma"}]},"typeofOperator":{"match":"(?<![$.])\\\\btypeof\\\\b(?!\\\\$)","name":"keyword.operator.expression.typeof.ts"},"undefinedLiteral":{"match":"(?<![$.])\\\\bundefined\\\\b(?!\\\\$)","name":"constant.language.undefined.ts"},"variableInitializer":{"begin":"(?<![!=])(=)(?!=)","beginCaptures":{"1":{"name":"keyword.operator.assignment.ts"}},"end":"(?=$|[]),;}])","patterns":[{"include":"#ngExpression"}]}},"scopeName":"expression.ng"}'))],r=Object.freeze(JSON.parse(`{"injectTo":["text.html.derivative","text.html.derivative.ng","source.ts.ng"],"injectionSelector":"L:text.html -comment -expression.ng -meta.tag -source.css -source.js","name":"angular-let-declaration","patterns":[{"include":"#letDeclaration"}],"repository":{"letDeclaration":{"begin":"(@let)\\\\s+([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(=)?","beginCaptures":{"1":{"name":"storage.type.ng"},"2":{"name":"variable.other.constant.ng"},"3":{"name":"keyword.operator.assignment.ng"}},"end":"(?<=;)","name":"meta.definition.variable.ng","patterns":[{"include":"#letInitializer"}]},"letInitializer":{"begin":"\\\\s*","beginCaptures":{"0":{"name":"keyword.operator.assignment.ng"}},"contentName":"meta.definition.variable.initializer.ng","end":";","endCaptures":{"0":{"name":"punctuation.terminator.statement.ng"}},"patterns":[{"include":"expression.ng"}]}},"scopeName":"template.let.ng","embeddedLangs":["angular-expression"]}`)),i=[...n,r],a=Object.freeze(JSON.parse(`{"injectTo":["text.html.derivative","text.html.derivative.ng","source.ts.ng"],"injectionSelector":"L:text.html -comment","name":"angular-template","patterns":[{"include":"#interpolation"}],"repository":{"interpolation":{"begin":"\\\\{\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"contentName":"expression.ng","end":"}}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"patterns":[{"include":"expression.ng"}]}},"scopeName":"template.ng","embeddedLangs":["angular-expression"]}`)),o=[...n,a],s=Object.freeze(JSON.parse(`{"injectTo":["text.html.derivative","text.html.derivative.ng","source.ts.ng"],"injectionSelector":"L:text.html -comment -expression.ng -meta.tag -source.css -source.js","name":"angular-template-blocks","patterns":[{"include":"#block"}],"repository":{"block":{"begin":"(@)(if|else if|else|defer|placeholder|loading|error|switch|case|default|for|empty)\\\\s*","beginCaptures":{"1":{"patterns":[{"include":"#transition"}]},"2":{"name":"keyword.control.block.kind.ng"}},"end":"(?<=})","name":"control.block.ng","patterns":[{"include":"#blockExpression"},{"include":"#blockBody"}]},"blockBody":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"contentName":"control.block.body.ng","end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"patterns":[{"include":"text.html.derivative.ng"},{"include":"template.ng"}]},"blockExpression":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"contentName":"control.block.expression.ng","end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"patterns":[{"include":"#blockExpressionOfClause"},{"include":"#blockExpressionLetBinding"},{"include":"#blockExpressionTrackClause"},{"include":"expression.ng"}]},"blockExpressionLetBinding":{"begin":"\\\\blet\\\\b","beginCaptures":{"0":{"name":"storage.type.ng"}},"end":"(?=[$)])|(?<=;)","patterns":[{"include":"expression.ng"}]},"blockExpressionOfClause":{"begin":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s+(of)\\\\b","beginCaptures":{"1":{"name":"variable.other.constant.ng"},"2":{"name":"keyword.operator.expression.of.ng"}},"end":"(?=[$)])|(?<=;)","patterns":[{"include":"expression.ng"}]},"blockExpressionTrackClause":{"begin":"\\\\btrack\\\\b","beginCaptures":{"0":{"name":"keyword.control.track.ng"}},"end":"(?=[$)])|(?<=;)","patterns":[{"include":"expression.ng"}]},"transition":{"match":"@","name":"keyword.control.block.transition.ng"}},"scopeName":"template.blocks.ng","embeddedLangs":["angular-expression","angular-template"]}`)),c=[...n,...o,s],l=e({default:()=>d}),u=Object.freeze(JSON.parse(`{"displayName":"Angular HTML","injections":{"R:text.html - (comment.block, text.html meta.embedded, meta.tag.*.*.html, meta.tag.*.*.*.html, meta.tag.*.*.*.*.html)":{"patterns":[{"match":"<","name":"invalid.illegal.bad-angle-bracket.html"}]}},"name":"angular-html","patterns":[{"include":"text.html.basic#core-minus-invalid"},{"begin":"(</?)(\\\\w[^>\\\\s]*)(?<!/)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"}},"end":"((?: ?/)?>)","endCaptures":{"1":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.other.unrecognized.html.derivative","patterns":[{"include":"text.html.basic#attribute"}]}],"scopeName":"text.html.derivative.ng","embeddedLangs":["html","angular-expression","angular-let-declaration","angular-template","angular-template-blocks"]}`)),d=[...t,...n,...i,...o,...c,u];export{i as a,o as i,l as n,n as o,c as r,d as t};
|