@qelos/aidev 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/ui.d.ts.map +1 -1
- package/dist/commands/ui.js +17 -0
- package/dist/commands/ui.js.map +1 -1
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +22 -1
- package/dist/config.js.map +1 -1
- package/dist/providers/base.d.ts +6 -1
- package/dist/providers/base.d.ts.map +1 -1
- package/dist/providers/clickup.d.ts +5 -1
- package/dist/providers/clickup.d.ts.map +1 -1
- package/dist/providers/clickup.js +104 -18
- package/dist/providers/clickup.js.map +1 -1
- package/dist/providers/jira.d.ts.map +1 -1
- package/dist/providers/jira.js +5 -1
- package/dist/providers/jira.js.map +1 -1
- package/dist/providers/linear.d.ts +2 -2
- package/dist/providers/linear.d.ts.map +1 -1
- package/dist/providers/linear.js +6 -3
- package/dist/providers/linear.js.map +1 -1
- package/dist/providers/local.d.ts +2 -2
- package/dist/providers/local.d.ts.map +1 -1
- package/dist/providers/local.js +11 -5
- package/dist/providers/local.js.map +1 -1
- package/dist/providers/trello.d.ts.map +1 -1
- package/dist/providers/trello.js +7 -3
- package/dist/providers/trello.js.map +1 -1
- package/dist/types.d.ts +23 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/ui/.output/nitro.json +1 -1
- package/ui/.output/public/_nuxt/3LZdFtk_.js +5 -0
- package/ui/.output/public/_nuxt/{DL7l9XXk.js → B8sr5ZW-.js} +1 -1
- package/ui/.output/public/_nuxt/B93YYUZf.js +1 -0
- package/ui/.output/public/_nuxt/BAs1isOw.js +1 -0
- package/ui/.output/public/_nuxt/{CjYvNw4D.js → BGlShnpS.js} +1 -1
- package/ui/.output/public/_nuxt/BMTHyzVP.js +1 -0
- package/ui/.output/public/_nuxt/BTfAgCfF.js +1 -0
- package/ui/.output/public/_nuxt/BrZL2iQr.js +1 -0
- package/ui/.output/public/_nuxt/{m0N__S0x.js → BtD1YBwM.js} +1 -1
- package/ui/.output/public/_nuxt/Bv6Ws9vz.js +1 -0
- package/ui/.output/public/_nuxt/C2WdrjFS.js +1 -0
- package/ui/.output/public/_nuxt/CO4XMBYO.js +70 -0
- package/ui/.output/public/_nuxt/CVTgFccA.js +2 -0
- package/ui/.output/public/_nuxt/{CgEeSDUJ.js → CWjftssB.js} +1 -1
- package/ui/.output/public/_nuxt/Ceb2855t.js +1 -0
- package/ui/.output/public/_nuxt/{CnlcD-w9.js → Cg55PjEy.js} +2 -2
- package/ui/.output/public/_nuxt/D0ZgktSu.js +1 -0
- package/ui/.output/public/_nuxt/DZIUG6ZX.js +1 -0
- package/ui/.output/public/_nuxt/{B2vj_HiW.js → DZd8Jv5H.js} +1 -1
- package/ui/.output/public/_nuxt/{DKIXA6Zt.js → DihqGT4A.js} +1 -1
- package/ui/.output/public/_nuxt/{bW-720fM.js → LzHPbXPK.js} +1 -1
- package/ui/.output/public/_nuxt/MzK2TZ-I.js +16 -0
- package/ui/.output/public/_nuxt/TJXLPQOj.js +1 -0
- package/ui/.output/public/_nuxt/VuiIFQtE.js +1 -0
- package/ui/.output/public/_nuxt/config.C19X1GwO.css +1 -0
- package/ui/.output/public/_nuxt/index.Dg-YgThY.css +1 -0
- package/ui/.output/public/_nuxt/logs.PK6CTQHM.css +1 -0
- package/ui/.output/public/_nuxt/run.Cn-2vl5h.css +1 -0
- package/ui/.output/public/_nuxt/{tasks.C3nyxPxf.css → tasks.BeNnACNw.css} +1 -1
- package/ui/.output/server/chunks/build/{Badge-2SB8hHdz.mjs → Badge-YPOjmkfv.mjs} +2 -3
- package/ui/.output/server/chunks/build/Badge-YPOjmkfv.mjs.map +1 -0
- package/ui/.output/server/chunks/build/{Button-Dgqz5RR8.mjs → Button-CZHl6fpI.mjs} +157 -6
- package/ui/.output/server/chunks/build/Button-CZHl6fpI.mjs.map +1 -0
- package/ui/.output/server/chunks/build/{Card-BkfpdQZ7.mjs → Card--ibiHV_r.mjs} +2 -2
- package/ui/.output/server/chunks/build/{Card-BkfpdQZ7.mjs.map → Card--ibiHV_r.mjs.map} +1 -1
- package/ui/.output/server/chunks/build/DashboardExecutedCard-styles.DXJjgycv.mjs +8 -0
- package/ui/.output/server/chunks/build/DashboardExecutedCard-styles.DXJjgycv.mjs.map +1 -0
- package/ui/.output/server/chunks/build/DashboardRunActions-styles.CEKdhvfj.mjs +8 -0
- package/ui/.output/server/chunks/build/DashboardRunActions-styles.CEKdhvfj.mjs.map +1 -0
- package/ui/.output/server/chunks/build/DashboardStatCard-styles.CiuzFOyH.mjs +8 -0
- package/ui/.output/server/chunks/build/DashboardStatCard-styles.CiuzFOyH.mjs.map +1 -0
- package/ui/.output/server/chunks/build/{FormGroup-UXO0FHfr.mjs → FormGroup-CX5VmH8y.mjs} +2 -2
- package/ui/.output/server/chunks/build/{FormGroup-UXO0FHfr.mjs.map → FormGroup-CX5VmH8y.mjs.map} +1 -1
- package/ui/.output/server/chunks/build/{Input-ckU7qZlb.mjs → Input-kmqS1oY_.mjs} +2 -3
- package/ui/.output/server/chunks/build/Input-kmqS1oY_.mjs.map +1 -0
- package/ui/.output/server/chunks/build/{Modal-KQ_hNOLI.mjs → Modal-DmZs0Ekg.mjs} +2 -2
- package/ui/.output/server/chunks/build/{Modal-KQ_hNOLI.mjs.map → Modal-DmZs0Ekg.mjs.map} +1 -1
- package/ui/.output/server/chunks/build/{Select-ByGZz9s4.mjs → Select-n4_YfXfk.mjs} +3 -4
- package/ui/.output/server/chunks/build/Select-n4_YfXfk.mjs.map +1 -0
- package/ui/.output/server/chunks/build/client.precomputed.mjs +1 -1
- package/ui/.output/server/chunks/build/client.precomputed.mjs.map +1 -1
- package/ui/.output/server/chunks/build/{config-QZGfNfGJ.mjs → config-Bkb2wy7R.mjs} +36 -38
- package/ui/.output/server/chunks/build/config-Bkb2wy7R.mjs.map +1 -0
- package/ui/.output/server/chunks/build/config-styles.B4mTchgT.mjs +8 -0
- package/ui/.output/server/chunks/build/config-styles.B4mTchgT.mjs.map +1 -0
- package/ui/.output/server/chunks/build/{default-DiZbTfNE.mjs → default-DmD3qBXZ.mjs} +2 -3
- package/ui/.output/server/chunks/build/default-DmD3qBXZ.mjs.map +1 -0
- package/ui/.output/server/chunks/build/entry-styles.Cg1Sndbr.mjs +11 -0
- package/ui/.output/server/chunks/build/entry-styles.Cg1Sndbr.mjs.map +1 -0
- package/ui/.output/server/chunks/build/index-BvfXQQ2n.mjs +447 -0
- package/ui/.output/server/chunks/build/index-BvfXQQ2n.mjs.map +1 -0
- package/ui/.output/server/chunks/build/index-styles-1.mjs-Kwz6Al0B.mjs +4 -0
- package/ui/.output/server/chunks/build/index-styles-1.mjs-Kwz6Al0B.mjs.map +1 -0
- package/ui/.output/server/chunks/build/index-styles-2.mjs-C-CZohsU.mjs +4 -0
- package/ui/.output/server/chunks/build/index-styles-2.mjs-C-CZohsU.mjs.map +1 -0
- package/ui/.output/server/chunks/build/index-styles-3.mjs-Cr0fTIrx.mjs +4 -0
- package/ui/.output/server/chunks/build/index-styles-3.mjs-Cr0fTIrx.mjs.map +1 -0
- package/ui/.output/server/chunks/build/index-styles.CHXoMimT.mjs +15 -0
- package/ui/.output/server/chunks/build/index-styles.CHXoMimT.mjs.map +1 -0
- package/ui/.output/server/chunks/build/{interval-Dye37XM9.mjs → interval-DHZqEf-n.mjs} +3 -3
- package/ui/.output/server/chunks/build/{interval-Dye37XM9.mjs.map → interval-DHZqEf-n.mjs.map} +1 -1
- package/ui/.output/server/chunks/build/{login-cekfLp5n.mjs → login-B5YkLJCV.mjs} +4 -5
- package/ui/.output/server/chunks/build/login-B5YkLJCV.mjs.map +1 -0
- package/ui/.output/server/chunks/build/{logs-hZKOhIqF.mjs → logs-BvD1Y3HI.mjs} +44 -41
- package/ui/.output/server/chunks/build/logs-BvD1Y3HI.mjs.map +1 -0
- package/ui/.output/server/chunks/build/logs-styles.CU5b1wKf.mjs +8 -0
- package/ui/.output/server/chunks/build/logs-styles.CU5b1wKf.mjs.map +1 -0
- package/ui/.output/server/chunks/build/nuxt-link-B3UD8izG.mjs +1 -1
- package/ui/.output/server/chunks/build/{run-CfSa6qTR.mjs → run-BStPkbGg.mjs} +13 -13
- package/ui/.output/server/chunks/build/run-BStPkbGg.mjs.map +1 -0
- package/ui/.output/server/chunks/build/run-styles.D0ITxcgL.mjs +8 -0
- package/ui/.output/server/chunks/build/run-styles.D0ITxcgL.mjs.map +1 -0
- package/ui/.output/server/chunks/build/{schedule-Pz7_wUvq.mjs → schedule-B2UKsnRW.mjs} +8 -9
- package/ui/.output/server/chunks/build/schedule-B2UKsnRW.mjs.map +1 -0
- package/ui/.output/server/chunks/build/server.mjs +9 -9
- package/ui/.output/server/chunks/build/styles.mjs +10 -6
- package/ui/.output/server/chunks/build/styles.mjs.map +1 -1
- package/ui/.output/server/chunks/build/{tasks-Bc5VRFpY.mjs → tasks-DBH3Z6lg.mjs} +35 -27
- package/ui/.output/server/chunks/build/{tasks-Bc5VRFpY.mjs.map → tasks-DBH3Z6lg.mjs.map} +1 -1
- package/ui/.output/server/chunks/build/{tasks-styles.C7XECkUG.mjs → tasks-styles.Bv3Rwofl.mjs} +5 -5
- package/ui/.output/server/chunks/build/{tasks-styles.C7XECkUG.mjs.map → tasks-styles.Bv3Rwofl.mjs.map} +1 -1
- package/ui/.output/server/chunks/build/{useApi-CFWxoIea.mjs → useApi-Bqajqsuz.mjs} +2 -3
- package/ui/.output/server/chunks/build/useApi-Bqajqsuz.mjs.map +1 -0
- package/ui/.output/server/chunks/build/useInitialLoading-Dvjk3xOV.mjs +20 -0
- package/ui/.output/server/chunks/build/useInitialLoading-Dvjk3xOV.mjs.map +1 -0
- package/ui/.output/server/chunks/nitro/nitro.mjs +181 -178
- package/ui/.output/server/chunks/nitro/nitro.mjs.map +1 -1
- package/ui/.output/server/chunks/routes/api/config/test.post.mjs +8 -12
- package/ui/.output/server/chunks/routes/api/config/test.post.mjs.map +1 -1
- package/ui/.output/server/chunks/routes/api/config.put.mjs +1 -1
- package/ui/.output/server/chunks/routes/api/dashboard/stats.get.mjs +184 -0
- package/ui/.output/server/chunks/routes/api/dashboard/stats.get.mjs.map +1 -0
- package/ui/.output/server/chunks/routes/api/logs.delete.mjs +1 -1
- package/ui/.output/server/chunks/routes/api/logs.get.mjs +1 -1
- package/ui/.output/server/chunks/routes/api/run.post.mjs +1 -1
- package/ui/.output/server/chunks/routes/api/schedule.post.mjs +1 -1
- package/ui/.output/server/chunks/routes/api/tasks/_id/execute.post.mjs +1 -1
- package/ui/.output/server/chunks/routes/api/tasks/statuses.get.mjs +1 -1
- package/ui/.output/server/chunks/routes/api/tasks.get.mjs +1 -1
- package/ui/.output/server/chunks/routes/renderer.mjs +1 -13
- package/ui/.output/server/node_modules/entities/LICENSE +11 -0
- package/ui/.output/server/node_modules/entities/decode.d.ts +3 -0
- package/ui/.output/server/node_modules/entities/decode.js +3 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/decode-codepoint.d.ts +19 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/decode-codepoint.d.ts.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/decode-codepoint.js +77 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/decode-codepoint.js.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/decode.d.ts +205 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/decode.d.ts.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/decode.js +568 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/decode.js.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/encode.d.ts +22 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/encode.d.ts.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/encode.js +92 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/encode.js.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/escape.d.ts +46 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/escape.d.ts.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/escape.js +138 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/escape.js.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/generated/decode-data-html.d.ts +2 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/generated/decode-data-html.d.ts.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/generated/decode-data-html.js +7 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/generated/decode-data-html.js.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/generated/decode-data-xml.d.ts +2 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/generated/decode-data-xml.d.ts.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/generated/decode-data-xml.js +7 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/generated/decode-data-xml.js.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/generated/encode-html.d.ts +3 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/generated/encode-html.d.ts.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/generated/encode-html.js +14 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/generated/encode-html.js.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/index.d.ts +96 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/index.d.ts.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/index.js +131 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/index.js.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/internal/bin-trie-flags.d.ts +17 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/internal/bin-trie-flags.d.ts.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/internal/bin-trie-flags.js +21 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/internal/bin-trie-flags.js.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/internal/decode-shared.d.ts +2 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/internal/decode-shared.d.ts.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/internal/decode-shared.js +31 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/internal/decode-shared.js.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/internal/encode-shared.d.ts +32 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/internal/encode-shared.d.ts.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/internal/encode-shared.js +94 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/internal/encode-shared.js.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/commonjs/package.json +3 -0
- package/ui/.output/server/node_modules/entities/dist/esm/decode-codepoint.d.ts +19 -0
- package/ui/.output/server/node_modules/entities/dist/esm/decode-codepoint.d.ts.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/esm/decode-codepoint.js +72 -0
- package/ui/.output/server/node_modules/entities/dist/esm/decode-codepoint.js.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/esm/decode.d.ts +205 -0
- package/ui/.output/server/node_modules/entities/dist/esm/decode.d.ts.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/esm/decode.js +554 -0
- package/ui/.output/server/node_modules/entities/dist/esm/decode.js.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/esm/encode.d.ts +22 -0
- package/ui/.output/server/node_modules/entities/dist/esm/encode.d.ts.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/esm/encode.js +88 -0
- package/ui/.output/server/node_modules/entities/dist/esm/encode.js.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/esm/escape.d.ts +46 -0
- package/ui/.output/server/node_modules/entities/dist/esm/escape.d.ts.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/esm/escape.js +134 -0
- package/ui/.output/server/node_modules/entities/dist/esm/escape.js.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/esm/generated/decode-data-html.d.ts +2 -0
- package/ui/.output/server/node_modules/entities/dist/esm/generated/decode-data-html.d.ts.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/esm/generated/decode-data-html.js +4 -0
- package/ui/.output/server/node_modules/entities/dist/esm/generated/decode-data-html.js.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/esm/generated/decode-data-xml.d.ts +2 -0
- package/ui/.output/server/node_modules/entities/dist/esm/generated/decode-data-xml.d.ts.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/esm/generated/decode-data-xml.js +4 -0
- package/ui/.output/server/node_modules/entities/dist/esm/generated/decode-data-xml.js.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/esm/generated/encode-html.d.ts +3 -0
- package/ui/.output/server/node_modules/entities/dist/esm/generated/encode-html.d.ts.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/esm/generated/encode-html.js +11 -0
- package/ui/.output/server/node_modules/entities/dist/esm/generated/encode-html.js.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/esm/index.d.ts +96 -0
- package/ui/.output/server/node_modules/entities/dist/esm/index.d.ts.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/esm/index.js +107 -0
- package/ui/.output/server/node_modules/entities/dist/esm/index.js.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/esm/internal/bin-trie-flags.d.ts +17 -0
- package/ui/.output/server/node_modules/entities/dist/esm/internal/bin-trie-flags.d.ts.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/esm/internal/bin-trie-flags.js +18 -0
- package/ui/.output/server/node_modules/entities/dist/esm/internal/bin-trie-flags.js.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/esm/internal/decode-shared.d.ts +2 -0
- package/ui/.output/server/node_modules/entities/dist/esm/internal/decode-shared.d.ts.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/esm/internal/decode-shared.js +28 -0
- package/ui/.output/server/node_modules/entities/dist/esm/internal/decode-shared.js.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/esm/internal/encode-shared.d.ts +32 -0
- package/ui/.output/server/node_modules/entities/dist/esm/internal/encode-shared.d.ts.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/esm/internal/encode-shared.js +91 -0
- package/ui/.output/server/node_modules/entities/dist/esm/internal/encode-shared.js.map +1 -0
- package/ui/.output/server/node_modules/entities/dist/esm/package.json +3 -0
- package/ui/.output/server/node_modules/entities/escape.d.ts +3 -0
- package/ui/.output/server/node_modules/entities/escape.js +3 -0
- package/ui/.output/server/node_modules/entities/package.json +120 -0
- package/ui/.output/server/node_modules/entities/readme.md +143 -0
- package/ui/.output/server/node_modules/entities/src/decode-codepoint.ts +81 -0
- package/ui/.output/server/node_modules/entities/src/decode.ts +685 -0
- package/ui/.output/server/node_modules/entities/src/encode.ts +93 -0
- package/ui/.output/server/node_modules/entities/src/escape.ts +161 -0
- package/ui/.output/server/node_modules/entities/src/generated/.eslintrc.json +10 -0
- package/ui/.output/server/node_modules/entities/src/generated/decode-data-html.ts +6 -0
- package/ui/.output/server/node_modules/entities/src/generated/decode-data-xml.ts +6 -0
- package/ui/.output/server/node_modules/entities/src/generated/encode-html.ts +17 -0
- package/ui/.output/server/node_modules/entities/src/index.ts +187 -0
- package/ui/.output/server/node_modules/entities/src/internal/bin-trie-flags.ts +16 -0
- package/ui/.output/server/node_modules/entities/src/internal/decode-shared.ts +30 -0
- package/ui/.output/server/node_modules/entities/src/internal/encode-shared.ts +121 -0
- package/ui/package.json +1 -1
- package/ui/.output/public/_nuxt/2bKOvQ0d.js +0 -1
- package/ui/.output/public/_nuxt/B9AVA2DP.js +0 -1
- package/ui/.output/public/_nuxt/Bwm-qAEx.js +0 -1
- package/ui/.output/public/_nuxt/C2BUFUls.js +0 -1
- package/ui/.output/public/_nuxt/C7JnlssT.js +0 -1
- package/ui/.output/public/_nuxt/C9wM2XOU.js +0 -70
- package/ui/.output/public/_nuxt/CLsTGSNv.js +0 -1
- package/ui/.output/public/_nuxt/CYtbVgsc.js +0 -1
- package/ui/.output/public/_nuxt/Czg20gUb.js +0 -1
- package/ui/.output/public/_nuxt/D7LY3N47.js +0 -16
- package/ui/.output/public/_nuxt/DCp3GJQW.js +0 -1
- package/ui/.output/public/_nuxt/DWD1xjy0.js +0 -2
- package/ui/.output/public/_nuxt/DWMhLzME.js +0 -1
- package/ui/.output/public/_nuxt/Daca6CiN.js +0 -5
- package/ui/.output/public/_nuxt/DehGGwZq.js +0 -1
- package/ui/.output/public/_nuxt/DqW9UKXb.js +0 -1
- package/ui/.output/public/_nuxt/builds/latest.json +0 -1
- package/ui/.output/public/_nuxt/builds/meta/c6a56b63-9280-455c-96ed-843f8029ca3a.json +0 -1
- package/ui/.output/public/_nuxt/config.ClyHUYof.css +0 -1
- package/ui/.output/public/_nuxt/logs.BmDpUxtf.css +0 -1
- package/ui/.output/public/_nuxt/run.ByHLIFjd.css +0 -1
- package/ui/.output/server/chunks/build/Badge-2SB8hHdz.mjs.map +0 -1
- package/ui/.output/server/chunks/build/Button-Dgqz5RR8.mjs.map +0 -1
- package/ui/.output/server/chunks/build/Input-ckU7qZlb.mjs.map +0 -1
- package/ui/.output/server/chunks/build/Select-ByGZz9s4.mjs.map +0 -1
- package/ui/.output/server/chunks/build/config-QZGfNfGJ.mjs.map +0 -1
- package/ui/.output/server/chunks/build/config-styles.DjqRFF9g.mjs +0 -8
- package/ui/.output/server/chunks/build/config-styles.DjqRFF9g.mjs.map +0 -1
- package/ui/.output/server/chunks/build/default-DiZbTfNE.mjs.map +0 -1
- package/ui/.output/server/chunks/build/entry-styles.D33dgEBj.mjs +0 -11
- package/ui/.output/server/chunks/build/entry-styles.D33dgEBj.mjs.map +0 -1
- package/ui/.output/server/chunks/build/index-DZrzYTcX.mjs +0 -89
- package/ui/.output/server/chunks/build/index-DZrzYTcX.mjs.map +0 -1
- package/ui/.output/server/chunks/build/login-cekfLp5n.mjs.map +0 -1
- package/ui/.output/server/chunks/build/logs-hZKOhIqF.mjs.map +0 -1
- package/ui/.output/server/chunks/build/logs-styles.jGthmQxA.mjs +0 -8
- package/ui/.output/server/chunks/build/logs-styles.jGthmQxA.mjs.map +0 -1
- package/ui/.output/server/chunks/build/run-CfSa6qTR.mjs.map +0 -1
- package/ui/.output/server/chunks/build/run-styles.PsIyKaYb.mjs +0 -8
- package/ui/.output/server/chunks/build/run-styles.PsIyKaYb.mjs.map +0 -1
- package/ui/.output/server/chunks/build/schedule-Pz7_wUvq.mjs.map +0 -1
- package/ui/.output/server/chunks/build/selectMenu-B2FUotwL.mjs +0 -158
- package/ui/.output/server/chunks/build/selectMenu-B2FUotwL.mjs.map +0 -1
- package/ui/.output/server/chunks/build/useApi-CFWxoIea.mjs.map +0 -1
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { getCodePoint, XML_BITSET_VALUE } from "./escape.js";
|
|
2
|
+
import { htmlTrie } from "./generated/encode-html.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* We store the characters to consider as a compact bitset for fast lookups.
|
|
6
|
+
*/
|
|
7
|
+
const HTML_BITSET = /* #__PURE__ */ new Uint32Array([
|
|
8
|
+
0x16_00, // Bits for 09,0A,0C
|
|
9
|
+
0xfc_00_ff_fe, // 32..63 -> 21-2D (minus space), 2E,2F,3A-3F
|
|
10
|
+
0xf8_00_00_01, // 64..95 -> 40, 5B-5F
|
|
11
|
+
0x38_00_00_01, // 96..127-> 60, 7B-7D
|
|
12
|
+
]);
|
|
13
|
+
|
|
14
|
+
const XML_BITSET = /* #__PURE__ */ new Uint32Array([0, XML_BITSET_VALUE, 0, 0]);
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Encodes all characters in the input using HTML entities. This includes
|
|
18
|
+
* characters that are valid ASCII characters in HTML documents, such as `#`.
|
|
19
|
+
*
|
|
20
|
+
* To get a more compact output, consider using the `encodeNonAsciiHTML`
|
|
21
|
+
* function, which will only encode characters that are not valid in HTML
|
|
22
|
+
* documents, as well as non-ASCII characters.
|
|
23
|
+
*
|
|
24
|
+
* If a character has no equivalent entity, a numeric hexadecimal reference
|
|
25
|
+
* (eg. `ü`) will be used.
|
|
26
|
+
*/
|
|
27
|
+
export function encodeHTML(input: string): string {
|
|
28
|
+
return encodeHTMLTrieRe(HTML_BITSET, input);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Encodes all non-ASCII characters, as well as characters not valid in HTML
|
|
32
|
+
* documents using HTML entities. This function will not encode characters that
|
|
33
|
+
* are valid in HTML documents, such as `#`.
|
|
34
|
+
*
|
|
35
|
+
* If a character has no equivalent entity, a numeric hexadecimal reference
|
|
36
|
+
* (eg. `ü`) will be used.
|
|
37
|
+
*/
|
|
38
|
+
export function encodeNonAsciiHTML(input: string): string {
|
|
39
|
+
return encodeHTMLTrieRe(XML_BITSET, input);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function encodeHTMLTrieRe(bitset: Uint32Array, input: string): string {
|
|
43
|
+
let out: string | undefined;
|
|
44
|
+
let last = 0; // Start of the next untouched slice.
|
|
45
|
+
const { length } = input;
|
|
46
|
+
|
|
47
|
+
for (let index = 0; index < length; index++) {
|
|
48
|
+
const char = input.charCodeAt(index);
|
|
49
|
+
// Skip ASCII characters that don't need encoding
|
|
50
|
+
if (char < 0x80 && !((bitset[char >>> 5] >>> char) & 1)) {
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (out === undefined) out = input.substring(0, index);
|
|
55
|
+
else if (last !== index) out += input.substring(last, index);
|
|
56
|
+
|
|
57
|
+
let node = htmlTrie.get(char);
|
|
58
|
+
|
|
59
|
+
if (typeof node === "object") {
|
|
60
|
+
if (index + 1 < length) {
|
|
61
|
+
const nextChar = input.charCodeAt(index + 1);
|
|
62
|
+
const value =
|
|
63
|
+
typeof node.next === "number"
|
|
64
|
+
? node.next === nextChar
|
|
65
|
+
? node.nextValue
|
|
66
|
+
: undefined
|
|
67
|
+
: node.next.get(nextChar);
|
|
68
|
+
|
|
69
|
+
if (value !== undefined) {
|
|
70
|
+
out += value;
|
|
71
|
+
index++;
|
|
72
|
+
last = index + 1;
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
node = node.value;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (node === undefined) {
|
|
80
|
+
const cp = getCodePoint(input, index);
|
|
81
|
+
out += `&#x${cp.toString(16)};`;
|
|
82
|
+
if (cp !== char) index++;
|
|
83
|
+
last = index + 1;
|
|
84
|
+
} else {
|
|
85
|
+
out += node;
|
|
86
|
+
last = index + 1;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (out === undefined) return input;
|
|
91
|
+
if (last < length) out += input.substr(last);
|
|
92
|
+
return out;
|
|
93
|
+
}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
const xmlCodeMap = new Map([
|
|
2
|
+
[34, """],
|
|
3
|
+
[38, "&"],
|
|
4
|
+
[39, "'"],
|
|
5
|
+
[60, "<"],
|
|
6
|
+
[62, ">"],
|
|
7
|
+
]);
|
|
8
|
+
|
|
9
|
+
// For compatibility with node < 4, we wrap `codePointAt`
|
|
10
|
+
export const getCodePoint: (c: string, index: number) => number =
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
12
|
+
String.prototype.codePointAt == null
|
|
13
|
+
? (c: string, index: number): number =>
|
|
14
|
+
(c.charCodeAt(index) & 0xfc_00) === 0xd8_00
|
|
15
|
+
? (c.charCodeAt(index) - 0xd8_00) * 0x4_00 +
|
|
16
|
+
c.charCodeAt(index + 1) -
|
|
17
|
+
0xdc_00 +
|
|
18
|
+
0x1_00_00
|
|
19
|
+
: c.charCodeAt(index)
|
|
20
|
+
: // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
|
|
21
|
+
(input: string, index: number): number => input.codePointAt(index)!;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Bitset for ASCII characters that need to be escaped in XML.
|
|
25
|
+
*/
|
|
26
|
+
export const XML_BITSET_VALUE = 0x50_00_00_c4; // 32..63 -> 34 ("),38 (&),39 ('),60 (<),62 (>)
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Encodes all non-ASCII characters, as well as characters not valid in XML
|
|
30
|
+
* documents using XML entities. Uses a fast bitset scan instead of RegExp.
|
|
31
|
+
*
|
|
32
|
+
* If a character has no equivalent entity, a numeric hexadecimal reference
|
|
33
|
+
* (eg. `ü`) will be used.
|
|
34
|
+
*/
|
|
35
|
+
export function encodeXML(input: string): string {
|
|
36
|
+
let out: string | undefined;
|
|
37
|
+
let last = 0;
|
|
38
|
+
const { length } = input;
|
|
39
|
+
|
|
40
|
+
for (let index = 0; index < length; index++) {
|
|
41
|
+
const char = input.charCodeAt(index);
|
|
42
|
+
|
|
43
|
+
// Check for ASCII chars that don't need escaping
|
|
44
|
+
if (
|
|
45
|
+
char < 0x80 &&
|
|
46
|
+
(((XML_BITSET_VALUE >>> char) & 1) === 0 || char >= 64 || char < 32)
|
|
47
|
+
) {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (out === undefined) out = input.substring(0, index);
|
|
52
|
+
else if (last !== index) out += input.substring(last, index);
|
|
53
|
+
|
|
54
|
+
if (char < 64) {
|
|
55
|
+
// Known replacement
|
|
56
|
+
out += xmlCodeMap.get(char)!;
|
|
57
|
+
last = index + 1;
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Non-ASCII: encode as numeric entity (handle surrogate pair)
|
|
62
|
+
const cp = getCodePoint(input, index);
|
|
63
|
+
out += `&#x${cp.toString(16)};`;
|
|
64
|
+
if (cp !== char) index++; // Skip trailing surrogate
|
|
65
|
+
last = index + 1;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (out === undefined) return input;
|
|
69
|
+
if (last < length) out += input.substr(last);
|
|
70
|
+
return out;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Encodes all non-ASCII characters, as well as characters not valid in XML
|
|
75
|
+
* documents using numeric hexadecimal reference (eg. `ü`).
|
|
76
|
+
*
|
|
77
|
+
* Have a look at `escapeUTF8` if you want a more concise output at the expense
|
|
78
|
+
* of reduced transportability.
|
|
79
|
+
*
|
|
80
|
+
* @param data String to escape.
|
|
81
|
+
*/
|
|
82
|
+
export const escape: typeof encodeXML = encodeXML;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Creates a function that escapes all characters matched by the given regular
|
|
86
|
+
* expression using the given map of characters to escape to their entities.
|
|
87
|
+
*
|
|
88
|
+
* @param regex Regular expression to match characters to escape.
|
|
89
|
+
* @param map Map of characters to escape to their entities.
|
|
90
|
+
*
|
|
91
|
+
* @returns Function that escapes all characters matched by the given regular
|
|
92
|
+
* expression using the given map of characters to escape to their entities.
|
|
93
|
+
*/
|
|
94
|
+
function getEscaper(
|
|
95
|
+
regex: RegExp,
|
|
96
|
+
map: Map<number, string>,
|
|
97
|
+
): (data: string) => string {
|
|
98
|
+
return function escape(data: string): string {
|
|
99
|
+
let match: RegExpExecArray | null;
|
|
100
|
+
let lastIndex = 0;
|
|
101
|
+
let result = "";
|
|
102
|
+
|
|
103
|
+
while ((match = regex.exec(data))) {
|
|
104
|
+
if (lastIndex !== match.index) {
|
|
105
|
+
result += data.substring(lastIndex, match.index);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// We know that this character will be in the map.
|
|
109
|
+
result += map.get(match[0].charCodeAt(0))!;
|
|
110
|
+
|
|
111
|
+
// Every match will be of length 1
|
|
112
|
+
lastIndex = match.index + 1;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return result + data.substring(lastIndex);
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Encodes all characters not valid in XML documents using XML entities.
|
|
121
|
+
*
|
|
122
|
+
* Note that the output will be character-set dependent.
|
|
123
|
+
*
|
|
124
|
+
* @param data String to escape.
|
|
125
|
+
*/
|
|
126
|
+
export const escapeUTF8: (data: string) => string = /* #__PURE__ */ getEscaper(
|
|
127
|
+
/["&'<>]/g,
|
|
128
|
+
xmlCodeMap,
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Encodes all characters that have to be escaped in HTML attributes,
|
|
133
|
+
* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
|
|
134
|
+
*
|
|
135
|
+
* @param data String to escape.
|
|
136
|
+
*/
|
|
137
|
+
export const escapeAttribute: (data: string) => string =
|
|
138
|
+
/* #__PURE__ */ getEscaper(
|
|
139
|
+
/["&\u00A0]/g,
|
|
140
|
+
new Map([
|
|
141
|
+
[34, """],
|
|
142
|
+
[38, "&"],
|
|
143
|
+
[160, " "],
|
|
144
|
+
]),
|
|
145
|
+
);
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Encodes all characters that have to be escaped in HTML text,
|
|
149
|
+
* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
|
|
150
|
+
*
|
|
151
|
+
* @param data String to escape.
|
|
152
|
+
*/
|
|
153
|
+
export const escapeText: (data: string) => string = /* #__PURE__ */ getEscaper(
|
|
154
|
+
/[&<>\u00A0]/g,
|
|
155
|
+
new Map([
|
|
156
|
+
[38, "&"],
|
|
157
|
+
[60, "<"],
|
|
158
|
+
[62, ">"],
|
|
159
|
+
[160, " "],
|
|
160
|
+
]),
|
|
161
|
+
);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// Generated using scripts/write-decode-map.ts
|
|
2
|
+
|
|
3
|
+
import { decodeBase64 } from "../internal/decode-shared.js";
|
|
4
|
+
export const htmlDecodeTree: Uint16Array = /* #__PURE__ */ decodeBase64(
|
|
5
|
+
"QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg",
|
|
6
|
+
);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Generated using scripts/write-encode-map.ts
|
|
2
|
+
// This file contains a compact, single-string serialization of the HTML encode trie.
|
|
3
|
+
// Format per entry (sequence in ascending code point order using diff encoding):
|
|
4
|
+
// <diffBase36>[&name;][{<children>}] -- diff omitted when 0.
|
|
5
|
+
// "&name;" gives the entity value for the node. A following { starts a nested sub-map.
|
|
6
|
+
// Diffs use the same scheme as before: diff = currentKey - previousKey - 1, first entry stores key.
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
type EncodeTrieNode,
|
|
10
|
+
parseEncodeTrie,
|
|
11
|
+
} from "../internal/encode-shared.js";
|
|
12
|
+
|
|
13
|
+
// Compact serialized trie (intended to stay small & JS engine friendly)
|
|
14
|
+
export const htmlTrie: Map<number, EncodeTrieNode> =
|
|
15
|
+
/* #__PURE__ */ parseEncodeTrie(
|
|
16
|
+
"9	
m!"#$%&'()*+,1./a:;<{6he<⃒}={6hx=⃥}>{6he>⃒}?@q[\]^_`5{2yfj}k{|}y ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒē2ĖėĘęĚěĜĝĞğĠġĢ1ĤĥĦħĨĩĪī2ĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌō2ŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžjƒyƵ1rǵ1tȷ3yˆˇg˘˙˚˛˜˝1f̑3jΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ1ΣΤΥΦΧΨΩ7αβγδεζηθικλμνξοπρςστυφχψω7ϑϒ2ϕϖ5Ϝϝiϰϱ3ϵ϶aЁЂЃЄЅІЇЈЉЊЋЌ1ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя1ёђѓєѕіїјљњћќ1ўџ5gi    1    ​‌‍‎‏‐2–—―‖1‘’‚1“”„1†‡•2‥…9‰‱′″‴‵3‹›3‾2⁁1⁃⁄a⁏7⁗7 {6bu  }⁠⁡⁢⁣20€1a⃛⃜11ℂ2℅4ℊℋℌℍℎℏℐℑℒℓ1ℕ№℗℘ℙℚℛℜℝ℞3™1ℤ2℧ℨ℩2ℬℭ1ℯℰℱ1ℳℴℵℶℷℸcⅅⅆⅇⅈa⅓⅔⅕⅖⅗⅘⅙⅚⅛⅜⅝⅞1d←↑→↓↔↕↖↗↘↙↚↛1↝{mw↝̸}↞↟↠↡↢↣↤↥↦↧1↩↪↫↬↭↮1↰↱↲↳1↵↶↷2↺↻↼↽↾↿⇀⇁⇂⇃⇄⇅⇆⇇⇈⇉⇊⇋⇌⇍⇎⇏⇐⇑⇒⇓⇔⇕⇖⇗⇘⇙⇚⇛1⇝6⇤⇥f⇵7⇽⇾⇿∀∁∂{mw∂̸}∃∄∅1∇∈∉1∋∌2∏∐∑−∓∔1∖∗∘1√2∝∞∟∠{6he∠⃒}∡∢∣∤∥∦∧∨∩{1e68∩︀}∪{1e68∪︀}∫∬∭∮∯∰∱∲∳∴∵∶∷∸1∺∻∼{6he∼⃒}∽{mp∽̱}∾{mr∾̳}∿≀≁≂{mw≂̸}≃≄≅≆≇≈≉≊≋{mw≋̸}≌≍{6he≍⃒}≎{mw≎̸}≏{mw≏̸}≐{mw≐̸}≑≒≓≔≕≖≗1≙≚1≜2≟≠≡{6hx≡⃥}≢1≤{6he≤⃒}≥{6he≥⃒}≦{mw≦̸}≧{mw≧̸}≨{1e68≨︀}≩{1e68≩︀}≪{mw≪̸5uh≪⃒}≫{mw≫̸5uh≫⃒}≬≭≮≯≰≱≲≳≴≵≶≷≸≹≺≻≼≽≾≿{mw≿̸}⊀⊁⊂{6he⊂⃒}⊃{6he⊃⃒}⊄⊅⊆⊇⊈⊉⊊{1e68⊊︀}⊋{1e68⊋︀}1⊍⊎⊏{mw⊏̸}⊐{mw⊐̸}⊑⊒⊓{1e68⊓︀}⊔{1e68⊔︀}⊕⊖⊗⊘⊙⊚⊛1⊝⊞⊟⊠⊡⊢⊣⊤⊥1⊧⊨⊩⊪⊫⊬⊭⊮⊯⊰1⊲⊳⊴{6he⊴⃒}⊵{6he⊵⃒}⊶⊷⊸⊹⊺⊻1⊽⊾⊿⋀⋁⋂⋃⋄⋅⋆⋇⋈⋉⋊⋋⋌⋍⋎⋏⋐⋑⋒⋓⋔⋕⋖⋗⋘{mw⋘̸}⋙{mw⋙̸}⋚{1e68⋚︀}⋛{1e68⋛︀}2⋞⋟⋠⋡⋢⋣2⋦⋧⋨⋩⋪⋫⋬⋭⋮⋯⋰⋱⋲⋳⋴⋵{mw⋵̸}⋶⋷1⋹{mw⋹̸}⋺⋻⋼⋽⋾6⌅⌆1⌈⌉⌊⌋⌌⌍⌎⌏⌐1⌒⌓1⌕⌖5⌜⌝⌞⌟2⌢⌣9⌭⌮7⌶6⌽1⌿1o⍼1f⎰⎱2⎴⎵⎶11⏜⏝⏞⏟2⏢4⏧1n␣4kⓈ1j─1│9┌3┐3└3┘3├7┤7┬7┴7┼j═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬j▀3▄3█8░▒▓d□8▪▫1▭▮2▱1△▴▵2▸▹3▽▾▿2◂◃6◊○w◬2◯8◸◹◺◻◼8★☆7☎1d♀1♂t♠2♣1♥♦3♪2♭♮♯4j✓3✗8✠l✶x❘p❲❳2c⟈⟉s⟦⟧⟨⟩⟪⟫⟬⟭7⟵⟶⟷⟸⟹⟺1⟼2⟿76⤂⤃⤄⤅6⤌⤍⤎⤏⤐⤑⤒⤓2⤖2⤙⤚⤛⤜⤝⤞⤟⤠2⤣⤤⤥⤦⤧⤨⤩⤪8⤳{mw⤳̸}1⤵⤶⤷⤸⤹2⤼⤽7⥅2⥈⥉⥊⥋2⥎⥏⥐⥑⥒⥓⥔⥕⥖⥗⥘⥙⥚⥛⥜⥝⥞⥟⥠⥡⥢⥣⥤⥥⥦⥧⥨⥩⥪⥫⥬⥭⥮⥯⥰⥱⥲⥳⥴⥵⥶1⥸⥹1⥻⥼⥽⥾⥿5⦅⦆4⦋⦌⦍⦎⦏⦐⦑⦒⦓⦔⦕⦖3⦚1⦜⦝6⦤⦥⦦⦧⦨⦩⦪⦫⦬⦭⦮⦯⦰⦱⦲⦳⦴⦵⦶⦷1⦹1⦻⦼1⦾⦿⧀⧁⧂⧃⧄⧅3⧉3⧍⧎⧏{mw⧏̸}⧐{mw⧐̸}b⧜⧝⧞4⧣⧤⧥5⧫8⧴1⧶9⨀⨁⨂1⨄1⨆5⨌⨍2⨐⨑⨒⨓⨔⨕⨖⨗a⨢⨣⨤⨥⨦⨧1⨩⨪2⨭⨮⨯⨰⨱1⨳⨴⨵⨶⨷⨸⨹⨺⨻⨼2⨿⩀1⩂⩃⩄⩅⩆⩇⩈⩉⩊⩋⩌⩍2⩐2⩓⩔⩕⩖⩗⩘1⩚⩛⩜⩝1⩟6⩦3⩪2⩭{mw⩭̸}⩮⩯⩰{mw⩰̸}⩱⩲⩳⩴⩵1⩷⩸⩹⩺⩻⩼⩽{mw⩽̸}⩾{mw⩾̸}⩿⪀⪁⪂⪃⪄⪅⪆⪇⪈⪉⪊⪋⪌⪍⪎⪏⪐⪑⪒⪓⪔⪕⪖⪗⪘⪙⪚2⪝⪞⪟⪠⪡{mw⪡̸}⪢{mw⪢̸}1⪤⪥⪦⪧⪨⪩⪪⪫⪬{1e68⪬︀}⪭{1e68⪭︀}⪮⪯{mw⪯̸}⪰{mw⪰̸}2⪳⪴⪵⪶⪷⪸⪹⪺⪻⪼⪽⪾⪿⫀⫁⫂⫃⫄⫅{mw⫅̸}⫆{mw⫆̸}⫇⫈2⫋{1e68⫋︀}⫌{1e68⫌︀}2⫏⫐⫑⫒⫓⫔⫕⫖⫗⫘⫙⫚⫛8⫤1⫦⫧⫨⫩1⫫⫬⫭⫮⫯⫰⫱⫲⫳9⫽{6hx⫽⃥}y7r{17ks𝒜1𝒞𝒟2𝒢2𝒥𝒦2𝒩𝒪𝒫𝒬1𝒮𝒯𝒰𝒱𝒲𝒳𝒴𝒵𝒶𝒷𝒸𝒹1𝒻1𝒽𝒾𝒿𝓀𝓁𝓂𝓃1𝓅𝓆𝓇𝓈𝓉𝓊𝓋𝓌𝓍𝓎𝓏1g𝔄𝔅1𝔇𝔈𝔉𝔊2𝔍𝔎𝔏𝔐𝔑𝔒𝔓𝔔1𝔖𝔗𝔘𝔙𝔚𝔛𝔜1𝔞𝔟𝔠𝔡𝔢𝔣𝔤𝔥𝔦𝔧𝔨𝔩𝔪𝔫𝔬𝔭𝔮𝔯𝔰𝔱𝔲𝔳𝔴𝔵𝔶𝔷𝔸𝔹1𝔻𝔼𝔽𝔾1𝕀𝕁𝕂𝕃𝕄1𝕆3𝕊𝕋𝕌𝕍𝕎𝕏𝕐1𝕒𝕓𝕔𝕕𝕖𝕗𝕘𝕙𝕚𝕛𝕜𝕝𝕞𝕟𝕠𝕡𝕢𝕣𝕤𝕥𝕦𝕧𝕨𝕩𝕪𝕫}6vefffiflffiffl",
|
|
17
|
+
);
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { DecodingMode, decodeHTML, decodeXML } from "./decode.js";
|
|
2
|
+
import { encodeHTML, encodeNonAsciiHTML } from "./encode.js";
|
|
3
|
+
import {
|
|
4
|
+
encodeXML,
|
|
5
|
+
escapeAttribute,
|
|
6
|
+
escapeText,
|
|
7
|
+
escapeUTF8,
|
|
8
|
+
} from "./escape.js";
|
|
9
|
+
|
|
10
|
+
/** The level of entities to support. */
|
|
11
|
+
export enum EntityLevel {
|
|
12
|
+
/** Support only XML entities. */
|
|
13
|
+
XML = 0,
|
|
14
|
+
/** Support HTML entities, which are a superset of XML entities. */
|
|
15
|
+
HTML = 1,
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export enum EncodingMode {
|
|
19
|
+
/**
|
|
20
|
+
* The output is UTF-8 encoded. Only characters that need escaping within
|
|
21
|
+
* XML will be escaped.
|
|
22
|
+
*/
|
|
23
|
+
UTF8,
|
|
24
|
+
/**
|
|
25
|
+
* The output consists only of ASCII characters. Characters that need
|
|
26
|
+
* escaping within HTML, and characters that aren't ASCII characters will
|
|
27
|
+
* be escaped.
|
|
28
|
+
*/
|
|
29
|
+
ASCII,
|
|
30
|
+
/**
|
|
31
|
+
* Encode all characters that have an equivalent entity, as well as all
|
|
32
|
+
* characters that are not ASCII characters.
|
|
33
|
+
*/
|
|
34
|
+
Extensive,
|
|
35
|
+
/**
|
|
36
|
+
* Encode all characters that have to be escaped in HTML attributes,
|
|
37
|
+
* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
|
|
38
|
+
*/
|
|
39
|
+
Attribute,
|
|
40
|
+
/**
|
|
41
|
+
* Encode all characters that have to be escaped in HTML text,
|
|
42
|
+
* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
|
|
43
|
+
*/
|
|
44
|
+
Text,
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export interface DecodingOptions {
|
|
48
|
+
/**
|
|
49
|
+
* The level of entities to support.
|
|
50
|
+
* @default {@link EntityLevel.XML}
|
|
51
|
+
*/
|
|
52
|
+
level?: EntityLevel;
|
|
53
|
+
/**
|
|
54
|
+
* Decoding mode. If `Legacy`, will support legacy entities not terminated
|
|
55
|
+
* with a semicolon (`;`).
|
|
56
|
+
*
|
|
57
|
+
* Always `Strict` for XML. For HTML, set this to `true` if you are parsing
|
|
58
|
+
* an attribute value.
|
|
59
|
+
*
|
|
60
|
+
* The deprecated `decodeStrict` function defaults this to `Strict`.
|
|
61
|
+
*
|
|
62
|
+
* @default {@link DecodingMode.Legacy}
|
|
63
|
+
*/
|
|
64
|
+
mode?: DecodingMode | undefined;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Decodes a string with entities.
|
|
69
|
+
*
|
|
70
|
+
* @param input String to decode.
|
|
71
|
+
* @param options Decoding options.
|
|
72
|
+
*/
|
|
73
|
+
export function decode(
|
|
74
|
+
input: string,
|
|
75
|
+
options: DecodingOptions | EntityLevel = EntityLevel.XML,
|
|
76
|
+
): string {
|
|
77
|
+
const level = typeof options === "number" ? options : options.level;
|
|
78
|
+
|
|
79
|
+
if (level === EntityLevel.HTML) {
|
|
80
|
+
const mode = typeof options === "object" ? options.mode : undefined;
|
|
81
|
+
return decodeHTML(input, mode);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return decodeXML(input);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Decodes a string with entities. Does not allow missing trailing semicolons for entities.
|
|
89
|
+
*
|
|
90
|
+
* @param input String to decode.
|
|
91
|
+
* @param options Decoding options.
|
|
92
|
+
* @deprecated Use `decode` with the `mode` set to `Strict`.
|
|
93
|
+
*/
|
|
94
|
+
export function decodeStrict(
|
|
95
|
+
input: string,
|
|
96
|
+
options: DecodingOptions | EntityLevel = EntityLevel.XML,
|
|
97
|
+
): string {
|
|
98
|
+
const normalizedOptions =
|
|
99
|
+
typeof options === "number" ? { level: options } : options;
|
|
100
|
+
normalizedOptions.mode ??= DecodingMode.Strict;
|
|
101
|
+
|
|
102
|
+
return decode(input, normalizedOptions);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Options for `encode`.
|
|
107
|
+
*/
|
|
108
|
+
export interface EncodingOptions {
|
|
109
|
+
/**
|
|
110
|
+
* The level of entities to support.
|
|
111
|
+
* @default {@link EntityLevel.XML}
|
|
112
|
+
*/
|
|
113
|
+
level?: EntityLevel;
|
|
114
|
+
/**
|
|
115
|
+
* Output format.
|
|
116
|
+
* @default {@link EncodingMode.Extensive}
|
|
117
|
+
*/
|
|
118
|
+
mode?: EncodingMode;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Encodes a string with entities.
|
|
123
|
+
*
|
|
124
|
+
* @param input String to encode.
|
|
125
|
+
* @param options Encoding options.
|
|
126
|
+
*/
|
|
127
|
+
export function encode(
|
|
128
|
+
input: string,
|
|
129
|
+
options: EncodingOptions | EntityLevel = EntityLevel.XML,
|
|
130
|
+
): string {
|
|
131
|
+
const { mode = EncodingMode.Extensive, level = EntityLevel.XML } =
|
|
132
|
+
typeof options === "number" ? { level: options } : options;
|
|
133
|
+
|
|
134
|
+
switch (mode) {
|
|
135
|
+
case EncodingMode.UTF8: {
|
|
136
|
+
return escapeUTF8(input);
|
|
137
|
+
}
|
|
138
|
+
case EncodingMode.Attribute: {
|
|
139
|
+
return escapeAttribute(input);
|
|
140
|
+
}
|
|
141
|
+
case EncodingMode.Text: {
|
|
142
|
+
return escapeText(input);
|
|
143
|
+
}
|
|
144
|
+
case EncodingMode.ASCII: {
|
|
145
|
+
return level === EntityLevel.HTML
|
|
146
|
+
? encodeNonAsciiHTML(input)
|
|
147
|
+
: encodeXML(input);
|
|
148
|
+
}
|
|
149
|
+
// biome-ignore lint/complexity/noUselessSwitchCase: we get an error for the switch not being exhaustive
|
|
150
|
+
case EncodingMode.Extensive: // eslint-disable-line unicorn/no-useless-switch-case
|
|
151
|
+
default: {
|
|
152
|
+
return level === EntityLevel.HTML
|
|
153
|
+
? encodeHTML(input)
|
|
154
|
+
: encodeXML(input);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
export {
|
|
160
|
+
DecodingMode,
|
|
161
|
+
decodeHTML,
|
|
162
|
+
// Legacy aliases (deprecated)
|
|
163
|
+
decodeHTML as decodeHTML4,
|
|
164
|
+
decodeHTML as decodeHTML5,
|
|
165
|
+
decodeHTMLAttribute,
|
|
166
|
+
decodeHTMLStrict,
|
|
167
|
+
decodeHTMLStrict as decodeHTML4Strict,
|
|
168
|
+
decodeHTMLStrict as decodeHTML5Strict,
|
|
169
|
+
decodeXML,
|
|
170
|
+
decodeXML as decodeXMLStrict,
|
|
171
|
+
EntityDecoder,
|
|
172
|
+
} from "./decode.js";
|
|
173
|
+
|
|
174
|
+
export {
|
|
175
|
+
encodeHTML,
|
|
176
|
+
// Legacy aliases (deprecated)
|
|
177
|
+
encodeHTML as encodeHTML4,
|
|
178
|
+
encodeHTML as encodeHTML5,
|
|
179
|
+
encodeNonAsciiHTML,
|
|
180
|
+
} from "./encode.js";
|
|
181
|
+
export {
|
|
182
|
+
encodeXML,
|
|
183
|
+
escape,
|
|
184
|
+
escapeAttribute,
|
|
185
|
+
escapeText,
|
|
186
|
+
escapeUTF8,
|
|
187
|
+
} from "./escape.js";
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bit flags & masks for the binary trie encoding used for entity decoding.
|
|
3
|
+
*
|
|
4
|
+
* Bit layout (16 bits total):
|
|
5
|
+
* 15..14 VALUE_LENGTH (+1 encoding; 0 => no value)
|
|
6
|
+
* 13 FLAG13. If valueLength>0: semicolon required flag (implicit ';').
|
|
7
|
+
* If valueLength==0: compact run flag.
|
|
8
|
+
* 12..7 BRANCH_LENGTH Branch length (0 => single branch in 6..0 if jumpOffset==char) OR run length (when compact run)
|
|
9
|
+
* 6..0 JUMP_TABLE Jump offset (jump table) OR single-branch char code OR first run char
|
|
10
|
+
*/
|
|
11
|
+
export enum BinTrieFlags {
|
|
12
|
+
VALUE_LENGTH = 0b1100_0000_0000_0000,
|
|
13
|
+
FLAG13 = 0b0010_0000_0000_0000,
|
|
14
|
+
BRANCH_LENGTH = 0b0001_1111_1000_0000,
|
|
15
|
+
JUMP_TABLE = 0b0000_0000_0111_1111,
|
|
16
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Shared base64 decode helper for generated decode data.
|
|
3
|
+
* Assumes global atob is available.
|
|
4
|
+
*/
|
|
5
|
+
export function decodeBase64(input: string): Uint16Array {
|
|
6
|
+
const binary: string =
|
|
7
|
+
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
8
|
+
typeof atob === "function"
|
|
9
|
+
? // Browser (and Node >=16)
|
|
10
|
+
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
11
|
+
atob(input)
|
|
12
|
+
: // Older Node versions (<16)
|
|
13
|
+
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
14
|
+
typeof Buffer.from === "function"
|
|
15
|
+
? // eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
16
|
+
Buffer.from(input, "base64").toString("binary")
|
|
17
|
+
: // eslint-disable-next-line unicorn/no-new-buffer, n/no-deprecated-api
|
|
18
|
+
new Buffer(input, "base64").toString("binary");
|
|
19
|
+
|
|
20
|
+
const evenLength = binary.length & ~1; // Round down to even length
|
|
21
|
+
const out = new Uint16Array(evenLength / 2);
|
|
22
|
+
|
|
23
|
+
for (let index = 0, outIndex = 0; index < evenLength; index += 2) {
|
|
24
|
+
const lo = binary.charCodeAt(index);
|
|
25
|
+
const hi = binary.charCodeAt(index + 1);
|
|
26
|
+
out[outIndex++] = lo | (hi << 8);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return out;
|
|
30
|
+
}
|