@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 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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"}
@@ -0,0 +1,2 @@
1
+ export type { CelLiteFunctionSig, CelLiteSymbol, RegisterCelLiteOptions, } from './celLiteMonaco';
2
+ export { registerCelLite } from './celLiteMonaco';
@@ -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
+ }