@sourceregistry/monaco-cel-lite 1.0.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/README.md +108 -0
- package/dist/index.cjs.js +2 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.es.js +257 -0
- package/dist/index.es.js.map +1 -0
- package/package.json +61 -0
package/README.md
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# @sourceregistry/monaco-cel-lite
|
|
2
|
+
|
|
3
|
+
Monaco Editor language support and IntelliSense for
|
|
4
|
+
**@sourceregistry/cel-lite**.
|
|
5
|
+
|
|
6
|
+
This package adds:
|
|
7
|
+
- syntax highlighting
|
|
8
|
+
- auto-completion
|
|
9
|
+
- hover documentation
|
|
10
|
+
- signature help
|
|
11
|
+
|
|
12
|
+
It does **not** bundle Monaco itself.
|
|
13
|
+
|
|
14
|
+
## ✨ Features
|
|
15
|
+
|
|
16
|
+
- CEL-lite syntax highlighting (Monarch)
|
|
17
|
+
- Keyword, function, and symbol completion
|
|
18
|
+
- Hover documentation for functions
|
|
19
|
+
- Signature help while typing function calls
|
|
20
|
+
- Configurable context symbols (SAML, OIDC, claims, etc.)
|
|
21
|
+
- Zero runtime dependencies
|
|
22
|
+
|
|
23
|
+
## 📦 Installation
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm install @sourceregistry/monaco-cel-lite
|
|
27
|
+
````
|
|
28
|
+
|
|
29
|
+
You must also install Monaco:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npm install monaco-editor
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## 🚀 Basic usage
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
import * as monaco from "monaco-editor";
|
|
39
|
+
import { registerCelLite } from "@sourceregistry/monaco-cel-lite";
|
|
40
|
+
|
|
41
|
+
registerCelLite(monaco);
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Then use the language ID:
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
monaco.editor.create(container, {
|
|
48
|
+
value: "has(user.email) ? lower(user.email) : null",
|
|
49
|
+
language: "cel-lite",
|
|
50
|
+
});
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## ⚙️ Configuration
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
registerCelLite(monaco, {
|
|
57
|
+
languageId: "cel-lite",
|
|
58
|
+
functions: [
|
|
59
|
+
{ name: "has", detail: "has(x) -> bool" },
|
|
60
|
+
{ name: "lower", detail: "lower(s) -> string" },
|
|
61
|
+
],
|
|
62
|
+
symbols: [
|
|
63
|
+
{ label: "user.email", detail: "User email address" },
|
|
64
|
+
{ label: "saml.attributes", detail: "SAML attribute map" },
|
|
65
|
+
],
|
|
66
|
+
});
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Options
|
|
70
|
+
|
|
71
|
+
| Option | Description |
|
|
72
|
+
| ------------ | ----------------------------------------- |
|
|
73
|
+
| `languageId` | Custom language id (default: `cel-lite`) |
|
|
74
|
+
| `functions` | Function signatures for completion & docs |
|
|
75
|
+
| `symbols` | Context variables for completion |
|
|
76
|
+
|
|
77
|
+
## 🧠 Intended use-cases
|
|
78
|
+
|
|
79
|
+
* Identity Provider admin UIs
|
|
80
|
+
* Attribute mapper editors
|
|
81
|
+
* Policy rule builders
|
|
82
|
+
* Safe expression configuration interfaces
|
|
83
|
+
|
|
84
|
+
CEL-lite expressions are **configuration**, not code.
|
|
85
|
+
|
|
86
|
+
## 🔄 Relationship to CEL-lite
|
|
87
|
+
|
|
88
|
+
This package is **UI-only**.
|
|
89
|
+
It does not evaluate expressions.
|
|
90
|
+
|
|
91
|
+
For evaluation, use:
|
|
92
|
+
|
|
93
|
+
```ts
|
|
94
|
+
import { compileCel } from "@sourceregistry/cel-lite";
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## 🛡️ Design philosophy
|
|
98
|
+
|
|
99
|
+
* No execution of user JavaScript
|
|
100
|
+
* No dynamic imports
|
|
101
|
+
* No access to browser globals
|
|
102
|
+
* No Monaco bundling
|
|
103
|
+
|
|
104
|
+
Safe by default.
|
|
105
|
+
|
|
106
|
+
## 📄 License
|
|
107
|
+
|
|
108
|
+
Apache-2.0
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=[{name:"has",detail:"has(x) -> bool",documentation:"True if x is not null/undefined (arrays: length > 0).",params:["x"]},{name:"exists",detail:"exists(x) -> bool",documentation:"Alias for has(x).",params:["x"]},{name:"size",detail:"size(x) -> number",documentation:"Length of array/string; key count of object; else 0.",params:["x"]},{name:"first",detail:"first(x) -> any",documentation:"First element of array; otherwise returns x.",params:["x"]},{name:"lower",detail:"lower(s) -> string",documentation:"Lowercase string.",params:["s"]},{name:"upper",detail:"upper(s) -> string",documentation:"Uppercase string.",params:["s"]},{name:"trim",detail:"trim(s) -> string",documentation:"Trim whitespace.",params:["s"]},{name:"contains",detail:"contains(haystack, needle) -> bool",documentation:"Array membership or substring match.",params:["haystack","needle"]},{name:"containsAny",detail:"containsAny(arr, values) -> bool",documentation:"True if any value in values is in arr.",params:["arr","values"]},{name:"startsWith",detail:"startsWith(s, prefix) -> bool",documentation:"String prefix check.",params:["s","prefix"]},{name:"endsWith",detail:"endsWith(s, suffix) -> bool",documentation:"String suffix check.",params:["s","suffix"]},{name:"matches",detail:"matches(s, regex) -> bool",documentation:"Regex test (JS RegExp).",params:["s","regex"]},{name:"regexReplace",detail:"regexReplace(s, regex, repl) -> string",documentation:"Regex replace (global).",params:["s","regex","repl"]},{name:"coalesce",detail:"coalesce(a, b, ...) -> any",documentation:"First non-null/defined/non-empty array value.",params:["a","b","..."]},{name:"join",detail:"join(arr, sep) -> string",documentation:"Join array items into string.",params:["arr","sep"]},{name:"split",detail:"split(s, sep) -> string[]",documentation:"Split string into array.",params:["s","sep"]}],b=["true","false","null","in"];function v(e,d={}){const m=[],o=d.languageId??"cel-lite",u=d.functions??h,f=d.symbols??x(e);return e.languages.register({id:o}),m.push(e.languages.setMonarchTokensProvider(o,{keywords:b,functions:u.map(s=>s.name),tokenizer:{root:[{include:"@whitespace"},[/[a-zA-Z_][\w]*/,{cases:{"@keywords":"keyword","@functions":"function","@default":"identifier"}}],[/-?\d+(\.\d+)?/,"number"],[/'([^'\\]|\\.)*'/,"string"],[/"([^"\\]|\\.)*"/,"string"],[/(\&\&)|(\|\|)|==|!=|<=|>=|<|>|\+|\!|\?|\:/,"operator"],[/[()[\]{}]/,"@brackets"],[/[,\.]/,"delimiter"],[/./,"invalid"]],whitespace:[[/[ \t\r\n]+/,"white"],[/\/\/.*$/,"comment"],[/\/\*/,"comment","@comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]]}})),m.push(e.languages.setLanguageConfiguration(o,{comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["(",")"],["[","]"],["{","}"]],autoClosingPairs:[{open:"(",close:")"},{open:"[",close:"]"},{open:"{",close:"}"},{open:"'",close:"'"},{open:'"',close:'"'}],surroundingPairs:[{open:"(",close:")"},{open:"[",close:"]"},{open:"{",close:"}"},{open:"'",close:"'"},{open:'"',close:'"'}]})),m.push(e.languages.registerCompletionItemProvider(o,{triggerCharacters:[".","(","[","'",'"'],provideCompletionItems(s,i){const r=s.getWordUntilPosition(i),a={startLineNumber:i.lineNumber,endLineNumber:i.lineNumber,startColumn:r.startColumn,endColumn:r.endColumn},n=[];for(const t of b)n.push({label:t,kind:e.languages.CompletionItemKind.Keyword,insertText:t,range:a});for(const t of u)n.push({label:t.name,kind:e.languages.CompletionItemKind.Function,detail:t.detail,documentation:t.documentation,insertText:t.params?.length?`${t.name}(${t.params.map((c,l)=>`\${${l+1}}`).join(", ")})`:`${t.name}($1)`,insertTextRules:e.languages.CompletionItemInsertTextRule.InsertAsSnippet,range:a});for(const t of f)n.push({label:t.label,kind:t.kind??e.languages.CompletionItemKind.Variable,detail:t.detail,documentation:t.documentation,insertText:t.label,range:a});return{suggestions:n}}})),m.push(e.languages.registerHoverProvider(o,{provideHover(s,i){const r=s.getWordAtPosition(i);if(!r)return null;const a=u.find(n=>n.name===r.word);return a?{range:new e.Range(i.lineNumber,r.startColumn,i.lineNumber,r.endColumn),contents:[{value:`**${a.name}**`},a.detail?{value:`\`${a.detail}\``}:{value:""},a.documentation?{value:a.documentation}:{value:""}].filter(n=>n.value&&n.value.trim().length>0)}:null}})),m.push(e.languages.registerSignatureHelpProvider(o,{signatureHelpTriggerCharacters:["(",","],provideSignatureHelp(s,i){const r=s.getLineContent(i.lineNumber).slice(0,i.column-1),a=/([a-zA-Z_]\w*)\s*\(([^()]*)$/.exec(r);if(!a)return{value:{signatures:[],activeSignature:0,activeParameter:0},dispose:()=>{}};const n=a[1],t=a[2]??"",c=t.length===0?0:t.split(",").length-1,l=u.find(g=>g.name===n);if(!l)return{value:{signatures:[],activeSignature:0,activeParameter:0},dispose:()=>{}};const p=(l.params??["x"]).map(g=>({label:g}));return{value:{signatures:[{label:l.detail??`${l.name}(...)`,documentation:l.documentation?{value:l.documentation}:void 0,parameters:p}],activeSignature:0,activeParameter:Math.max(0,Math.min(c,p.length-1))},dispose:()=>{}}}})),{languageId:o,dispose:()=>m.forEach(s=>s.dispose())}}function x(e){return[{label:"saml",kind:e.languages.CompletionItemKind.Module,detail:"SAML context root"},{label:"saml.attributes",kind:e.languages.CompletionItemKind.Property,detail:"Map of SAML attribute -> string[]"},{label:"oidc",kind:e.languages.CompletionItemKind.Module,detail:"OIDC context root"},{label:"oidc.claims",kind:e.languages.CompletionItemKind.Property,detail:"OIDC claims map"},{label:"claim",kind:e.languages.CompletionItemKind.Variable,detail:"Mapped claims (output bag)"},{label:"attr",kind:e.languages.CompletionItemKind.Variable,detail:"Mapped custom attributes (output bag)"},{label:"user",kind:e.languages.CompletionItemKind.Variable,detail:"Current user (read-only view)"},{label:"provider",kind:e.languages.CompletionItemKind.Variable,detail:"IdentityProvider info"},{label:"realm",kind:e.languages.CompletionItemKind.Variable,detail:"Realm info"},{label:"session",kind:e.languages.CompletionItemKind.Variable,detail:"Session metadata"}]}exports.registerCelLite=v;
|
|
2
|
+
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../src/celLiteMonaco.ts"],"sourcesContent":["import type * as Monaco from \"monaco-editor\";\n\nexport type CelLiteFunctionSig = {\n name: string;\n detail?: string; // short signature string\n documentation?: string; // longer docs\n params?: string[]; // param names (for signature help)\n};\n\nexport type CelLiteSymbol = {\n label: string;\n kind?: Monaco.languages.CompletionItemKind;\n detail?: string;\n documentation?: string;\n};\n\nexport type RegisterCelLiteOptions = {\n languageId?: string; // default \"cel-lite\"\n functions?: CelLiteFunctionSig[];\n symbols?: CelLiteSymbol[];\n};\n\nconst DEFAULT_FUNCS: CelLiteFunctionSig[] = [\n {\n name: \"has\",\n detail: \"has(x) -> bool\",\n documentation: \"True if x is not null/undefined (arrays: length > 0).\",\n params: [\"x\"]\n },\n {name: \"exists\", detail: \"exists(x) -> bool\", documentation: \"Alias for has(x).\", params: [\"x\"]},\n {\n name: \"size\",\n detail: \"size(x) -> number\",\n documentation: \"Length of array/string; key count of object; else 0.\",\n params: [\"x\"]\n },\n {\n name: \"first\",\n detail: \"first(x) -> any\",\n documentation: \"First element of array; otherwise returns x.\",\n params: [\"x\"]\n },\n\n {name: \"lower\", detail: \"lower(s) -> string\", documentation: \"Lowercase string.\", params: [\"s\"]},\n {name: \"upper\", detail: \"upper(s) -> string\", documentation: \"Uppercase string.\", params: [\"s\"]},\n {name: \"trim\", detail: \"trim(s) -> string\", documentation: \"Trim whitespace.\", params: [\"s\"]},\n\n {\n name: \"contains\",\n detail: \"contains(haystack, needle) -> bool\",\n documentation: \"Array membership or substring match.\",\n params: [\"haystack\", \"needle\"]\n },\n {\n name: \"containsAny\",\n detail: \"containsAny(arr, values) -> bool\",\n documentation: \"True if any value in values is in arr.\",\n params: [\"arr\", \"values\"]\n },\n\n {\n name: \"startsWith\",\n detail: \"startsWith(s, prefix) -> bool\",\n documentation: \"String prefix check.\",\n params: [\"s\", \"prefix\"]\n },\n {\n name: \"endsWith\",\n detail: \"endsWith(s, suffix) -> bool\",\n documentation: \"String suffix check.\",\n params: [\"s\", \"suffix\"]\n },\n {\n name: \"matches\",\n detail: \"matches(s, regex) -> bool\",\n documentation: \"Regex test (JS RegExp).\",\n params: [\"s\", \"regex\"]\n },\n {\n name: \"regexReplace\",\n detail: \"regexReplace(s, regex, repl) -> string\",\n documentation: \"Regex replace (global).\",\n params: [\"s\", \"regex\", \"repl\"]\n },\n\n {\n name: \"coalesce\",\n detail: \"coalesce(a, b, ...) -> any\",\n documentation: \"First non-null/defined/non-empty array value.\",\n params: [\"a\", \"b\", \"...\"]\n },\n {\n name: \"join\",\n detail: \"join(arr, sep) -> string\",\n documentation: \"Join array items into string.\",\n params: [\"arr\", \"sep\"]\n },\n {\n name: \"split\",\n detail: \"split(s, sep) -> string[]\",\n documentation: \"Split string into array.\",\n params: [\"s\", \"sep\"]\n },\n];\n\nconst KEYWORDS = [\"true\", \"false\", \"null\", \"in\"];\n\nexport function registerCelLite(monaco: typeof import(\"monaco-editor\"), opts: RegisterCelLiteOptions = {}) {\n\n const disposables: Monaco.IDisposable[] = [];\n\n const languageId = opts.languageId ?? \"cel-lite\";\n const functions = opts.functions ?? DEFAULT_FUNCS;\n const symbols = opts.symbols ?? defaultSymbols(monaco);\n\n // 1) Register language\n monaco.languages.register({id: languageId});\n\n // 2) Tokenizer (Monarch)\n disposables.push(monaco.languages.setMonarchTokensProvider(languageId, {\n keywords: KEYWORDS,\n functions: functions.map((f) => f.name),\n\n tokenizer: {\n root: [\n // whitespace\n {include: \"@whitespace\"},\n\n // identifiers + keywords + functions\n [/[a-zA-Z_][\\w]*/, {\n cases: {\n \"@keywords\": \"keyword\",\n \"@functions\": \"function\",\n \"@default\": \"identifier\",\n },\n }],\n\n // numbers\n [/-?\\d+(\\.\\d+)?/, \"number\"],\n\n // strings\n [/'([^'\\\\]|\\\\.)*'/, \"string\"],\n [/\"([^\"\\\\]|\\\\.)*\"/, \"string\"],\n\n // operators\n [/(\\&\\&)|(\\|\\|)|==|!=|<=|>=|<|>|\\+|\\!|\\?|\\:/, \"operator\"],\n\n // brackets / punctuation\n [/[()[\\]{}]/, \"@brackets\"],\n [/[,\\.]/, \"delimiter\"],\n\n // anything else\n [/./, \"invalid\"],\n ],\n\n whitespace: [\n [/[ \\t\\r\\n]+/, \"white\"],\n [/\\/\\/.*$/, \"comment\"],\n [/\\/\\*/, \"comment\", \"@comment\"],\n ],\n\n comment: [\n [/[^\\/*]+/, \"comment\"],\n [/\\*\\//, \"comment\", \"@pop\"],\n [/[\\/*]/, \"comment\"],\n ],\n },\n }));\n\n // 3) Language configuration (brackets, comments, auto-close)\n disposables.push(monaco.languages.setLanguageConfiguration(languageId, {\n comments: {\n lineComment: \"//\",\n blockComment: [\"/*\", \"*/\"],\n },\n brackets: [\n [\"(\", \")\"],\n [\"[\", \"]\"],\n [\"{\", \"}\"],\n ],\n autoClosingPairs: [\n {open: \"(\", close: \")\"},\n {open: \"[\", close: \"]\"},\n {open: \"{\", close: \"}\"},\n {open: \"'\", close: \"'\"},\n {open: '\"', close: '\"'},\n ],\n surroundingPairs: [\n {open: \"(\", close: \")\"},\n {open: \"[\", close: \"]\"},\n {open: \"{\", close: \"}\"},\n {open: \"'\", close: \"'\"},\n {open: '\"', close: '\"'},\n ],\n }));\n\n // 4) Completions\n disposables.push(monaco.languages.registerCompletionItemProvider(languageId, {\n triggerCharacters: [\".\", \"(\", \"[\", \"'\", '\"'],\n provideCompletionItems(model, position) {\n const word = model.getWordUntilPosition(position);\n const range: Monaco.IRange = {\n startLineNumber: position.lineNumber,\n endLineNumber: position.lineNumber,\n startColumn: word.startColumn,\n endColumn: word.endColumn,\n };\n\n const items: Monaco.languages.CompletionItem[] = [];\n\n // Keywords\n for (const kw of KEYWORDS) {\n items.push({\n label: kw,\n kind: monaco.languages.CompletionItemKind.Keyword,\n insertText: kw,\n range,\n });\n }\n\n // Functions: insert as snippet \"fn($1)\"\n for (const fn of functions) {\n items.push({\n label: fn.name,\n kind: monaco.languages.CompletionItemKind.Function,\n detail: fn.detail,\n documentation: fn.documentation,\n insertText: fn.params?.length\n ? `${fn.name}(${fn.params.map((_, i) => `\\${${i + 1}}`).join(\", \")})`\n : `${fn.name}($1)`,\n insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,\n range,\n });\n }\n\n // Symbols (context variables)\n for (const s of symbols) {\n items.push({\n label: s.label,\n kind: s.kind ?? monaco.languages.CompletionItemKind.Variable,\n detail: s.detail,\n documentation: s.documentation,\n insertText: s.label,\n range,\n });\n }\n\n return {suggestions: items};\n },\n }));\n\n // 5) Hover (functions)\n disposables.push(monaco.languages.registerHoverProvider(languageId, {\n provideHover(model, position) {\n const word = model.getWordAtPosition(position);\n if (!word) return null;\n\n const fn = functions.find((f) => f.name === word.word);\n if (!fn) return null;\n\n return {\n range: new monaco.Range(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn),\n contents: [\n {value: `**${fn.name}**`},\n fn.detail ? {value: `\\`${fn.detail}\\``} : {value: \"\"},\n fn.documentation ? {value: fn.documentation} : {value: \"\"},\n ].filter((c) => c.value && c.value.trim().length > 0),\n };\n },\n }));\n\n // 6) Signature help (basic): shows params when inside fn(...)\n disposables.push(monaco.languages.registerSignatureHelpProvider(languageId, {\n signatureHelpTriggerCharacters: [\"(\", \",\"],\n provideSignatureHelp(model, position) {\n const line = model.getLineContent(position.lineNumber).slice(0, position.column - 1);\n\n // naive parse: find last \"ident(\" before cursor\n const m = /([a-zA-Z_]\\w*)\\s*\\(([^()]*)$/.exec(line);\n if (!m) return {\n value: {signatures: [], activeSignature: 0, activeParameter: 0}, dispose: () => {\n }\n };\n\n const fnName = m[1];\n const argsSoFar = m[2] ?? \"\";\n const activeParam = argsSoFar.length === 0 ? 0 : argsSoFar.split(\",\").length - 1;\n\n const fn = functions.find((f) => f.name === fnName);\n if (!fn) return {\n value: {signatures: [], activeSignature: 0, activeParameter: 0}, dispose: () => {\n }\n };\n\n const params = (fn.params ?? [\"x\"]).map((p) => ({label: p}));\n\n return {\n value: {\n signatures: [\n {\n label: fn.detail ?? `${fn.name}(...)`,\n documentation: fn.documentation ? {value: fn.documentation} : undefined,\n parameters: params,\n },\n ],\n activeSignature: 0,\n activeParameter: Math.max(0, Math.min(activeParam, params.length - 1)),\n },\n dispose: () => {\n },\n };\n },\n }));\n\n return {\n languageId,\n dispose: () => disposables.forEach(d => d.dispose())\n };\n}\n\nfunction defaultSymbols(monaco: typeof import(\"monaco-editor\")): CelLiteSymbol[] {\n return [\n {label: \"saml\", kind: monaco.languages.CompletionItemKind.Module, detail: \"SAML context root\"},\n {\n label: \"saml.attributes\",\n kind: monaco.languages.CompletionItemKind.Property,\n detail: \"Map of SAML attribute -> string[]\"\n },\n\n {label: \"oidc\", kind: monaco.languages.CompletionItemKind.Module, detail: \"OIDC context root\"},\n {label: \"oidc.claims\", kind: monaco.languages.CompletionItemKind.Property, detail: \"OIDC claims map\"},\n\n {label: \"claim\", kind: monaco.languages.CompletionItemKind.Variable, detail: \"Mapped claims (output bag)\"},\n {\n label: \"attr\",\n kind: monaco.languages.CompletionItemKind.Variable,\n detail: \"Mapped custom attributes (output bag)\"\n },\n\n {label: \"user\", kind: monaco.languages.CompletionItemKind.Variable, detail: \"Current user (read-only view)\"},\n {label: \"provider\", kind: monaco.languages.CompletionItemKind.Variable, detail: \"IdentityProvider info\"},\n {label: \"realm\", kind: monaco.languages.CompletionItemKind.Variable, detail: \"Realm info\"},\n {label: \"session\", kind: monaco.languages.CompletionItemKind.Variable, detail: \"Session metadata\"},\n ];\n}\n"],"names":["DEFAULT_FUNCS","KEYWORDS","registerCelLite","monaco","opts","disposables","languageId","functions","symbols","defaultSymbols","f","model","position","word","range","items","kw","fn","_","i","s","c","line","m","fnName","argsSoFar","activeParam","params","p","d"],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
package/dist/index.es.js
ADDED
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
const h = [
|
|
2
|
+
{
|
|
3
|
+
name: "has",
|
|
4
|
+
detail: "has(x) -> bool",
|
|
5
|
+
documentation: "True if x is not null/undefined (arrays: length > 0).",
|
|
6
|
+
params: ["x"]
|
|
7
|
+
},
|
|
8
|
+
{ name: "exists", detail: "exists(x) -> bool", documentation: "Alias for has(x).", params: ["x"] },
|
|
9
|
+
{
|
|
10
|
+
name: "size",
|
|
11
|
+
detail: "size(x) -> number",
|
|
12
|
+
documentation: "Length of array/string; key count of object; else 0.",
|
|
13
|
+
params: ["x"]
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
name: "first",
|
|
17
|
+
detail: "first(x) -> any",
|
|
18
|
+
documentation: "First element of array; otherwise returns x.",
|
|
19
|
+
params: ["x"]
|
|
20
|
+
},
|
|
21
|
+
{ name: "lower", detail: "lower(s) -> string", documentation: "Lowercase string.", params: ["s"] },
|
|
22
|
+
{ name: "upper", detail: "upper(s) -> string", documentation: "Uppercase string.", params: ["s"] },
|
|
23
|
+
{ name: "trim", detail: "trim(s) -> string", documentation: "Trim whitespace.", params: ["s"] },
|
|
24
|
+
{
|
|
25
|
+
name: "contains",
|
|
26
|
+
detail: "contains(haystack, needle) -> bool",
|
|
27
|
+
documentation: "Array membership or substring match.",
|
|
28
|
+
params: ["haystack", "needle"]
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: "containsAny",
|
|
32
|
+
detail: "containsAny(arr, values) -> bool",
|
|
33
|
+
documentation: "True if any value in values is in arr.",
|
|
34
|
+
params: ["arr", "values"]
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: "startsWith",
|
|
38
|
+
detail: "startsWith(s, prefix) -> bool",
|
|
39
|
+
documentation: "String prefix check.",
|
|
40
|
+
params: ["s", "prefix"]
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: "endsWith",
|
|
44
|
+
detail: "endsWith(s, suffix) -> bool",
|
|
45
|
+
documentation: "String suffix check.",
|
|
46
|
+
params: ["s", "suffix"]
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: "matches",
|
|
50
|
+
detail: "matches(s, regex) -> bool",
|
|
51
|
+
documentation: "Regex test (JS RegExp).",
|
|
52
|
+
params: ["s", "regex"]
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: "regexReplace",
|
|
56
|
+
detail: "regexReplace(s, regex, repl) -> string",
|
|
57
|
+
documentation: "Regex replace (global).",
|
|
58
|
+
params: ["s", "regex", "repl"]
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: "coalesce",
|
|
62
|
+
detail: "coalesce(a, b, ...) -> any",
|
|
63
|
+
documentation: "First non-null/defined/non-empty array value.",
|
|
64
|
+
params: ["a", "b", "..."]
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: "join",
|
|
68
|
+
detail: "join(arr, sep) -> string",
|
|
69
|
+
documentation: "Join array items into string.",
|
|
70
|
+
params: ["arr", "sep"]
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
name: "split",
|
|
74
|
+
detail: "split(s, sep) -> string[]",
|
|
75
|
+
documentation: "Split string into array.",
|
|
76
|
+
params: ["s", "sep"]
|
|
77
|
+
}
|
|
78
|
+
], b = ["true", "false", "null", "in"];
|
|
79
|
+
function v(e, d = {}) {
|
|
80
|
+
const m = [], o = d.languageId ?? "cel-lite", u = d.functions ?? h, f = d.symbols ?? x(e);
|
|
81
|
+
return e.languages.register({ id: o }), m.push(e.languages.setMonarchTokensProvider(o, {
|
|
82
|
+
keywords: b,
|
|
83
|
+
functions: u.map((s) => s.name),
|
|
84
|
+
tokenizer: {
|
|
85
|
+
root: [
|
|
86
|
+
// whitespace
|
|
87
|
+
{ include: "@whitespace" },
|
|
88
|
+
// identifiers + keywords + functions
|
|
89
|
+
[/[a-zA-Z_][\w]*/, {
|
|
90
|
+
cases: {
|
|
91
|
+
"@keywords": "keyword",
|
|
92
|
+
"@functions": "function",
|
|
93
|
+
"@default": "identifier"
|
|
94
|
+
}
|
|
95
|
+
}],
|
|
96
|
+
// numbers
|
|
97
|
+
[/-?\d+(\.\d+)?/, "number"],
|
|
98
|
+
// strings
|
|
99
|
+
[/'([^'\\]|\\.)*'/, "string"],
|
|
100
|
+
[/"([^"\\]|\\.)*"/, "string"],
|
|
101
|
+
// operators
|
|
102
|
+
[/(\&\&)|(\|\|)|==|!=|<=|>=|<|>|\+|\!|\?|\:/, "operator"],
|
|
103
|
+
// brackets / punctuation
|
|
104
|
+
[/[()[\]{}]/, "@brackets"],
|
|
105
|
+
[/[,\.]/, "delimiter"],
|
|
106
|
+
// anything else
|
|
107
|
+
[/./, "invalid"]
|
|
108
|
+
],
|
|
109
|
+
whitespace: [
|
|
110
|
+
[/[ \t\r\n]+/, "white"],
|
|
111
|
+
[/\/\/.*$/, "comment"],
|
|
112
|
+
[/\/\*/, "comment", "@comment"]
|
|
113
|
+
],
|
|
114
|
+
comment: [
|
|
115
|
+
[/[^\/*]+/, "comment"],
|
|
116
|
+
[/\*\//, "comment", "@pop"],
|
|
117
|
+
[/[\/*]/, "comment"]
|
|
118
|
+
]
|
|
119
|
+
}
|
|
120
|
+
})), m.push(e.languages.setLanguageConfiguration(o, {
|
|
121
|
+
comments: {
|
|
122
|
+
lineComment: "//",
|
|
123
|
+
blockComment: ["/*", "*/"]
|
|
124
|
+
},
|
|
125
|
+
brackets: [
|
|
126
|
+
["(", ")"],
|
|
127
|
+
["[", "]"],
|
|
128
|
+
["{", "}"]
|
|
129
|
+
],
|
|
130
|
+
autoClosingPairs: [
|
|
131
|
+
{ open: "(", close: ")" },
|
|
132
|
+
{ open: "[", close: "]" },
|
|
133
|
+
{ open: "{", close: "}" },
|
|
134
|
+
{ open: "'", close: "'" },
|
|
135
|
+
{ open: '"', close: '"' }
|
|
136
|
+
],
|
|
137
|
+
surroundingPairs: [
|
|
138
|
+
{ open: "(", close: ")" },
|
|
139
|
+
{ open: "[", close: "]" },
|
|
140
|
+
{ open: "{", close: "}" },
|
|
141
|
+
{ open: "'", close: "'" },
|
|
142
|
+
{ open: '"', close: '"' }
|
|
143
|
+
]
|
|
144
|
+
})), m.push(e.languages.registerCompletionItemProvider(o, {
|
|
145
|
+
triggerCharacters: [".", "(", "[", "'", '"'],
|
|
146
|
+
provideCompletionItems(s, i) {
|
|
147
|
+
const r = s.getWordUntilPosition(i), a = {
|
|
148
|
+
startLineNumber: i.lineNumber,
|
|
149
|
+
endLineNumber: i.lineNumber,
|
|
150
|
+
startColumn: r.startColumn,
|
|
151
|
+
endColumn: r.endColumn
|
|
152
|
+
}, n = [];
|
|
153
|
+
for (const t of b)
|
|
154
|
+
n.push({
|
|
155
|
+
label: t,
|
|
156
|
+
kind: e.languages.CompletionItemKind.Keyword,
|
|
157
|
+
insertText: t,
|
|
158
|
+
range: a
|
|
159
|
+
});
|
|
160
|
+
for (const t of u)
|
|
161
|
+
n.push({
|
|
162
|
+
label: t.name,
|
|
163
|
+
kind: e.languages.CompletionItemKind.Function,
|
|
164
|
+
detail: t.detail,
|
|
165
|
+
documentation: t.documentation,
|
|
166
|
+
insertText: t.params?.length ? `${t.name}(${t.params.map((c, l) => `\${${l + 1}}`).join(", ")})` : `${t.name}($1)`,
|
|
167
|
+
insertTextRules: e.languages.CompletionItemInsertTextRule.InsertAsSnippet,
|
|
168
|
+
range: a
|
|
169
|
+
});
|
|
170
|
+
for (const t of f)
|
|
171
|
+
n.push({
|
|
172
|
+
label: t.label,
|
|
173
|
+
kind: t.kind ?? e.languages.CompletionItemKind.Variable,
|
|
174
|
+
detail: t.detail,
|
|
175
|
+
documentation: t.documentation,
|
|
176
|
+
insertText: t.label,
|
|
177
|
+
range: a
|
|
178
|
+
});
|
|
179
|
+
return { suggestions: n };
|
|
180
|
+
}
|
|
181
|
+
})), m.push(e.languages.registerHoverProvider(o, {
|
|
182
|
+
provideHover(s, i) {
|
|
183
|
+
const r = s.getWordAtPosition(i);
|
|
184
|
+
if (!r) return null;
|
|
185
|
+
const a = u.find((n) => n.name === r.word);
|
|
186
|
+
return a ? {
|
|
187
|
+
range: new e.Range(i.lineNumber, r.startColumn, i.lineNumber, r.endColumn),
|
|
188
|
+
contents: [
|
|
189
|
+
{ value: `**${a.name}**` },
|
|
190
|
+
a.detail ? { value: `\`${a.detail}\`` } : { value: "" },
|
|
191
|
+
a.documentation ? { value: a.documentation } : { value: "" }
|
|
192
|
+
].filter((n) => n.value && n.value.trim().length > 0)
|
|
193
|
+
} : null;
|
|
194
|
+
}
|
|
195
|
+
})), m.push(e.languages.registerSignatureHelpProvider(o, {
|
|
196
|
+
signatureHelpTriggerCharacters: ["(", ","],
|
|
197
|
+
provideSignatureHelp(s, i) {
|
|
198
|
+
const r = s.getLineContent(i.lineNumber).slice(0, i.column - 1), a = /([a-zA-Z_]\w*)\s*\(([^()]*)$/.exec(r);
|
|
199
|
+
if (!a) return {
|
|
200
|
+
value: { signatures: [], activeSignature: 0, activeParameter: 0 },
|
|
201
|
+
dispose: () => {
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
const n = a[1], t = a[2] ?? "", c = t.length === 0 ? 0 : t.split(",").length - 1, l = u.find((g) => g.name === n);
|
|
205
|
+
if (!l) return {
|
|
206
|
+
value: { signatures: [], activeSignature: 0, activeParameter: 0 },
|
|
207
|
+
dispose: () => {
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
const p = (l.params ?? ["x"]).map((g) => ({ label: g }));
|
|
211
|
+
return {
|
|
212
|
+
value: {
|
|
213
|
+
signatures: [
|
|
214
|
+
{
|
|
215
|
+
label: l.detail ?? `${l.name}(...)`,
|
|
216
|
+
documentation: l.documentation ? { value: l.documentation } : void 0,
|
|
217
|
+
parameters: p
|
|
218
|
+
}
|
|
219
|
+
],
|
|
220
|
+
activeSignature: 0,
|
|
221
|
+
activeParameter: Math.max(0, Math.min(c, p.length - 1))
|
|
222
|
+
},
|
|
223
|
+
dispose: () => {
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
})), {
|
|
228
|
+
languageId: o,
|
|
229
|
+
dispose: () => m.forEach((s) => s.dispose())
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
function x(e) {
|
|
233
|
+
return [
|
|
234
|
+
{ label: "saml", kind: e.languages.CompletionItemKind.Module, detail: "SAML context root" },
|
|
235
|
+
{
|
|
236
|
+
label: "saml.attributes",
|
|
237
|
+
kind: e.languages.CompletionItemKind.Property,
|
|
238
|
+
detail: "Map of SAML attribute -> string[]"
|
|
239
|
+
},
|
|
240
|
+
{ label: "oidc", kind: e.languages.CompletionItemKind.Module, detail: "OIDC context root" },
|
|
241
|
+
{ label: "oidc.claims", kind: e.languages.CompletionItemKind.Property, detail: "OIDC claims map" },
|
|
242
|
+
{ label: "claim", kind: e.languages.CompletionItemKind.Variable, detail: "Mapped claims (output bag)" },
|
|
243
|
+
{
|
|
244
|
+
label: "attr",
|
|
245
|
+
kind: e.languages.CompletionItemKind.Variable,
|
|
246
|
+
detail: "Mapped custom attributes (output bag)"
|
|
247
|
+
},
|
|
248
|
+
{ label: "user", kind: e.languages.CompletionItemKind.Variable, detail: "Current user (read-only view)" },
|
|
249
|
+
{ label: "provider", kind: e.languages.CompletionItemKind.Variable, detail: "IdentityProvider info" },
|
|
250
|
+
{ label: "realm", kind: e.languages.CompletionItemKind.Variable, detail: "Realm info" },
|
|
251
|
+
{ label: "session", kind: e.languages.CompletionItemKind.Variable, detail: "Session metadata" }
|
|
252
|
+
];
|
|
253
|
+
}
|
|
254
|
+
export {
|
|
255
|
+
v as registerCelLite
|
|
256
|
+
};
|
|
257
|
+
//# sourceMappingURL=index.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../src/celLiteMonaco.ts"],"sourcesContent":["import type * as Monaco from \"monaco-editor\";\n\nexport type CelLiteFunctionSig = {\n name: string;\n detail?: string; // short signature string\n documentation?: string; // longer docs\n params?: string[]; // param names (for signature help)\n};\n\nexport type CelLiteSymbol = {\n label: string;\n kind?: Monaco.languages.CompletionItemKind;\n detail?: string;\n documentation?: string;\n};\n\nexport type RegisterCelLiteOptions = {\n languageId?: string; // default \"cel-lite\"\n functions?: CelLiteFunctionSig[];\n symbols?: CelLiteSymbol[];\n};\n\nconst DEFAULT_FUNCS: CelLiteFunctionSig[] = [\n {\n name: \"has\",\n detail: \"has(x) -> bool\",\n documentation: \"True if x is not null/undefined (arrays: length > 0).\",\n params: [\"x\"]\n },\n {name: \"exists\", detail: \"exists(x) -> bool\", documentation: \"Alias for has(x).\", params: [\"x\"]},\n {\n name: \"size\",\n detail: \"size(x) -> number\",\n documentation: \"Length of array/string; key count of object; else 0.\",\n params: [\"x\"]\n },\n {\n name: \"first\",\n detail: \"first(x) -> any\",\n documentation: \"First element of array; otherwise returns x.\",\n params: [\"x\"]\n },\n\n {name: \"lower\", detail: \"lower(s) -> string\", documentation: \"Lowercase string.\", params: [\"s\"]},\n {name: \"upper\", detail: \"upper(s) -> string\", documentation: \"Uppercase string.\", params: [\"s\"]},\n {name: \"trim\", detail: \"trim(s) -> string\", documentation: \"Trim whitespace.\", params: [\"s\"]},\n\n {\n name: \"contains\",\n detail: \"contains(haystack, needle) -> bool\",\n documentation: \"Array membership or substring match.\",\n params: [\"haystack\", \"needle\"]\n },\n {\n name: \"containsAny\",\n detail: \"containsAny(arr, values) -> bool\",\n documentation: \"True if any value in values is in arr.\",\n params: [\"arr\", \"values\"]\n },\n\n {\n name: \"startsWith\",\n detail: \"startsWith(s, prefix) -> bool\",\n documentation: \"String prefix check.\",\n params: [\"s\", \"prefix\"]\n },\n {\n name: \"endsWith\",\n detail: \"endsWith(s, suffix) -> bool\",\n documentation: \"String suffix check.\",\n params: [\"s\", \"suffix\"]\n },\n {\n name: \"matches\",\n detail: \"matches(s, regex) -> bool\",\n documentation: \"Regex test (JS RegExp).\",\n params: [\"s\", \"regex\"]\n },\n {\n name: \"regexReplace\",\n detail: \"regexReplace(s, regex, repl) -> string\",\n documentation: \"Regex replace (global).\",\n params: [\"s\", \"regex\", \"repl\"]\n },\n\n {\n name: \"coalesce\",\n detail: \"coalesce(a, b, ...) -> any\",\n documentation: \"First non-null/defined/non-empty array value.\",\n params: [\"a\", \"b\", \"...\"]\n },\n {\n name: \"join\",\n detail: \"join(arr, sep) -> string\",\n documentation: \"Join array items into string.\",\n params: [\"arr\", \"sep\"]\n },\n {\n name: \"split\",\n detail: \"split(s, sep) -> string[]\",\n documentation: \"Split string into array.\",\n params: [\"s\", \"sep\"]\n },\n];\n\nconst KEYWORDS = [\"true\", \"false\", \"null\", \"in\"];\n\nexport function registerCelLite(monaco: typeof import(\"monaco-editor\"), opts: RegisterCelLiteOptions = {}) {\n\n const disposables: Monaco.IDisposable[] = [];\n\n const languageId = opts.languageId ?? \"cel-lite\";\n const functions = opts.functions ?? DEFAULT_FUNCS;\n const symbols = opts.symbols ?? defaultSymbols(monaco);\n\n // 1) Register language\n monaco.languages.register({id: languageId});\n\n // 2) Tokenizer (Monarch)\n disposables.push(monaco.languages.setMonarchTokensProvider(languageId, {\n keywords: KEYWORDS,\n functions: functions.map((f) => f.name),\n\n tokenizer: {\n root: [\n // whitespace\n {include: \"@whitespace\"},\n\n // identifiers + keywords + functions\n [/[a-zA-Z_][\\w]*/, {\n cases: {\n \"@keywords\": \"keyword\",\n \"@functions\": \"function\",\n \"@default\": \"identifier\",\n },\n }],\n\n // numbers\n [/-?\\d+(\\.\\d+)?/, \"number\"],\n\n // strings\n [/'([^'\\\\]|\\\\.)*'/, \"string\"],\n [/\"([^\"\\\\]|\\\\.)*\"/, \"string\"],\n\n // operators\n [/(\\&\\&)|(\\|\\|)|==|!=|<=|>=|<|>|\\+|\\!|\\?|\\:/, \"operator\"],\n\n // brackets / punctuation\n [/[()[\\]{}]/, \"@brackets\"],\n [/[,\\.]/, \"delimiter\"],\n\n // anything else\n [/./, \"invalid\"],\n ],\n\n whitespace: [\n [/[ \\t\\r\\n]+/, \"white\"],\n [/\\/\\/.*$/, \"comment\"],\n [/\\/\\*/, \"comment\", \"@comment\"],\n ],\n\n comment: [\n [/[^\\/*]+/, \"comment\"],\n [/\\*\\//, \"comment\", \"@pop\"],\n [/[\\/*]/, \"comment\"],\n ],\n },\n }));\n\n // 3) Language configuration (brackets, comments, auto-close)\n disposables.push(monaco.languages.setLanguageConfiguration(languageId, {\n comments: {\n lineComment: \"//\",\n blockComment: [\"/*\", \"*/\"],\n },\n brackets: [\n [\"(\", \")\"],\n [\"[\", \"]\"],\n [\"{\", \"}\"],\n ],\n autoClosingPairs: [\n {open: \"(\", close: \")\"},\n {open: \"[\", close: \"]\"},\n {open: \"{\", close: \"}\"},\n {open: \"'\", close: \"'\"},\n {open: '\"', close: '\"'},\n ],\n surroundingPairs: [\n {open: \"(\", close: \")\"},\n {open: \"[\", close: \"]\"},\n {open: \"{\", close: \"}\"},\n {open: \"'\", close: \"'\"},\n {open: '\"', close: '\"'},\n ],\n }));\n\n // 4) Completions\n disposables.push(monaco.languages.registerCompletionItemProvider(languageId, {\n triggerCharacters: [\".\", \"(\", \"[\", \"'\", '\"'],\n provideCompletionItems(model, position) {\n const word = model.getWordUntilPosition(position);\n const range: Monaco.IRange = {\n startLineNumber: position.lineNumber,\n endLineNumber: position.lineNumber,\n startColumn: word.startColumn,\n endColumn: word.endColumn,\n };\n\n const items: Monaco.languages.CompletionItem[] = [];\n\n // Keywords\n for (const kw of KEYWORDS) {\n items.push({\n label: kw,\n kind: monaco.languages.CompletionItemKind.Keyword,\n insertText: kw,\n range,\n });\n }\n\n // Functions: insert as snippet \"fn($1)\"\n for (const fn of functions) {\n items.push({\n label: fn.name,\n kind: monaco.languages.CompletionItemKind.Function,\n detail: fn.detail,\n documentation: fn.documentation,\n insertText: fn.params?.length\n ? `${fn.name}(${fn.params.map((_, i) => `\\${${i + 1}}`).join(\", \")})`\n : `${fn.name}($1)`,\n insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,\n range,\n });\n }\n\n // Symbols (context variables)\n for (const s of symbols) {\n items.push({\n label: s.label,\n kind: s.kind ?? monaco.languages.CompletionItemKind.Variable,\n detail: s.detail,\n documentation: s.documentation,\n insertText: s.label,\n range,\n });\n }\n\n return {suggestions: items};\n },\n }));\n\n // 5) Hover (functions)\n disposables.push(monaco.languages.registerHoverProvider(languageId, {\n provideHover(model, position) {\n const word = model.getWordAtPosition(position);\n if (!word) return null;\n\n const fn = functions.find((f) => f.name === word.word);\n if (!fn) return null;\n\n return {\n range: new monaco.Range(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn),\n contents: [\n {value: `**${fn.name}**`},\n fn.detail ? {value: `\\`${fn.detail}\\``} : {value: \"\"},\n fn.documentation ? {value: fn.documentation} : {value: \"\"},\n ].filter((c) => c.value && c.value.trim().length > 0),\n };\n },\n }));\n\n // 6) Signature help (basic): shows params when inside fn(...)\n disposables.push(monaco.languages.registerSignatureHelpProvider(languageId, {\n signatureHelpTriggerCharacters: [\"(\", \",\"],\n provideSignatureHelp(model, position) {\n const line = model.getLineContent(position.lineNumber).slice(0, position.column - 1);\n\n // naive parse: find last \"ident(\" before cursor\n const m = /([a-zA-Z_]\\w*)\\s*\\(([^()]*)$/.exec(line);\n if (!m) return {\n value: {signatures: [], activeSignature: 0, activeParameter: 0}, dispose: () => {\n }\n };\n\n const fnName = m[1];\n const argsSoFar = m[2] ?? \"\";\n const activeParam = argsSoFar.length === 0 ? 0 : argsSoFar.split(\",\").length - 1;\n\n const fn = functions.find((f) => f.name === fnName);\n if (!fn) return {\n value: {signatures: [], activeSignature: 0, activeParameter: 0}, dispose: () => {\n }\n };\n\n const params = (fn.params ?? [\"x\"]).map((p) => ({label: p}));\n\n return {\n value: {\n signatures: [\n {\n label: fn.detail ?? `${fn.name}(...)`,\n documentation: fn.documentation ? {value: fn.documentation} : undefined,\n parameters: params,\n },\n ],\n activeSignature: 0,\n activeParameter: Math.max(0, Math.min(activeParam, params.length - 1)),\n },\n dispose: () => {\n },\n };\n },\n }));\n\n return {\n languageId,\n dispose: () => disposables.forEach(d => d.dispose())\n };\n}\n\nfunction defaultSymbols(monaco: typeof import(\"monaco-editor\")): CelLiteSymbol[] {\n return [\n {label: \"saml\", kind: monaco.languages.CompletionItemKind.Module, detail: \"SAML context root\"},\n {\n label: \"saml.attributes\",\n kind: monaco.languages.CompletionItemKind.Property,\n detail: \"Map of SAML attribute -> string[]\"\n },\n\n {label: \"oidc\", kind: monaco.languages.CompletionItemKind.Module, detail: \"OIDC context root\"},\n {label: \"oidc.claims\", kind: monaco.languages.CompletionItemKind.Property, detail: \"OIDC claims map\"},\n\n {label: \"claim\", kind: monaco.languages.CompletionItemKind.Variable, detail: \"Mapped claims (output bag)\"},\n {\n label: \"attr\",\n kind: monaco.languages.CompletionItemKind.Variable,\n detail: \"Mapped custom attributes (output bag)\"\n },\n\n {label: \"user\", kind: monaco.languages.CompletionItemKind.Variable, detail: \"Current user (read-only view)\"},\n {label: \"provider\", kind: monaco.languages.CompletionItemKind.Variable, detail: \"IdentityProvider info\"},\n {label: \"realm\", kind: monaco.languages.CompletionItemKind.Variable, detail: \"Realm info\"},\n {label: \"session\", kind: monaco.languages.CompletionItemKind.Variable, detail: \"Session metadata\"},\n ];\n}\n"],"names":["DEFAULT_FUNCS","KEYWORDS","registerCelLite","monaco","opts","disposables","languageId","functions","symbols","defaultSymbols","f","model","position","word","range","items","kw","fn","_","i","s","c","line","m","fnName","argsSoFar","activeParam","params","p","d"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@sourceregistry/monaco-cel-lite",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Monaco Editor language + IntelliSense for CEL-lite.",
|
|
5
|
+
"main": "./dist/index.cjs.js",
|
|
6
|
+
"module": "./dist/index.es.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.es.js",
|
|
12
|
+
"require": "./dist/index.cjs.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist"
|
|
17
|
+
],
|
|
18
|
+
"type": "module",
|
|
19
|
+
"publishConfig": {
|
|
20
|
+
"access": "public"
|
|
21
|
+
},
|
|
22
|
+
"peerDependencies": {
|
|
23
|
+
"monaco-editor": "^0.52.0"
|
|
24
|
+
},
|
|
25
|
+
"scripts": {
|
|
26
|
+
"build": "tsc && vite build",
|
|
27
|
+
"lint": "tsc --noEmit"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@semantic-release/changelog": "^6.0.3",
|
|
31
|
+
"@semantic-release/commit-analyzer": "^13.0.1",
|
|
32
|
+
"@semantic-release/git": "^10.0.1",
|
|
33
|
+
"@semantic-release/npm": "^13.1.3",
|
|
34
|
+
"@semantic-release/release-notes-generator": "^14.0.3",
|
|
35
|
+
"typescript": "^5.9.3",
|
|
36
|
+
"vite": "^7.1.12",
|
|
37
|
+
"vite-plugin-dts": "^4.5.4"
|
|
38
|
+
},
|
|
39
|
+
"release": {
|
|
40
|
+
"branches": [
|
|
41
|
+
"main"
|
|
42
|
+
],
|
|
43
|
+
"tagFormat": "@sourceregistry/monaco-cel-lite-v${version}",
|
|
44
|
+
"plugins": [
|
|
45
|
+
"@semantic-release/commit-analyzer",
|
|
46
|
+
"@semantic-release/release-notes-generator",
|
|
47
|
+
"@semantic-release/changelog",
|
|
48
|
+
"@semantic-release/npm",
|
|
49
|
+
[
|
|
50
|
+
"@semantic-release/git",
|
|
51
|
+
{
|
|
52
|
+
"assets": [
|
|
53
|
+
"package.json",
|
|
54
|
+
"CHANGELOG.md"
|
|
55
|
+
],
|
|
56
|
+
"message": "monaco-cel-lite(release): 🚀 v${nextRelease.version}\n\n${nextRelease.notes}"
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
}
|