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:
कारतोफ्फेलस्क्रिप्ट™
2024-05-10 18:49:22 +02:00
committed by GitHub
parent aa397b9730
commit 244520547b
19 changed files with 499 additions and 43 deletions

View 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);
}
```

View File

@@ -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

View File

@@ -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;

View 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,
});

View 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);
}

View File

@@ -0,0 +1 @@
export { parserWithMetaData, n8nLanguage } from './expressions';