feat(editor): Introduce proxy completions to expressions (#5075)

*  Introduce proxy completions to expressions

* 🧪 Add tests

*  Replace snippet with alphabetic char completions

*  Tighten `DateTime` check

* 🧹 Clean up `n8nLang`

* 🔥 Remove duplicate

* 👕 Remove non-null assertion

*  Confirm that `overlay` is needed

* 🔥 Remove comment

* 🔥 Remove more unneeded code

* 🔥 Remove unneded Pinia setup

*  Simplify syntax
This commit is contained in:
Iván Ovejero
2023-01-06 10:07:36 +01:00
committed by GitHub
parent 77031a2950
commit f4140d011f
30 changed files with 1391 additions and 520 deletions

View File

@@ -325,6 +325,153 @@ export class I18nClass {
},
};
}
rootVars: Record<string, string | undefined> = {
$binary: this.baseText('codeNodeEditor.completer.binary'),
$execution: this.baseText('codeNodeEditor.completer.$execution'),
$input: this.baseText('codeNodeEditor.completer.$input'),
'$jmespath()': this.baseText('codeNodeEditor.completer.$jmespath'),
$json: this.baseText('codeNodeEditor.completer.json'),
$itemIndex: this.baseText('codeNodeEditor.completer.$itemIndex'),
$now: this.baseText('codeNodeEditor.completer.$now'),
$prevNode: this.baseText('codeNodeEditor.completer.$prevNode'),
$runIndex: this.baseText('codeNodeEditor.completer.$runIndex'),
$today: this.baseText('codeNodeEditor.completer.$today'),
$workflow: this.baseText('codeNodeEditor.completer.$workflow'),
};
proxyVars: Record<string, string | undefined> = {
'$input.all': this.baseText('codeNodeEditor.completer.$input.all'),
'$input.first': this.baseText('codeNodeEditor.completer.$input.first'),
'$input.item': this.baseText('codeNodeEditor.completer.$input.item'),
'$input.last': this.baseText('codeNodeEditor.completer.$input.last'),
'$().all': this.baseText('codeNodeEditor.completer.selector.all'),
'$().context': this.baseText('codeNodeEditor.completer.selector.context'),
'$().first': this.baseText('codeNodeEditor.completer.selector.first'),
'$().item': this.baseText('codeNodeEditor.completer.selector.item'),
'$().itemMatching': this.baseText('codeNodeEditor.completer.selector.itemMatching'),
'$().last': this.baseText('codeNodeEditor.completer.selector.last'),
'$().params': this.baseText('codeNodeEditor.completer.selector.params'),
'$prevNode.name': this.baseText('codeNodeEditor.completer.$prevNode.name'),
'$prevNode.outputIndex': this.baseText('codeNodeEditor.completer.$prevNode.outputIndex'),
'$prevNode.runIndex': this.baseText('codeNodeEditor.completer.$prevNode.runIndex'),
'$execution.id': this.baseText('codeNodeEditor.completer.$workflow.id'),
'$execution.mode': this.baseText('codeNodeEditor.completer.$execution.mode'),
'$execution.resumeUrl': this.baseText('codeNodeEditor.completer.$execution.resumeUrl'),
'$workflow.active': this.baseText('codeNodeEditor.completer.$workflow.active'),
'$workflow.id': this.baseText('codeNodeEditor.completer.$workflow.id'),
'$workflow.name': this.baseText('codeNodeEditor.completer.$workflow.name'),
};
luxonInstance: Record<string, string | undefined> = {
// getters
isValid: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.isValid'),
invalidReason: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.invalidReason'),
invalidExplanation: this.baseText(
'codeNodeEditor.completer.luxon.instanceMethods.invalidExplanation',
),
locale: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.locale'),
numberingSystem: this.baseText(
'codeNodeEditor.completer.luxon.instanceMethods.numberingSystem',
),
outputCalendar: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.outputCalendar'),
zone: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.zone'),
zoneName: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.zoneName'),
year: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.year'),
quarter: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.quarter'),
month: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.month'),
day: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.day'),
hour: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.hour'),
minute: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.minute'),
second: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.second'),
millisecond: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.millisecond'),
weekYear: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.weekYear'),
weekNumber: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.weekNumber'),
weekday: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.weekday'),
ordinal: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.ordinal'),
monthShort: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.monthShort'),
monthLong: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.monthLong'),
weekdayShort: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.weekdayShort'),
weekdayLong: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.weekdayLong'),
offset: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.offset'),
offsetNumber: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.offsetNumber'),
offsetNameShort: this.baseText(
'codeNodeEditor.completer.luxon.instanceMethods.offsetNameShort',
),
offsetNameLong: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.offsetNameLong'),
isOffsetFixed: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.isOffsetFixed'),
isInDST: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.isInDST'),
isInLeapYear: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.isInLeapYear'),
daysInMonth: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.daysInMonth'),
daysInYear: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.daysInYear'),
weeksInWeekYear: this.baseText(
'codeNodeEditor.completer.luxon.instanceMethods.weeksInWeekYear',
),
// methods
toUTC: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.toUTC'),
toLocal: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.toLocal'),
setZone: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.setZone'),
setLocale: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.setLocale'),
set: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.set'),
plus: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.plus'),
minus: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.minus'),
startOf: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.startOf'),
endOf: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.endOf'),
toFormat: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.toFormat'),
toLocaleString: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.toLocaleString'),
toLocaleParts: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.toLocaleParts'),
toISO: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.toISO'),
toISODate: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.toISODate'),
toISOWeekDate: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.toISOWeekDate'),
toISOTime: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.toISOTime'),
toRFC2822: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.toRFC2822'),
toHTTP: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.toHTTP'),
toSQLDate: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.toSQLDate'),
toSQLTime: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.toSQLTime'),
toSQL: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.toSQL'),
toString: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.toString'),
valueOf: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.valueOf'),
toMillis: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.toMillis'),
toSeconds: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.toSeconds'),
toUnixInteger: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.toUnixInteger'),
toJSON: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.toJSON'),
toBSON: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.toBSON'),
toObject: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.toObject'),
toJsDate: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.toJsDate'),
diff: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.diff'),
diffNow: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.diffNow'),
until: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.until'),
hasSame: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.hasSame'),
equals: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.equals'),
toRelative: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.toRelative'),
toRelativeCalendar: this.baseText(
'codeNodeEditor.completer.luxon.instanceMethods.toRelativeCalendar',
),
min: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.min'),
max: this.baseText('codeNodeEditor.completer.luxon.instanceMethods.max'),
};
luxonStatic: Record<string, string | undefined> = {
now: this.baseText('codeNodeEditor.completer.luxon.dateTimeStaticMethods.now'),
local: this.baseText('codeNodeEditor.completer.luxon.dateTimeStaticMethods.local'),
utc: this.baseText('codeNodeEditor.completer.luxon.dateTimeStaticMethods.utc'),
fromJSDate: this.baseText('codeNodeEditor.completer.luxon.dateTimeStaticMethods.fromJSDate'),
fromMillis: this.baseText('codeNodeEditor.completer.luxon.dateTimeStaticMethods.fromMillis'),
fromSeconds: this.baseText('codeNodeEditor.completer.luxon.dateTimeStaticMethods.fromSeconds'),
fromObject: this.baseText('codeNodeEditor.completer.luxon.dateTimeStaticMethods.fromObject'),
fromISO: this.baseText('codeNodeEditor.completer.luxon.dateTimeStaticMethods.fromISO'),
fromRFC2822: this.baseText('codeNodeEditor.completer.luxon.dateTimeStaticMethods.fromRFC2822'),
fromHTTP: this.baseText('codeNodeEditor.completer.luxon.dateTimeStaticMethods.fromHTTP'),
fromFormat: this.baseText('codeNodeEditor.completer.luxon.dateTimeStaticMethods.fromFormat'),
fromSQL: this.baseText('codeNodeEditor.completer.luxon.dateTimeStaticMethods.fromSQL'),
invalid: this.baseText('codeNodeEditor.completer.luxon.dateTimeStaticMethods.invalid'),
isDateTime: this.baseText('codeNodeEditor.completer.luxon.dateTimeStaticMethods.isDateTime'),
};
}
export const i18nInstance = new VueI18n({