mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 18:12:04 +00:00
feat(editor): Migrate codemirror-lang-n8n-expression into this monorepo (no-changelog) (#9087)
Co-authored-by: Iván Ovejero <ivov.src@gmail.com>
This commit is contained in:
committed by
GitHub
parent
aa397b9730
commit
244520547b
26
packages/@n8n/codemirror-lang/src/expressions/README.md
Normal file
26
packages/@n8n/codemirror-lang/src/expressions/README.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# n8n Expression language support
|
||||
|
||||
## Usage
|
||||
|
||||
```js
|
||||
import { parserWithMetaData as n8nParser } from '@n8n/codemirror-lang';
|
||||
import { LanguageSupport, LRLanguage } from '@codemirror/language';
|
||||
import { parseMixed } from '@lezer/common';
|
||||
import { parser as jsParser } from '@lezer/javascript';
|
||||
|
||||
const n8nPlusJsParser = n8nParser.configure({
|
||||
wrap: parseMixed((node) => {
|
||||
if (node.type.isTop) return null;
|
||||
|
||||
return node.name === 'Resolvable'
|
||||
? { parser: jsParser, overlay: (node) => node.type.name === 'Resolvable' }
|
||||
: null;
|
||||
}),
|
||||
});
|
||||
|
||||
const n8nLanguage = LRLanguage.define({ parser: n8nPlusJsParser });
|
||||
|
||||
export function n8nExpressionLanguageSupport() {
|
||||
return new LanguageSupport(n8nLanguage);
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,21 @@
|
||||
@top Program { entity* }
|
||||
|
||||
entity { Plaintext | Resolvable }
|
||||
|
||||
@tokens {
|
||||
Plaintext { ![{] Plaintext? | "{" (@eof | ![{] Plaintext?) }
|
||||
|
||||
OpenMarker[closedBy="CloseMarker"] { "{{" }
|
||||
|
||||
CloseMarker[openedBy="OpenMarker"] { "}}" }
|
||||
|
||||
Resolvable {
|
||||
OpenMarker resolvableChar* CloseMarker
|
||||
}
|
||||
|
||||
resolvableChar { unicodeChar | "}" ![}] | "\\}}" }
|
||||
|
||||
unicodeChar { $[\u0000-\u007C] | $[\u007E-\u1FFF] | $[\u20A0-\u20CF] | $[\u{1F300}-\u{1F64F}] }
|
||||
}
|
||||
|
||||
@detectDelim
|
||||
@@ -0,0 +1,4 @@
|
||||
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
||||
export const Program = 1,
|
||||
Plaintext = 2,
|
||||
Resolvable = 3;
|
||||
18
packages/@n8n/codemirror-lang/src/expressions/grammar.ts
Normal file
18
packages/@n8n/codemirror-lang/src/expressions/grammar.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
||||
import { LRParser } from '@lezer/lr';
|
||||
|
||||
export const parser = LRParser.deserialize({
|
||||
version: 14,
|
||||
states: "nQQOPOOOOOO'#Cb'#CbOOOO'#C`'#C`QQOPOOOOOO-E6^-E6^",
|
||||
stateData: 'Y~OQPORPO~O',
|
||||
goto: 'bVPPPPWP^QRORSRTQOR',
|
||||
nodeNames: '⚠ Program Plaintext Resolvable',
|
||||
maxTerm: 6,
|
||||
skippedNodes: [0],
|
||||
repeatNodeCount: 1,
|
||||
tokenData:
|
||||
"&U~RTO#ob#o#p!h#p;'Sb;'S;=`!]<%lOb~gTQ~O#ob#o#pv#p;'Sb;'S;=`!]<%lOb~yUO#ob#p;'Sb;'S;=`!]<%l~b~Ob~~!c~!`P;=`<%lb~!hOQ~~!kVO#ob#o#p#Q#p;'Sb;'S;=`!]<%l~b~Ob~~!c~#TWO#O#Q#O#P#m#P#q#Q#q#r%Z#r$IS#Q$Lj$Ml#Q;(b;(c%x;(c;(d&O~#pWO#O#Q#O#P#m#P#q#Q#q#r$Y#r$IS#Q$Lj$Ml#Q;(b;(c%x;(c;(d&O~$]TO#q#Q#q#r$l#r;'S#Q;'S;=`%r<%lO#Q~$qWR~O#O#Q#O#P#m#P#q#Q#q#r%Z#r$IS#Q$Lj$Ml#Q;(b;(c%x;(c;(d&O~%^TO#q#Q#q#r%m#r;'S#Q;'S;=`%r<%lO#Q~%rOR~~%uP;=`<%l#Q~%{P;NQ<%l#Q~&RP;=`;JY#Q",
|
||||
tokenizers: [0],
|
||||
topRules: { Program: [0, 1] },
|
||||
tokenPrec: 0,
|
||||
});
|
||||
28
packages/@n8n/codemirror-lang/src/expressions/index.ts
Normal file
28
packages/@n8n/codemirror-lang/src/expressions/index.ts
Normal file
@@ -0,0 +1,28 @@
|
||||
import { LRLanguage, LanguageSupport, foldNodeProp, foldInside } from '@codemirror/language';
|
||||
import { styleTags, tags as t } from '@lezer/highlight';
|
||||
import { parser } from './grammar';
|
||||
|
||||
export const parserWithMetaData = parser.configure({
|
||||
props: [
|
||||
foldNodeProp.add({
|
||||
Application: foldInside,
|
||||
}),
|
||||
styleTags({
|
||||
OpenMarker: t.brace,
|
||||
CloseMarker: t.brace,
|
||||
Plaintext: t.content,
|
||||
Resolvable: t.string,
|
||||
}),
|
||||
],
|
||||
});
|
||||
|
||||
export const n8nLanguage = LRLanguage.define({
|
||||
parser: parserWithMetaData,
|
||||
languageData: {
|
||||
commentTokens: { line: ';' },
|
||||
},
|
||||
});
|
||||
|
||||
export function n8nExpression() {
|
||||
return new LanguageSupport(n8nLanguage);
|
||||
}
|
||||
1
packages/@n8n/codemirror-lang/src/index.ts
Normal file
1
packages/@n8n/codemirror-lang/src/index.ts
Normal file
@@ -0,0 +1 @@
|
||||
export { parserWithMetaData, n8nLanguage } from './expressions';
|
||||
Reference in New Issue
Block a user