mogh_ui 0.6.0 → 0.6.1
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/dist/auth/login/index.cjs +8 -0
- package/dist/auth/login/index.cjs.map +1 -1
- package/dist/auth/login/index.js +10 -2
- package/dist/auth/login/index.js.map +1 -1
- package/dist/components/monaco/syntax/yaml.cjs +0 -13
- package/dist/components/monaco/syntax/yaml.cjs.map +1 -1
- package/dist/components/monaco/syntax/yaml.js +0 -13
- package/dist/components/monaco/syntax/yaml.js.map +1 -1
- package/package.json +1 -1
|
@@ -54,6 +54,14 @@ function LoginPage({
|
|
|
54
54
|
);
|
|
55
55
|
const [totpIsPending, setTotpPending] = (0, import_react2.useState)(_totpIsPending ?? false);
|
|
56
56
|
const secondFactorPending = passkeyIsPending || totpIsPending;
|
|
57
|
+
(0, import_react2.useEffect)(() => {
|
|
58
|
+
if (options?.oidc_auto_redirect && options?.oidc && !secondFactorPending) {
|
|
59
|
+
const params = new URLSearchParams(location.search);
|
|
60
|
+
if (!params.has("disableAutoLogin")) {
|
|
61
|
+
(0, import__.authClient)().externalLogin(MoghAuth.Types.ExternalLoginProvider.Oidc);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}, [options?.oidc_auto_redirect, options?.oidc, secondFactorPending]);
|
|
57
65
|
const maybeNavigate = location.pathname.startsWith("/login") ? () => location.replace(
|
|
58
66
|
new URLSearchParams(location.search).get("backto") ?? "/"
|
|
59
67
|
) : void 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/auth/login/index.tsx"],"sourcesContent":["import {\n Button,\n Center,\n Fieldset,\n Group,\n Loader,\n PasswordInput,\n Text,\n TextInput,\n} from \"@mantine/core\";\nimport { useForm } from \"@mantine/form\";\nimport { notifications } from \"@mantine/notifications\";\nimport * as MoghAuth from \"mogh_auth_client\";\nimport { AlertTriangle, KeyRound } from \"lucide-react\";\nimport { useState } from \"react\";\nimport LoginHeader from \"./header\";\nimport { sanitizeQuery, useLogin, useLoginOptions } from \"../..\";\n\nexport interface LoginBrandingProps {\n appName: string;\n iconLink: string;\n iconLinkAlt: string;\n}\n\nexport function LoginPage({\n passkeyIsPending: _passkeyIsPending,\n totpIsPending: _totpIsPending,\n onLogin,\n exampleConfigLink,\n ...branding\n}: {\n passkeyIsPending?: boolean;\n totpIsPending?: boolean;\n onLogin?: () => void;\n exampleConfigLink: string;\n} & LoginBrandingProps) {\n const options = useLoginOptions().data;\n const [passkeyIsPending, setPasskeyPending] = useState(\n _passkeyIsPending ?? false,\n );\n const [totpIsPending, setTotpPending] = useState(_totpIsPending ?? false);\n const secondFactorPending = passkeyIsPending || totpIsPending;\n\n // If signing in another user, need to redirect away from /login manually\n const maybeNavigate = location.pathname.startsWith(\"/login\")\n ? () =>\n location.replace(\n new URLSearchParams(location.search).get(\"backto\") ?? \"/\",\n )\n : undefined;\n\n const onSuccess = ({ jwt }: MoghAuth.Types.JwtResponse) => {\n MoghAuth.LOGIN_TOKENS.add_and_change(jwt);\n onLogin?.();\n maybeNavigate?.();\n };\n\n const secondFactorOnSuccess = (res: MoghAuth.Types.JwtResponse) => {\n sanitizeQuery();\n onSuccess(res);\n };\n\n const { mutate: signup, isPending: signupPending } = useLogin(\n \"SignUpLocalUser\",\n {\n onSuccess,\n },\n );\n\n const { mutate: completePasskeyLogin } = useLogin(\"CompletePasskeyLogin\", {\n onSuccess: secondFactorOnSuccess,\n });\n\n const { mutate: completeTotpLogin, isPending: totpPending } = useLogin(\n \"CompleteTotpLogin\",\n {\n onSuccess: secondFactorOnSuccess,\n },\n );\n\n const { mutate: login, isPending: loginPending } = useLogin(\n \"LoginLocalUser\",\n {\n onSuccess: ({ type, data }) => {\n switch (type) {\n case \"Jwt\":\n return onSuccess(data);\n case \"Passkey\":\n setPasskeyPending(true);\n return navigator.credentials\n .get(MoghAuth.Passkey.prepareRequestChallengeResponse(data))\n .then((credential) => completePasskeyLogin({ credential }))\n .catch((e) => {\n console.error(e);\n notifications.show({\n title: \"Failed to select passkey\",\n message: \"See console for details\",\n color: \"red\",\n });\n });\n case \"Totp\":\n return setTotpPending(true);\n }\n },\n },\n );\n\n const noAuthConfigured =\n options !== undefined &&\n Object.values(options).every((value) => value === false);\n\n const showSignUp = options !== undefined && !options.registration_disabled;\n\n const localForm = useForm({\n mode: \"uncontrolled\",\n initialValues: {\n username: \"\",\n password: \"\",\n },\n validate: {\n username: (username) =>\n username.length ? null : \"Username cannot be empty\",\n password: (password) =>\n password.length ? null : \"Password cannot be empty\",\n },\n });\n\n const totpForm = useForm({\n mode: \"uncontrolled\",\n initialValues: {\n code: \"\",\n },\n validate: {\n code: (code) => (code.length === 6 ? null : \"Code should be 6 digits\"),\n },\n });\n\n return (\n <Center h=\"80vh\">\n <Fieldset\n legend={\n <LoginHeader\n secondFactorPending={secondFactorPending}\n {...branding}\n />\n }\n component=\"form\"\n onSubmit={\n totpIsPending\n ? totpForm.onSubmit((form) => completeTotpLogin(form))\n : (localForm.onSubmit((form) => login(form)) as any)\n }\n style={{ display: \"flex\", flexDirection: \"column\", gap: \"1rem\" }}\n miw={{ base: \"95vw\", xs: \"530px\" }}\n maw=\"95vw\"\n >\n {options?.local && !secondFactorPending && (\n <>\n <TextInput\n {...localForm.getInputProps(\"username\")}\n autoFocus\n label=\"Username\"\n placeholder=\"Enter username\"\n autoComplete=\"username\"\n autoCapitalize=\"off\"\n autoCorrect=\"off\"\n key={localForm.key(\"username\")}\n />\n <PasswordInput\n {...localForm.getInputProps(\"password\")}\n label=\"Password\"\n placeholder=\"Enter password\"\n autoComplete=\"password\"\n autoCapitalize=\"off\"\n autoCorrect=\"off\"\n key={localForm.key(\"password\")}\n />\n <Group mt=\"sm\" justify=\"end\">\n {showSignUp && (\n <Button\n variant=\"outline\"\n w={110}\n onClick={localForm.onSubmit((form) => signup(form)) as any}\n loading={signupPending}\n >\n Sign Up\n </Button>\n )}\n <Button w={110} type=\"submit\" loading={loginPending}>\n Log In\n </Button>\n </Group>\n </>\n )}\n\n {passkeyIsPending && (\n <Group justify=\"center\" my=\"lg\">\n <KeyRound size=\"1.5rem\" />\n <Text size=\"lg\">Provide your passkey to finish login...</Text>\n <Loader />\n </Group>\n )}\n\n {totpIsPending && (\n <>\n <TextInput\n {...totpForm.getInputProps(\"code\")}\n label={\n <Group gap=\"sm\">\n <KeyRound size=\"1rem\" />\n 2FA Code\n </Group>\n }\n autoComplete=\"code\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n autoFocus\n />\n <Group justify=\"end\">\n <Button\n w={110}\n variant=\"filled\"\n type=\"submit\"\n loading={totpPending}\n >\n Log In\n </Button>\n </Group>\n </>\n )}\n\n {noAuthConfigured && (\n <Group my=\"lg\">\n <AlertTriangle size=\"2rem\" />\n <Text>\n No login methods have been configured. <br />\n See the{\" \"}\n <a\n href={exampleConfigLink}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"hover-underline\"\n >\n <b>example config</b>\n </a>{\" \"}\n for information on configuring auth.\n </Text>\n </Group>\n )}\n </Fieldset>\n </Center>\n );\n}\n"],"mappings":"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","names":["import_react","LoginHeader"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/auth/login/index.tsx"],"sourcesContent":["import {\n Button,\n Center,\n Fieldset,\n Group,\n Loader,\n PasswordInput,\n Text,\n TextInput,\n} from \"@mantine/core\";\nimport { useForm } from \"@mantine/form\";\nimport { notifications } from \"@mantine/notifications\";\nimport * as MoghAuth from \"mogh_auth_client\";\nimport { AlertTriangle, KeyRound } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\nimport LoginHeader from \"./header\";\nimport { authClient, sanitizeQuery, useLogin, useLoginOptions } from \"../..\";\n\nexport interface LoginBrandingProps {\n appName: string;\n iconLink: string;\n iconLinkAlt: string;\n}\n\nexport function LoginPage({\n passkeyIsPending: _passkeyIsPending,\n totpIsPending: _totpIsPending,\n onLogin,\n exampleConfigLink,\n ...branding\n}: {\n passkeyIsPending?: boolean;\n totpIsPending?: boolean;\n onLogin?: () => void;\n exampleConfigLink: string;\n} & LoginBrandingProps) {\n const options = useLoginOptions().data;\n const [passkeyIsPending, setPasskeyPending] = useState(\n _passkeyIsPending ?? false,\n );\n const [totpIsPending, setTotpPending] = useState(_totpIsPending ?? false);\n const secondFactorPending = passkeyIsPending || totpIsPending;\n\n // Auto-redirect to OIDC provider if configured and disableAutoLogin is not set\n useEffect(() => {\n if (options?.oidc_auto_redirect && options?.oidc && !secondFactorPending) {\n const params = new URLSearchParams(location.search);\n if (!params.has(\"disableAutoLogin\")) {\n authClient().externalLogin(MoghAuth.Types.ExternalLoginProvider.Oidc);\n }\n }\n }, [options?.oidc_auto_redirect, options?.oidc, secondFactorPending]);\n\n // If signing in another user, need to redirect away from /login manually\n const maybeNavigate = location.pathname.startsWith(\"/login\")\n ? () =>\n location.replace(\n new URLSearchParams(location.search).get(\"backto\") ?? \"/\",\n )\n : undefined;\n\n const onSuccess = ({ jwt }: MoghAuth.Types.JwtResponse) => {\n MoghAuth.LOGIN_TOKENS.add_and_change(jwt);\n onLogin?.();\n maybeNavigate?.();\n };\n\n const secondFactorOnSuccess = (res: MoghAuth.Types.JwtResponse) => {\n sanitizeQuery();\n onSuccess(res);\n };\n\n const { mutate: signup, isPending: signupPending } = useLogin(\n \"SignUpLocalUser\",\n {\n onSuccess,\n },\n );\n\n const { mutate: completePasskeyLogin } = useLogin(\"CompletePasskeyLogin\", {\n onSuccess: secondFactorOnSuccess,\n });\n\n const { mutate: completeTotpLogin, isPending: totpPending } = useLogin(\n \"CompleteTotpLogin\",\n {\n onSuccess: secondFactorOnSuccess,\n },\n );\n\n const { mutate: login, isPending: loginPending } = useLogin(\n \"LoginLocalUser\",\n {\n onSuccess: ({ type, data }) => {\n switch (type) {\n case \"Jwt\":\n return onSuccess(data);\n case \"Passkey\":\n setPasskeyPending(true);\n return navigator.credentials\n .get(MoghAuth.Passkey.prepareRequestChallengeResponse(data))\n .then((credential) => completePasskeyLogin({ credential }))\n .catch((e) => {\n console.error(e);\n notifications.show({\n title: \"Failed to select passkey\",\n message: \"See console for details\",\n color: \"red\",\n });\n });\n case \"Totp\":\n return setTotpPending(true);\n }\n },\n },\n );\n\n const noAuthConfigured =\n options !== undefined &&\n Object.values(options).every((value) => value === false);\n\n const showSignUp = options !== undefined && !options.registration_disabled;\n\n const localForm = useForm({\n mode: \"uncontrolled\",\n initialValues: {\n username: \"\",\n password: \"\",\n },\n validate: {\n username: (username) =>\n username.length ? null : \"Username cannot be empty\",\n password: (password) =>\n password.length ? null : \"Password cannot be empty\",\n },\n });\n\n const totpForm = useForm({\n mode: \"uncontrolled\",\n initialValues: {\n code: \"\",\n },\n validate: {\n code: (code) => (code.length === 6 ? null : \"Code should be 6 digits\"),\n },\n });\n\n return (\n <Center h=\"80vh\">\n <Fieldset\n legend={\n <LoginHeader\n secondFactorPending={secondFactorPending}\n {...branding}\n />\n }\n component=\"form\"\n onSubmit={\n totpIsPending\n ? totpForm.onSubmit((form) => completeTotpLogin(form))\n : (localForm.onSubmit((form) => login(form)) as any)\n }\n style={{ display: \"flex\", flexDirection: \"column\", gap: \"1rem\" }}\n miw={{ base: \"95vw\", xs: \"530px\" }}\n maw=\"95vw\"\n >\n {options?.local && !secondFactorPending && (\n <>\n <TextInput\n {...localForm.getInputProps(\"username\")}\n autoFocus\n label=\"Username\"\n placeholder=\"Enter username\"\n autoComplete=\"username\"\n autoCapitalize=\"off\"\n autoCorrect=\"off\"\n key={localForm.key(\"username\")}\n />\n <PasswordInput\n {...localForm.getInputProps(\"password\")}\n label=\"Password\"\n placeholder=\"Enter password\"\n autoComplete=\"password\"\n autoCapitalize=\"off\"\n autoCorrect=\"off\"\n key={localForm.key(\"password\")}\n />\n <Group mt=\"sm\" justify=\"end\">\n {showSignUp && (\n <Button\n variant=\"outline\"\n w={110}\n onClick={localForm.onSubmit((form) => signup(form)) as any}\n loading={signupPending}\n >\n Sign Up\n </Button>\n )}\n <Button w={110} type=\"submit\" loading={loginPending}>\n Log In\n </Button>\n </Group>\n </>\n )}\n\n {passkeyIsPending && (\n <Group justify=\"center\" my=\"lg\">\n <KeyRound size=\"1.5rem\" />\n <Text size=\"lg\">Provide your passkey to finish login...</Text>\n <Loader />\n </Group>\n )}\n\n {totpIsPending && (\n <>\n <TextInput\n {...totpForm.getInputProps(\"code\")}\n label={\n <Group gap=\"sm\">\n <KeyRound size=\"1rem\" />\n 2FA Code\n </Group>\n }\n autoComplete=\"code\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n autoFocus\n />\n <Group justify=\"end\">\n <Button\n w={110}\n variant=\"filled\"\n type=\"submit\"\n loading={totpPending}\n >\n Log In\n </Button>\n </Group>\n </>\n )}\n\n {noAuthConfigured && (\n <Group my=\"lg\">\n <AlertTriangle size=\"2rem\" />\n <Text>\n No login methods have been configured. <br />\n See the{\" \"}\n <a\n href={exampleConfigLink}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"hover-underline\"\n >\n <b>example config</b>\n </a>{\" \"}\n for information on configuring auth.\n </Text>\n </Group>\n )}\n </Fieldset>\n </Center>\n );\n}\n"],"mappings":"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","names":["import_react","LoginHeader"]}
|
package/dist/auth/login/index.js
CHANGED
|
@@ -14,9 +14,9 @@ import { useForm } from "@mantine/form";
|
|
|
14
14
|
import { notifications } from "@mantine/notifications";
|
|
15
15
|
import * as MoghAuth from "mogh_auth_client";
|
|
16
16
|
import { AlertTriangle, KeyRound } from "lucide-react";
|
|
17
|
-
import { useState } from "react";
|
|
17
|
+
import { useEffect, useState } from "react";
|
|
18
18
|
import LoginHeader from "./header";
|
|
19
|
-
import { sanitizeQuery, useLogin, useLoginOptions } from "../..";
|
|
19
|
+
import { authClient, sanitizeQuery, useLogin, useLoginOptions } from "../..";
|
|
20
20
|
function LoginPage({
|
|
21
21
|
passkeyIsPending: _passkeyIsPending,
|
|
22
22
|
totpIsPending: _totpIsPending,
|
|
@@ -30,6 +30,14 @@ function LoginPage({
|
|
|
30
30
|
);
|
|
31
31
|
const [totpIsPending, setTotpPending] = useState(_totpIsPending ?? false);
|
|
32
32
|
const secondFactorPending = passkeyIsPending || totpIsPending;
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
if (options?.oidc_auto_redirect && options?.oidc && !secondFactorPending) {
|
|
35
|
+
const params = new URLSearchParams(location.search);
|
|
36
|
+
if (!params.has("disableAutoLogin")) {
|
|
37
|
+
authClient().externalLogin(MoghAuth.Types.ExternalLoginProvider.Oidc);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}, [options?.oidc_auto_redirect, options?.oidc, secondFactorPending]);
|
|
33
41
|
const maybeNavigate = location.pathname.startsWith("/login") ? () => location.replace(
|
|
34
42
|
new URLSearchParams(location.search).get("backto") ?? "/"
|
|
35
43
|
) : void 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/auth/login/index.tsx"],"sourcesContent":["import {\n Button,\n Center,\n Fieldset,\n Group,\n Loader,\n PasswordInput,\n Text,\n TextInput,\n} from \"@mantine/core\";\nimport { useForm } from \"@mantine/form\";\nimport { notifications } from \"@mantine/notifications\";\nimport * as MoghAuth from \"mogh_auth_client\";\nimport { AlertTriangle, KeyRound } from \"lucide-react\";\nimport { useState } from \"react\";\nimport LoginHeader from \"./header\";\nimport { sanitizeQuery, useLogin, useLoginOptions } from \"../..\";\n\nexport interface LoginBrandingProps {\n appName: string;\n iconLink: string;\n iconLinkAlt: string;\n}\n\nexport function LoginPage({\n passkeyIsPending: _passkeyIsPending,\n totpIsPending: _totpIsPending,\n onLogin,\n exampleConfigLink,\n ...branding\n}: {\n passkeyIsPending?: boolean;\n totpIsPending?: boolean;\n onLogin?: () => void;\n exampleConfigLink: string;\n} & LoginBrandingProps) {\n const options = useLoginOptions().data;\n const [passkeyIsPending, setPasskeyPending] = useState(\n _passkeyIsPending ?? false,\n );\n const [totpIsPending, setTotpPending] = useState(_totpIsPending ?? false);\n const secondFactorPending = passkeyIsPending || totpIsPending;\n\n // If signing in another user, need to redirect away from /login manually\n const maybeNavigate = location.pathname.startsWith(\"/login\")\n ? () =>\n location.replace(\n new URLSearchParams(location.search).get(\"backto\") ?? \"/\",\n )\n : undefined;\n\n const onSuccess = ({ jwt }: MoghAuth.Types.JwtResponse) => {\n MoghAuth.LOGIN_TOKENS.add_and_change(jwt);\n onLogin?.();\n maybeNavigate?.();\n };\n\n const secondFactorOnSuccess = (res: MoghAuth.Types.JwtResponse) => {\n sanitizeQuery();\n onSuccess(res);\n };\n\n const { mutate: signup, isPending: signupPending } = useLogin(\n \"SignUpLocalUser\",\n {\n onSuccess,\n },\n );\n\n const { mutate: completePasskeyLogin } = useLogin(\"CompletePasskeyLogin\", {\n onSuccess: secondFactorOnSuccess,\n });\n\n const { mutate: completeTotpLogin, isPending: totpPending } = useLogin(\n \"CompleteTotpLogin\",\n {\n onSuccess: secondFactorOnSuccess,\n },\n );\n\n const { mutate: login, isPending: loginPending } = useLogin(\n \"LoginLocalUser\",\n {\n onSuccess: ({ type, data }) => {\n switch (type) {\n case \"Jwt\":\n return onSuccess(data);\n case \"Passkey\":\n setPasskeyPending(true);\n return navigator.credentials\n .get(MoghAuth.Passkey.prepareRequestChallengeResponse(data))\n .then((credential) => completePasskeyLogin({ credential }))\n .catch((e) => {\n console.error(e);\n notifications.show({\n title: \"Failed to select passkey\",\n message: \"See console for details\",\n color: \"red\",\n });\n });\n case \"Totp\":\n return setTotpPending(true);\n }\n },\n },\n );\n\n const noAuthConfigured =\n options !== undefined &&\n Object.values(options).every((value) => value === false);\n\n const showSignUp = options !== undefined && !options.registration_disabled;\n\n const localForm = useForm({\n mode: \"uncontrolled\",\n initialValues: {\n username: \"\",\n password: \"\",\n },\n validate: {\n username: (username) =>\n username.length ? null : \"Username cannot be empty\",\n password: (password) =>\n password.length ? null : \"Password cannot be empty\",\n },\n });\n\n const totpForm = useForm({\n mode: \"uncontrolled\",\n initialValues: {\n code: \"\",\n },\n validate: {\n code: (code) => (code.length === 6 ? null : \"Code should be 6 digits\"),\n },\n });\n\n return (\n <Center h=\"80vh\">\n <Fieldset\n legend={\n <LoginHeader\n secondFactorPending={secondFactorPending}\n {...branding}\n />\n }\n component=\"form\"\n onSubmit={\n totpIsPending\n ? totpForm.onSubmit((form) => completeTotpLogin(form))\n : (localForm.onSubmit((form) => login(form)) as any)\n }\n style={{ display: \"flex\", flexDirection: \"column\", gap: \"1rem\" }}\n miw={{ base: \"95vw\", xs: \"530px\" }}\n maw=\"95vw\"\n >\n {options?.local && !secondFactorPending && (\n <>\n <TextInput\n {...localForm.getInputProps(\"username\")}\n autoFocus\n label=\"Username\"\n placeholder=\"Enter username\"\n autoComplete=\"username\"\n autoCapitalize=\"off\"\n autoCorrect=\"off\"\n key={localForm.key(\"username\")}\n />\n <PasswordInput\n {...localForm.getInputProps(\"password\")}\n label=\"Password\"\n placeholder=\"Enter password\"\n autoComplete=\"password\"\n autoCapitalize=\"off\"\n autoCorrect=\"off\"\n key={localForm.key(\"password\")}\n />\n <Group mt=\"sm\" justify=\"end\">\n {showSignUp && (\n <Button\n variant=\"outline\"\n w={110}\n onClick={localForm.onSubmit((form) => signup(form)) as any}\n loading={signupPending}\n >\n Sign Up\n </Button>\n )}\n <Button w={110} type=\"submit\" loading={loginPending}>\n Log In\n </Button>\n </Group>\n </>\n )}\n\n {passkeyIsPending && (\n <Group justify=\"center\" my=\"lg\">\n <KeyRound size=\"1.5rem\" />\n <Text size=\"lg\">Provide your passkey to finish login...</Text>\n <Loader />\n </Group>\n )}\n\n {totpIsPending && (\n <>\n <TextInput\n {...totpForm.getInputProps(\"code\")}\n label={\n <Group gap=\"sm\">\n <KeyRound size=\"1rem\" />\n 2FA Code\n </Group>\n }\n autoComplete=\"code\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n autoFocus\n />\n <Group justify=\"end\">\n <Button\n w={110}\n variant=\"filled\"\n type=\"submit\"\n loading={totpPending}\n >\n Log In\n </Button>\n </Group>\n </>\n )}\n\n {noAuthConfigured && (\n <Group my=\"lg\">\n <AlertTriangle size=\"2rem\" />\n <Text>\n No login methods have been configured. <br />\n See the{\" \"}\n <a\n href={exampleConfigLink}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"hover-underline\"\n >\n <b>example config</b>\n </a>{\" \"}\n for information on configuring auth.\n </Text>\n </Group>\n )}\n </Fieldset>\n </Center>\n );\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/auth/login/index.tsx"],"sourcesContent":["import {\n Button,\n Center,\n Fieldset,\n Group,\n Loader,\n PasswordInput,\n Text,\n TextInput,\n} from \"@mantine/core\";\nimport { useForm } from \"@mantine/form\";\nimport { notifications } from \"@mantine/notifications\";\nimport * as MoghAuth from \"mogh_auth_client\";\nimport { AlertTriangle, KeyRound } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\nimport LoginHeader from \"./header\";\nimport { authClient, sanitizeQuery, useLogin, useLoginOptions } from \"../..\";\n\nexport interface LoginBrandingProps {\n appName: string;\n iconLink: string;\n iconLinkAlt: string;\n}\n\nexport function LoginPage({\n passkeyIsPending: _passkeyIsPending,\n totpIsPending: _totpIsPending,\n onLogin,\n exampleConfigLink,\n ...branding\n}: {\n passkeyIsPending?: boolean;\n totpIsPending?: boolean;\n onLogin?: () => void;\n exampleConfigLink: string;\n} & LoginBrandingProps) {\n const options = useLoginOptions().data;\n const [passkeyIsPending, setPasskeyPending] = useState(\n _passkeyIsPending ?? false,\n );\n const [totpIsPending, setTotpPending] = useState(_totpIsPending ?? false);\n const secondFactorPending = passkeyIsPending || totpIsPending;\n\n // Auto-redirect to OIDC provider if configured and disableAutoLogin is not set\n useEffect(() => {\n if (options?.oidc_auto_redirect && options?.oidc && !secondFactorPending) {\n const params = new URLSearchParams(location.search);\n if (!params.has(\"disableAutoLogin\")) {\n authClient().externalLogin(MoghAuth.Types.ExternalLoginProvider.Oidc);\n }\n }\n }, [options?.oidc_auto_redirect, options?.oidc, secondFactorPending]);\n\n // If signing in another user, need to redirect away from /login manually\n const maybeNavigate = location.pathname.startsWith(\"/login\")\n ? () =>\n location.replace(\n new URLSearchParams(location.search).get(\"backto\") ?? \"/\",\n )\n : undefined;\n\n const onSuccess = ({ jwt }: MoghAuth.Types.JwtResponse) => {\n MoghAuth.LOGIN_TOKENS.add_and_change(jwt);\n onLogin?.();\n maybeNavigate?.();\n };\n\n const secondFactorOnSuccess = (res: MoghAuth.Types.JwtResponse) => {\n sanitizeQuery();\n onSuccess(res);\n };\n\n const { mutate: signup, isPending: signupPending } = useLogin(\n \"SignUpLocalUser\",\n {\n onSuccess,\n },\n );\n\n const { mutate: completePasskeyLogin } = useLogin(\"CompletePasskeyLogin\", {\n onSuccess: secondFactorOnSuccess,\n });\n\n const { mutate: completeTotpLogin, isPending: totpPending } = useLogin(\n \"CompleteTotpLogin\",\n {\n onSuccess: secondFactorOnSuccess,\n },\n );\n\n const { mutate: login, isPending: loginPending } = useLogin(\n \"LoginLocalUser\",\n {\n onSuccess: ({ type, data }) => {\n switch (type) {\n case \"Jwt\":\n return onSuccess(data);\n case \"Passkey\":\n setPasskeyPending(true);\n return navigator.credentials\n .get(MoghAuth.Passkey.prepareRequestChallengeResponse(data))\n .then((credential) => completePasskeyLogin({ credential }))\n .catch((e) => {\n console.error(e);\n notifications.show({\n title: \"Failed to select passkey\",\n message: \"See console for details\",\n color: \"red\",\n });\n });\n case \"Totp\":\n return setTotpPending(true);\n }\n },\n },\n );\n\n const noAuthConfigured =\n options !== undefined &&\n Object.values(options).every((value) => value === false);\n\n const showSignUp = options !== undefined && !options.registration_disabled;\n\n const localForm = useForm({\n mode: \"uncontrolled\",\n initialValues: {\n username: \"\",\n password: \"\",\n },\n validate: {\n username: (username) =>\n username.length ? null : \"Username cannot be empty\",\n password: (password) =>\n password.length ? null : \"Password cannot be empty\",\n },\n });\n\n const totpForm = useForm({\n mode: \"uncontrolled\",\n initialValues: {\n code: \"\",\n },\n validate: {\n code: (code) => (code.length === 6 ? null : \"Code should be 6 digits\"),\n },\n });\n\n return (\n <Center h=\"80vh\">\n <Fieldset\n legend={\n <LoginHeader\n secondFactorPending={secondFactorPending}\n {...branding}\n />\n }\n component=\"form\"\n onSubmit={\n totpIsPending\n ? totpForm.onSubmit((form) => completeTotpLogin(form))\n : (localForm.onSubmit((form) => login(form)) as any)\n }\n style={{ display: \"flex\", flexDirection: \"column\", gap: \"1rem\" }}\n miw={{ base: \"95vw\", xs: \"530px\" }}\n maw=\"95vw\"\n >\n {options?.local && !secondFactorPending && (\n <>\n <TextInput\n {...localForm.getInputProps(\"username\")}\n autoFocus\n label=\"Username\"\n placeholder=\"Enter username\"\n autoComplete=\"username\"\n autoCapitalize=\"off\"\n autoCorrect=\"off\"\n key={localForm.key(\"username\")}\n />\n <PasswordInput\n {...localForm.getInputProps(\"password\")}\n label=\"Password\"\n placeholder=\"Enter password\"\n autoComplete=\"password\"\n autoCapitalize=\"off\"\n autoCorrect=\"off\"\n key={localForm.key(\"password\")}\n />\n <Group mt=\"sm\" justify=\"end\">\n {showSignUp && (\n <Button\n variant=\"outline\"\n w={110}\n onClick={localForm.onSubmit((form) => signup(form)) as any}\n loading={signupPending}\n >\n Sign Up\n </Button>\n )}\n <Button w={110} type=\"submit\" loading={loginPending}>\n Log In\n </Button>\n </Group>\n </>\n )}\n\n {passkeyIsPending && (\n <Group justify=\"center\" my=\"lg\">\n <KeyRound size=\"1.5rem\" />\n <Text size=\"lg\">Provide your passkey to finish login...</Text>\n <Loader />\n </Group>\n )}\n\n {totpIsPending && (\n <>\n <TextInput\n {...totpForm.getInputProps(\"code\")}\n label={\n <Group gap=\"sm\">\n <KeyRound size=\"1rem\" />\n 2FA Code\n </Group>\n }\n autoComplete=\"code\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n autoFocus\n />\n <Group justify=\"end\">\n <Button\n w={110}\n variant=\"filled\"\n type=\"submit\"\n loading={totpPending}\n >\n Log In\n </Button>\n </Group>\n </>\n )}\n\n {noAuthConfigured && (\n <Group my=\"lg\">\n <AlertTriangle size=\"2rem\" />\n <Text>\n No login methods have been configured. <br />\n See the{\" \"}\n <a\n href={exampleConfigLink}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"hover-underline\"\n >\n <b>example config</b>\n </a>{\" \"}\n for information on configuring auth.\n </Text>\n </Group>\n )}\n </Fieldset>\n </Center>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -22,7 +22,6 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
22
22
|
mod
|
|
23
23
|
));
|
|
24
24
|
var monaco = __toESM(require("monaco-editor"), 1);
|
|
25
|
-
var import_monaco_yaml = require("monaco-yaml");
|
|
26
25
|
const yaml_conf = {
|
|
27
26
|
comments: {
|
|
28
27
|
lineComment: "#"
|
|
@@ -232,18 +231,6 @@ const yaml_language = {
|
|
|
232
231
|
anchor: [[/[&*][^ ]+/, "namespace"]]
|
|
233
232
|
}
|
|
234
233
|
};
|
|
235
|
-
(0, import_monaco_yaml.configureMonacoYaml)(monaco, {
|
|
236
|
-
enableSchemaRequest: true,
|
|
237
|
-
schemas: [
|
|
238
|
-
{
|
|
239
|
-
fileMatch: ["**/*compose.yml", "**/*compose.yaml"],
|
|
240
|
-
uri: new URL(
|
|
241
|
-
"/schema/compose-spec.json",
|
|
242
|
-
window.location.href
|
|
243
|
-
).toString()
|
|
244
|
-
}
|
|
245
|
-
]
|
|
246
|
-
});
|
|
247
234
|
monaco.languages.register({ id: "yaml", aliases: ["yml"] });
|
|
248
235
|
monaco.languages.setMonarchTokensProvider("yaml", yaml_language);
|
|
249
236
|
monaco.languages.setLanguageConfiguration("yaml", yaml_conf);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/monaco/syntax/yaml.ts"],"sourcesContent":["import * as monaco from \"monaco-editor\";\nimport { configureMonacoYaml } from \"monaco-yaml\";\n\n// This is the one provided by Microsoft.\n// https://github.com/microsoft/monaco-editor/blob/main/src/basic-languages/yaml/yaml.ts\nconst yaml_conf: monaco.languages.LanguageConfiguration = {\n comments: {\n lineComment: \"#\",\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 folding: {\n offSide: true,\n },\n onEnterRules: [\n {\n beforeText: /:\\s*$/,\n action: {\n indentAction: monaco.languages.IndentAction.Indent,\n },\n },\n ],\n};\n\nconst yaml_language = <monaco.languages.IMonarchLanguage>{\n tokenPostfix: \".yaml\",\n\n brackets: [\n { token: \"delimiter.bracket\", open: \"{\", close: \"}\" },\n { token: \"delimiter.square\", open: \"[\", close: \"]\" },\n ],\n\n keywords: [\n \"true\",\n \"True\",\n \"TRUE\",\n \"false\",\n \"False\",\n \"FALSE\",\n \"null\",\n \"Null\",\n \"Null\",\n \"~\",\n ],\n\n numberInteger: /(?:0|[+-]?[0-9]+)/,\n numberFloat: /(?:0|[+-]?[0-9]+)(?:\\.[0-9]+)?(?:e[-+][1-9][0-9]*)?/,\n numberOctal: /0o[0-7]+/,\n numberHex: /0x[0-9a-fA-F]+/,\n numberInfinity: /[+-]?\\.(?:inf|Inf|INF)/,\n numberNaN: /\\.(?:nan|Nan|NAN)/,\n numberDate:\n /\\d{4}-\\d\\d-\\d\\d([Tt ]\\d\\d:\\d\\d:\\d\\d(\\.\\d+)?(( ?[+-]\\d\\d?(:\\d\\d)?)|Z)?)?/,\n\n escapes: /\\\\(?:[btnfr\\\\\"']|[0-7][0-7]?|[0-3][0-7]{2})/,\n\n tokenizer: {\n root: [\n { include: \"@whitespace\" },\n { include: \"@comment\" },\n\n // Directive\n [/%[^ ]+.*$/, \"meta.directive\"],\n\n // Document Markers\n [/---/, \"operators.directivesEnd\"],\n [/\\.{3}/, \"operators.documentEnd\"],\n\n // Block Structure Indicators\n [/[-?:](?= )/, \"operators\"],\n\n { include: \"@anchor\" },\n { include: \"@tagHandle\" },\n { include: \"@flowCollections\" },\n { include: \"@blockStyle\" },\n\n // Numbers\n [/@numberInteger(?![ \\t]*\\S+)/, \"number\"],\n [/@numberFloat(?![ \\t]*\\S+)/, \"number.float\"],\n [/@numberOctal(?![ \\t]*\\S+)/, \"number.octal\"],\n [/@numberHex(?![ \\t]*\\S+)/, \"number.hex\"],\n [/@numberInfinity(?![ \\t]*\\S+)/, \"number.infinity\"],\n [/@numberNaN(?![ \\t]*\\S+)/, \"number.nan\"],\n [/@numberDate(?![ \\t]*\\S+)/, \"number.date\"],\n\n // Key:Value pair\n [\n /(\".*?\"|'.*?'|[^#'\"]*?)([ \\t]*)(:)( |$)/,\n [\"key\", \"white\", \"operators\", \"white\"],\n ],\n\n { include: \"@flowScalars\" },\n\n // String nodes\n [\n /.+?(?=(\\s+#|$))/,\n {\n cases: {\n \"@keywords\": \"keyword\",\n \"@default\": \"string\",\n },\n },\n ],\n ],\n\n // Flow Collection: Flow Mapping\n object: [\n { include: \"@whitespace\" },\n { include: \"@comment\" },\n\n // Flow Mapping termination\n [/\\}/, \"@brackets\", \"@pop\"],\n\n // Flow Mapping delimiter\n [/,/, \"delimiter.comma\"],\n\n // Flow Mapping Key:Value delimiter\n [/:(?= )/, \"operators\"],\n\n // Flow Mapping Key:Value key\n [/(?:\".*?\"|'.*?'|[^,\\{\\[]+?)(?=: )/, \"type\"],\n\n // Start Flow Style\n { include: \"@flowCollections\" },\n { include: \"@flowScalars\" },\n\n // Scalar Data types\n { include: \"@tagHandle\" },\n { include: \"@anchor\" },\n { include: \"@flowNumber\" },\n\n // Other value (keyword or string)\n [\n /[^\\},]+/,\n {\n cases: {\n \"@keywords\": \"keyword\",\n \"@default\": \"string\",\n },\n },\n ],\n ],\n\n // Flow Collection: Flow Sequence\n array: [\n { include: \"@whitespace\" },\n { include: \"@comment\" },\n\n // Flow Sequence termination\n [/\\]/, \"@brackets\", \"@pop\"],\n\n // Flow Sequence delimiter\n [/,/, \"delimiter.comma\"],\n\n // Start Flow Style\n { include: \"@flowCollections\" },\n { include: \"@flowScalars\" },\n\n // Scalar Data types\n { include: \"@tagHandle\" },\n { include: \"@anchor\" },\n { include: \"@flowNumber\" },\n\n // Other value (keyword or string)\n [\n /[^\\],]+/,\n {\n cases: {\n \"@keywords\": \"keyword\",\n \"@default\": \"string\",\n },\n },\n ],\n ],\n\n // First line of a Block Style\n multiString: [[/^( +).+$/, \"string\", \"@multiStringContinued.$1\"]],\n\n // Further lines of a Block Style\n // Workaround for indentation detection\n multiStringContinued: [\n [\n /^( *).+$/,\n {\n cases: {\n \"$1==$S2\": \"string\",\n \"@default\": { token: \"@rematch\", next: \"@popall\" },\n },\n },\n ],\n ],\n\n whitespace: [[/[ \\t\\r\\n]+/, \"white\"]],\n\n // Only line comments\n comment: [[/#.*$/, \"comment\"]],\n\n // Start Flow Collections\n flowCollections: [\n [/\\[/, \"@brackets\", \"@array\"],\n [/\\{/, \"@brackets\", \"@object\"],\n ],\n\n // Start Flow Scalars (quoted strings)\n flowScalars: [\n [/\"([^\"\\\\]|\\\\.)*$/, \"string.invalid\"],\n [/'([^'\\\\]|\\\\.)*$/, \"string.invalid\"],\n [/'[^']*'/, \"string\"],\n [/\"/, \"string\", \"@doubleQuotedString\"],\n ],\n\n doubleQuotedString: [\n [/[^\\\\\"]+/, \"string\"],\n [/@escapes/, \"string.escape\"],\n [/\\\\./, \"string.escape.invalid\"],\n [/\"/, \"string\", \"@pop\"],\n ],\n\n // Start Block Scalar\n blockStyle: [[/[>|][0-9]*[+-]?$/, \"operators\", \"@multiString\"]],\n\n // Numbers in Flow Collections (terminate with ,]})\n flowNumber: [\n [/@numberInteger(?=[ \\t]*[,\\]\\}])/, \"number\"],\n [/@numberFloat(?=[ \\t]*[,\\]\\}])/, \"number.float\"],\n [/@numberOctal(?=[ \\t]*[,\\]\\}])/, \"number.octal\"],\n [/@numberHex(?=[ \\t]*[,\\]\\}])/, \"number.hex\"],\n [/@numberInfinity(?=[ \\t]*[,\\]\\}])/, \"number.infinity\"],\n [/@numberNaN(?=[ \\t]*[,\\]\\}])/, \"number.nan\"],\n [/@numberDate(?=[ \\t]*[,\\]\\}])/, \"number.date\"],\n ],\n\n tagHandle: [[/\\![^ ]*/, \"tag\"]],\n\n anchor: [[/[&*][^ ]+/, \"namespace\"]],\n },\n};\n\nconfigureMonacoYaml(monaco, {\n enableSchemaRequest: true,\n schemas: [\n {\n fileMatch: [\"**/*compose.yml\", \"**/*compose.yaml\"],\n uri: new URL(\n \"/schema/compose-spec.json\",\n window.location.href\n ).toString(),\n },\n ],\n});\n\nmonaco.languages.register({ id: \"yaml\", aliases: [\"yml\"] });\nmonaco.languages.setMonarchTokensProvider(\"yaml\", yaml_language);\nmonaco.languages.setLanguageConfiguration(\"yaml\", yaml_conf);\n\n/// V1\n// const yaml_conf: monaco.languages.LanguageConfiguration = {\n// comments: {\n// lineComment: \"#\",\n// },\n// brackets: [\n// [\"{\", \"}\"],\n// [\"[\", \"]\"],\n// ],\n// autoClosingPairs: [\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// ],\n// indentationRules: {\n// increaseIndentPattern: /^.*(\\{[^}]*|\\[[^\\]]*)$/,\n// decreaseIndentPattern: /^\\s*[}\\]],?\\s*$/,\n// },\n// };\n\n// const yaml_language = <monaco.languages.IMonarchLanguage>{\n// defaultToken: \"\",\n// tokenPostfix: \".yaml\",\n\n// // Common regular expressions\n// escapes:\n// /\\\\(?:[abfnrtv\\\\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,\n\n// // The main tokenizer for YAML\n// tokenizer: {\n// root: [\n// { include: \"@whitespace\" },\n// { include: \"@comments\" },\n// { include: \"@keys\" },\n// { include: \"@numbers\" },\n// { include: \"@booleans\" },\n// { include: \"@strings\" },\n// { include: \"@constants\" },\n// ],\n\n// whitespace: [[/[ \\t\\r\\n]+/, \"\"]],\n\n// comments: [[/#.*$/, \"comment\"]],\n\n// keys: [[/([^\\s\\[\\]{},\"']+)(\\s*)(:)/, [\"key\", \"\", \"delimiter\"]]],\n\n// numbers: [\n// [/\\b\\d+\\.\\d*\\b/, \"number.float\"],\n// [/\\b0x[0-9a-fA-F]+\\b/, \"number.hex\"],\n// [/\\b\\d+\\b/, \"number\"],\n// ],\n\n// booleans: [[/\\b(true|false|yes|no|on|off)\\b/, \"constant.language.boolean\"]],\n\n// strings: [\n// [/\"([^\"\\\\]|\\\\.)*$/, \"string.invalid\"], // non-terminated string\n// [/'([^'\\\\]|\\\\.)*$/, \"string.invalid\"], // non-terminated string\n// [/\"/, \"string\", \"@string_double\"],\n// [/'/, \"string\", \"@string_single\"],\n// ],\n\n// string_double: [\n// [/[^\\\\\"]+/, \"string\"],\n// [/@escapes/, \"string.escape\"],\n// [/\\\\./, \"string.escape.invalid\"],\n// [/\"/, \"string\", \"@pop\"],\n// ],\n\n// string_single: [\n// [/[^\\\\']+/, \"string\"],\n// [/@escapes/, \"string.escape\"],\n// [/\\\\./, \"string.escape.invalid\"],\n// [/'/, \"string\", \"@pop\"],\n// ],\n\n// constants: [[/\\b(null|~)\\b/, \"constant.language.null\"]],\n// },\n// };\n\n// monaco.languages.register({ id: \"yaml\" });\n// monaco.languages.setMonarchTokensProvider(\"yaml\", yaml_language);\n// monaco.languages.setLanguageConfiguration(\"yaml\", yaml_conf);\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/monaco/syntax/yaml.ts"],"sourcesContent":["import * as monaco from \"monaco-editor\";\n\n// This is the one provided by Microsoft.\n// https://github.com/microsoft/monaco-editor/blob/main/src/basic-languages/yaml/yaml.ts\nconst yaml_conf: monaco.languages.LanguageConfiguration = {\n comments: {\n lineComment: \"#\",\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 folding: {\n offSide: true,\n },\n onEnterRules: [\n {\n beforeText: /:\\s*$/,\n action: {\n indentAction: monaco.languages.IndentAction.Indent,\n },\n },\n ],\n};\n\nconst yaml_language = <monaco.languages.IMonarchLanguage>{\n tokenPostfix: \".yaml\",\n\n brackets: [\n { token: \"delimiter.bracket\", open: \"{\", close: \"}\" },\n { token: \"delimiter.square\", open: \"[\", close: \"]\" },\n ],\n\n keywords: [\n \"true\",\n \"True\",\n \"TRUE\",\n \"false\",\n \"False\",\n \"FALSE\",\n \"null\",\n \"Null\",\n \"Null\",\n \"~\",\n ],\n\n numberInteger: /(?:0|[+-]?[0-9]+)/,\n numberFloat: /(?:0|[+-]?[0-9]+)(?:\\.[0-9]+)?(?:e[-+][1-9][0-9]*)?/,\n numberOctal: /0o[0-7]+/,\n numberHex: /0x[0-9a-fA-F]+/,\n numberInfinity: /[+-]?\\.(?:inf|Inf|INF)/,\n numberNaN: /\\.(?:nan|Nan|NAN)/,\n numberDate:\n /\\d{4}-\\d\\d-\\d\\d([Tt ]\\d\\d:\\d\\d:\\d\\d(\\.\\d+)?(( ?[+-]\\d\\d?(:\\d\\d)?)|Z)?)?/,\n\n escapes: /\\\\(?:[btnfr\\\\\"']|[0-7][0-7]?|[0-3][0-7]{2})/,\n\n tokenizer: {\n root: [\n { include: \"@whitespace\" },\n { include: \"@comment\" },\n\n // Directive\n [/%[^ ]+.*$/, \"meta.directive\"],\n\n // Document Markers\n [/---/, \"operators.directivesEnd\"],\n [/\\.{3}/, \"operators.documentEnd\"],\n\n // Block Structure Indicators\n [/[-?:](?= )/, \"operators\"],\n\n { include: \"@anchor\" },\n { include: \"@tagHandle\" },\n { include: \"@flowCollections\" },\n { include: \"@blockStyle\" },\n\n // Numbers\n [/@numberInteger(?![ \\t]*\\S+)/, \"number\"],\n [/@numberFloat(?![ \\t]*\\S+)/, \"number.float\"],\n [/@numberOctal(?![ \\t]*\\S+)/, \"number.octal\"],\n [/@numberHex(?![ \\t]*\\S+)/, \"number.hex\"],\n [/@numberInfinity(?![ \\t]*\\S+)/, \"number.infinity\"],\n [/@numberNaN(?![ \\t]*\\S+)/, \"number.nan\"],\n [/@numberDate(?![ \\t]*\\S+)/, \"number.date\"],\n\n // Key:Value pair\n [\n /(\".*?\"|'.*?'|[^#'\"]*?)([ \\t]*)(:)( |$)/,\n [\"key\", \"white\", \"operators\", \"white\"],\n ],\n\n { include: \"@flowScalars\" },\n\n // String nodes\n [\n /.+?(?=(\\s+#|$))/,\n {\n cases: {\n \"@keywords\": \"keyword\",\n \"@default\": \"string\",\n },\n },\n ],\n ],\n\n // Flow Collection: Flow Mapping\n object: [\n { include: \"@whitespace\" },\n { include: \"@comment\" },\n\n // Flow Mapping termination\n [/\\}/, \"@brackets\", \"@pop\"],\n\n // Flow Mapping delimiter\n [/,/, \"delimiter.comma\"],\n\n // Flow Mapping Key:Value delimiter\n [/:(?= )/, \"operators\"],\n\n // Flow Mapping Key:Value key\n [/(?:\".*?\"|'.*?'|[^,\\{\\[]+?)(?=: )/, \"type\"],\n\n // Start Flow Style\n { include: \"@flowCollections\" },\n { include: \"@flowScalars\" },\n\n // Scalar Data types\n { include: \"@tagHandle\" },\n { include: \"@anchor\" },\n { include: \"@flowNumber\" },\n\n // Other value (keyword or string)\n [\n /[^\\},]+/,\n {\n cases: {\n \"@keywords\": \"keyword\",\n \"@default\": \"string\",\n },\n },\n ],\n ],\n\n // Flow Collection: Flow Sequence\n array: [\n { include: \"@whitespace\" },\n { include: \"@comment\" },\n\n // Flow Sequence termination\n [/\\]/, \"@brackets\", \"@pop\"],\n\n // Flow Sequence delimiter\n [/,/, \"delimiter.comma\"],\n\n // Start Flow Style\n { include: \"@flowCollections\" },\n { include: \"@flowScalars\" },\n\n // Scalar Data types\n { include: \"@tagHandle\" },\n { include: \"@anchor\" },\n { include: \"@flowNumber\" },\n\n // Other value (keyword or string)\n [\n /[^\\],]+/,\n {\n cases: {\n \"@keywords\": \"keyword\",\n \"@default\": \"string\",\n },\n },\n ],\n ],\n\n // First line of a Block Style\n multiString: [[/^( +).+$/, \"string\", \"@multiStringContinued.$1\"]],\n\n // Further lines of a Block Style\n // Workaround for indentation detection\n multiStringContinued: [\n [\n /^( *).+$/,\n {\n cases: {\n \"$1==$S2\": \"string\",\n \"@default\": { token: \"@rematch\", next: \"@popall\" },\n },\n },\n ],\n ],\n\n whitespace: [[/[ \\t\\r\\n]+/, \"white\"]],\n\n // Only line comments\n comment: [[/#.*$/, \"comment\"]],\n\n // Start Flow Collections\n flowCollections: [\n [/\\[/, \"@brackets\", \"@array\"],\n [/\\{/, \"@brackets\", \"@object\"],\n ],\n\n // Start Flow Scalars (quoted strings)\n flowScalars: [\n [/\"([^\"\\\\]|\\\\.)*$/, \"string.invalid\"],\n [/'([^'\\\\]|\\\\.)*$/, \"string.invalid\"],\n [/'[^']*'/, \"string\"],\n [/\"/, \"string\", \"@doubleQuotedString\"],\n ],\n\n doubleQuotedString: [\n [/[^\\\\\"]+/, \"string\"],\n [/@escapes/, \"string.escape\"],\n [/\\\\./, \"string.escape.invalid\"],\n [/\"/, \"string\", \"@pop\"],\n ],\n\n // Start Block Scalar\n blockStyle: [[/[>|][0-9]*[+-]?$/, \"operators\", \"@multiString\"]],\n\n // Numbers in Flow Collections (terminate with ,]})\n flowNumber: [\n [/@numberInteger(?=[ \\t]*[,\\]\\}])/, \"number\"],\n [/@numberFloat(?=[ \\t]*[,\\]\\}])/, \"number.float\"],\n [/@numberOctal(?=[ \\t]*[,\\]\\}])/, \"number.octal\"],\n [/@numberHex(?=[ \\t]*[,\\]\\}])/, \"number.hex\"],\n [/@numberInfinity(?=[ \\t]*[,\\]\\}])/, \"number.infinity\"],\n [/@numberNaN(?=[ \\t]*[,\\]\\}])/, \"number.nan\"],\n [/@numberDate(?=[ \\t]*[,\\]\\}])/, \"number.date\"],\n ],\n\n tagHandle: [[/\\![^ ]*/, \"tag\"]],\n\n anchor: [[/[&*][^ ]+/, \"namespace\"]],\n },\n};\n\nmonaco.languages.register({ id: \"yaml\", aliases: [\"yml\"] });\nmonaco.languages.setMonarchTokensProvider(\"yaml\", yaml_language);\nmonaco.languages.setLanguageConfiguration(\"yaml\", yaml_conf);\n\n/// V1\n// const yaml_conf: monaco.languages.LanguageConfiguration = {\n// comments: {\n// lineComment: \"#\",\n// },\n// brackets: [\n// [\"{\", \"}\"],\n// [\"[\", \"]\"],\n// ],\n// autoClosingPairs: [\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// ],\n// indentationRules: {\n// increaseIndentPattern: /^.*(\\{[^}]*|\\[[^\\]]*)$/,\n// decreaseIndentPattern: /^\\s*[}\\]],?\\s*$/,\n// },\n// };\n\n// const yaml_language = <monaco.languages.IMonarchLanguage>{\n// defaultToken: \"\",\n// tokenPostfix: \".yaml\",\n\n// // Common regular expressions\n// escapes:\n// /\\\\(?:[abfnrtv\\\\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,\n\n// // The main tokenizer for YAML\n// tokenizer: {\n// root: [\n// { include: \"@whitespace\" },\n// { include: \"@comments\" },\n// { include: \"@keys\" },\n// { include: \"@numbers\" },\n// { include: \"@booleans\" },\n// { include: \"@strings\" },\n// { include: \"@constants\" },\n// ],\n\n// whitespace: [[/[ \\t\\r\\n]+/, \"\"]],\n\n// comments: [[/#.*$/, \"comment\"]],\n\n// keys: [[/([^\\s\\[\\]{},\"']+)(\\s*)(:)/, [\"key\", \"\", \"delimiter\"]]],\n\n// numbers: [\n// [/\\b\\d+\\.\\d*\\b/, \"number.float\"],\n// [/\\b0x[0-9a-fA-F]+\\b/, \"number.hex\"],\n// [/\\b\\d+\\b/, \"number\"],\n// ],\n\n// booleans: [[/\\b(true|false|yes|no|on|off)\\b/, \"constant.language.boolean\"]],\n\n// strings: [\n// [/\"([^\"\\\\]|\\\\.)*$/, \"string.invalid\"], // non-terminated string\n// [/'([^'\\\\]|\\\\.)*$/, \"string.invalid\"], // non-terminated string\n// [/\"/, \"string\", \"@string_double\"],\n// [/'/, \"string\", \"@string_single\"],\n// ],\n\n// string_double: [\n// [/[^\\\\\"]+/, \"string\"],\n// [/@escapes/, \"string.escape\"],\n// [/\\\\./, \"string.escape.invalid\"],\n// [/\"/, \"string\", \"@pop\"],\n// ],\n\n// string_single: [\n// [/[^\\\\']+/, \"string\"],\n// [/@escapes/, \"string.escape\"],\n// [/\\\\./, \"string.escape.invalid\"],\n// [/'/, \"string\", \"@pop\"],\n// ],\n\n// constants: [[/\\b(null|~)\\b/, \"constant.language.null\"]],\n// },\n// };\n\n// monaco.languages.register({ id: \"yaml\" });\n// monaco.languages.setMonarchTokensProvider(\"yaml\", yaml_language);\n// monaco.languages.setLanguageConfiguration(\"yaml\", yaml_conf);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,aAAwB;AAIxB,MAAM,YAAoD;AAAA,EACxD,UAAU;AAAA,IACR,aAAa;AAAA,EACf;AAAA,EACA,UAAU;AAAA,IACR,CAAC,KAAK,GAAG;AAAA,IACT,CAAC,KAAK,GAAG;AAAA,IACT,CAAC,KAAK,GAAG;AAAA,EACX;AAAA,EACA,kBAAkB;AAAA,IAChB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,IACxB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,IACxB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,IACxB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,IACxB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,EAC1B;AAAA,EACA,kBAAkB;AAAA,IAChB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,IACxB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,IACxB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,IACxB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,IACxB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,EAC1B;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,EACX;AAAA,EACA,cAAc;AAAA,IACZ;AAAA,MACE,YAAY;AAAA,MACZ,QAAQ;AAAA,QACN,cAAc,OAAO,UAAU,aAAa;AAAA,MAC9C;AAAA,IACF;AAAA,EACF;AACF;AAEA,MAAM,gBAAmD;AAAA,EACvD,cAAc;AAAA,EAEd,UAAU;AAAA,IACR,EAAE,OAAO,qBAAqB,MAAM,KAAK,OAAO,IAAI;AAAA,IACpD,EAAE,OAAO,oBAAoB,MAAM,KAAK,OAAO,IAAI;AAAA,EACrD;AAAA,EAEA,UAAU;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EAEA,eAAe;AAAA,EACf,aAAa;AAAA,EACb,aAAa;AAAA,EACb,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,YACE;AAAA,EAEF,SAAS;AAAA,EAET,WAAW;AAAA,IACT,MAAM;AAAA,MACJ,EAAE,SAAS,cAAc;AAAA,MACzB,EAAE,SAAS,WAAW;AAAA;AAAA,MAGtB,CAAC,aAAa,gBAAgB;AAAA;AAAA,MAG9B,CAAC,OAAO,yBAAyB;AAAA,MACjC,CAAC,SAAS,uBAAuB;AAAA;AAAA,MAGjC,CAAC,cAAc,WAAW;AAAA,MAE1B,EAAE,SAAS,UAAU;AAAA,MACrB,EAAE,SAAS,aAAa;AAAA,MACxB,EAAE,SAAS,mBAAmB;AAAA,MAC9B,EAAE,SAAS,cAAc;AAAA;AAAA,MAGzB,CAAC,+BAA+B,QAAQ;AAAA,MACxC,CAAC,6BAA6B,cAAc;AAAA,MAC5C,CAAC,6BAA6B,cAAc;AAAA,MAC5C,CAAC,2BAA2B,YAAY;AAAA,MACxC,CAAC,gCAAgC,iBAAiB;AAAA,MAClD,CAAC,2BAA2B,YAAY;AAAA,MACxC,CAAC,4BAA4B,aAAa;AAAA;AAAA,MAG1C;AAAA,QACE;AAAA,QACA,CAAC,OAAO,SAAS,aAAa,OAAO;AAAA,MACvC;AAAA,MAEA,EAAE,SAAS,eAAe;AAAA;AAAA,MAG1B;AAAA,QACE;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,aAAa;AAAA,YACb,YAAY;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA,IAGA,QAAQ;AAAA,MACN,EAAE,SAAS,cAAc;AAAA,MACzB,EAAE,SAAS,WAAW;AAAA;AAAA,MAGtB,CAAC,MAAM,aAAa,MAAM;AAAA;AAAA,MAG1B,CAAC,KAAK,iBAAiB;AAAA;AAAA,MAGvB,CAAC,UAAU,WAAW;AAAA;AAAA,MAGtB,CAAC,oCAAoC,MAAM;AAAA;AAAA,MAG3C,EAAE,SAAS,mBAAmB;AAAA,MAC9B,EAAE,SAAS,eAAe;AAAA;AAAA,MAG1B,EAAE,SAAS,aAAa;AAAA,MACxB,EAAE,SAAS,UAAU;AAAA,MACrB,EAAE,SAAS,cAAc;AAAA;AAAA,MAGzB;AAAA,QACE;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,aAAa;AAAA,YACb,YAAY;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA,IAGA,OAAO;AAAA,MACL,EAAE,SAAS,cAAc;AAAA,MACzB,EAAE,SAAS,WAAW;AAAA;AAAA,MAGtB,CAAC,MAAM,aAAa,MAAM;AAAA;AAAA,MAG1B,CAAC,KAAK,iBAAiB;AAAA;AAAA,MAGvB,EAAE,SAAS,mBAAmB;AAAA,MAC9B,EAAE,SAAS,eAAe;AAAA;AAAA,MAG1B,EAAE,SAAS,aAAa;AAAA,MACxB,EAAE,SAAS,UAAU;AAAA,MACrB,EAAE,SAAS,cAAc;AAAA;AAAA,MAGzB;AAAA,QACE;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,aAAa;AAAA,YACb,YAAY;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA,IAGA,aAAa,CAAC,CAAC,YAAY,UAAU,0BAA0B,CAAC;AAAA;AAAA;AAAA,IAIhE,sBAAsB;AAAA,MACpB;AAAA,QACE;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,WAAW;AAAA,YACX,YAAY,EAAE,OAAO,YAAY,MAAM,UAAU;AAAA,UACnD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAEA,YAAY,CAAC,CAAC,cAAc,OAAO,CAAC;AAAA;AAAA,IAGpC,SAAS,CAAC,CAAC,QAAQ,SAAS,CAAC;AAAA;AAAA,IAG7B,iBAAiB;AAAA,MACf,CAAC,MAAM,aAAa,QAAQ;AAAA,MAC5B,CAAC,MAAM,aAAa,SAAS;AAAA,IAC/B;AAAA;AAAA,IAGA,aAAa;AAAA,MACX,CAAC,mBAAmB,gBAAgB;AAAA,MACpC,CAAC,mBAAmB,gBAAgB;AAAA,MACpC,CAAC,WAAW,QAAQ;AAAA,MACpB,CAAC,KAAK,UAAU,qBAAqB;AAAA,IACvC;AAAA,IAEA,oBAAoB;AAAA,MAClB,CAAC,WAAW,QAAQ;AAAA,MACpB,CAAC,YAAY,eAAe;AAAA,MAC5B,CAAC,OAAO,uBAAuB;AAAA,MAC/B,CAAC,KAAK,UAAU,MAAM;AAAA,IACxB;AAAA;AAAA,IAGA,YAAY,CAAC,CAAC,oBAAoB,aAAa,cAAc,CAAC;AAAA;AAAA,IAG9D,YAAY;AAAA,MACV,CAAC,mCAAmC,QAAQ;AAAA,MAC5C,CAAC,iCAAiC,cAAc;AAAA,MAChD,CAAC,iCAAiC,cAAc;AAAA,MAChD,CAAC,+BAA+B,YAAY;AAAA,MAC5C,CAAC,oCAAoC,iBAAiB;AAAA,MACtD,CAAC,+BAA+B,YAAY;AAAA,MAC5C,CAAC,gCAAgC,aAAa;AAAA,IAChD;AAAA,IAEA,WAAW,CAAC,CAAC,WAAW,KAAK,CAAC;AAAA,IAE9B,QAAQ,CAAC,CAAC,aAAa,WAAW,CAAC;AAAA,EACrC;AACF;AAEA,OAAO,UAAU,SAAS,EAAE,IAAI,QAAQ,SAAS,CAAC,KAAK,EAAE,CAAC;AAC1D,OAAO,UAAU,yBAAyB,QAAQ,aAAa;AAC/D,OAAO,UAAU,yBAAyB,QAAQ,SAAS;","names":[]}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import * as monaco from "monaco-editor";
|
|
2
|
-
import { configureMonacoYaml } from "monaco-yaml";
|
|
3
2
|
const yaml_conf = {
|
|
4
3
|
comments: {
|
|
5
4
|
lineComment: "#"
|
|
@@ -209,18 +208,6 @@ const yaml_language = {
|
|
|
209
208
|
anchor: [[/[&*][^ ]+/, "namespace"]]
|
|
210
209
|
}
|
|
211
210
|
};
|
|
212
|
-
configureMonacoYaml(monaco, {
|
|
213
|
-
enableSchemaRequest: true,
|
|
214
|
-
schemas: [
|
|
215
|
-
{
|
|
216
|
-
fileMatch: ["**/*compose.yml", "**/*compose.yaml"],
|
|
217
|
-
uri: new URL(
|
|
218
|
-
"/schema/compose-spec.json",
|
|
219
|
-
window.location.href
|
|
220
|
-
).toString()
|
|
221
|
-
}
|
|
222
|
-
]
|
|
223
|
-
});
|
|
224
211
|
monaco.languages.register({ id: "yaml", aliases: ["yml"] });
|
|
225
212
|
monaco.languages.setMonarchTokensProvider("yaml", yaml_language);
|
|
226
213
|
monaco.languages.setLanguageConfiguration("yaml", yaml_conf);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/monaco/syntax/yaml.ts"],"sourcesContent":["import * as monaco from \"monaco-editor\";\nimport { configureMonacoYaml } from \"monaco-yaml\";\n\n// This is the one provided by Microsoft.\n// https://github.com/microsoft/monaco-editor/blob/main/src/basic-languages/yaml/yaml.ts\nconst yaml_conf: monaco.languages.LanguageConfiguration = {\n comments: {\n lineComment: \"#\",\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 folding: {\n offSide: true,\n },\n onEnterRules: [\n {\n beforeText: /:\\s*$/,\n action: {\n indentAction: monaco.languages.IndentAction.Indent,\n },\n },\n ],\n};\n\nconst yaml_language = <monaco.languages.IMonarchLanguage>{\n tokenPostfix: \".yaml\",\n\n brackets: [\n { token: \"delimiter.bracket\", open: \"{\", close: \"}\" },\n { token: \"delimiter.square\", open: \"[\", close: \"]\" },\n ],\n\n keywords: [\n \"true\",\n \"True\",\n \"TRUE\",\n \"false\",\n \"False\",\n \"FALSE\",\n \"null\",\n \"Null\",\n \"Null\",\n \"~\",\n ],\n\n numberInteger: /(?:0|[+-]?[0-9]+)/,\n numberFloat: /(?:0|[+-]?[0-9]+)(?:\\.[0-9]+)?(?:e[-+][1-9][0-9]*)?/,\n numberOctal: /0o[0-7]+/,\n numberHex: /0x[0-9a-fA-F]+/,\n numberInfinity: /[+-]?\\.(?:inf|Inf|INF)/,\n numberNaN: /\\.(?:nan|Nan|NAN)/,\n numberDate:\n /\\d{4}-\\d\\d-\\d\\d([Tt ]\\d\\d:\\d\\d:\\d\\d(\\.\\d+)?(( ?[+-]\\d\\d?(:\\d\\d)?)|Z)?)?/,\n\n escapes: /\\\\(?:[btnfr\\\\\"']|[0-7][0-7]?|[0-3][0-7]{2})/,\n\n tokenizer: {\n root: [\n { include: \"@whitespace\" },\n { include: \"@comment\" },\n\n // Directive\n [/%[^ ]+.*$/, \"meta.directive\"],\n\n // Document Markers\n [/---/, \"operators.directivesEnd\"],\n [/\\.{3}/, \"operators.documentEnd\"],\n\n // Block Structure Indicators\n [/[-?:](?= )/, \"operators\"],\n\n { include: \"@anchor\" },\n { include: \"@tagHandle\" },\n { include: \"@flowCollections\" },\n { include: \"@blockStyle\" },\n\n // Numbers\n [/@numberInteger(?![ \\t]*\\S+)/, \"number\"],\n [/@numberFloat(?![ \\t]*\\S+)/, \"number.float\"],\n [/@numberOctal(?![ \\t]*\\S+)/, \"number.octal\"],\n [/@numberHex(?![ \\t]*\\S+)/, \"number.hex\"],\n [/@numberInfinity(?![ \\t]*\\S+)/, \"number.infinity\"],\n [/@numberNaN(?![ \\t]*\\S+)/, \"number.nan\"],\n [/@numberDate(?![ \\t]*\\S+)/, \"number.date\"],\n\n // Key:Value pair\n [\n /(\".*?\"|'.*?'|[^#'\"]*?)([ \\t]*)(:)( |$)/,\n [\"key\", \"white\", \"operators\", \"white\"],\n ],\n\n { include: \"@flowScalars\" },\n\n // String nodes\n [\n /.+?(?=(\\s+#|$))/,\n {\n cases: {\n \"@keywords\": \"keyword\",\n \"@default\": \"string\",\n },\n },\n ],\n ],\n\n // Flow Collection: Flow Mapping\n object: [\n { include: \"@whitespace\" },\n { include: \"@comment\" },\n\n // Flow Mapping termination\n [/\\}/, \"@brackets\", \"@pop\"],\n\n // Flow Mapping delimiter\n [/,/, \"delimiter.comma\"],\n\n // Flow Mapping Key:Value delimiter\n [/:(?= )/, \"operators\"],\n\n // Flow Mapping Key:Value key\n [/(?:\".*?\"|'.*?'|[^,\\{\\[]+?)(?=: )/, \"type\"],\n\n // Start Flow Style\n { include: \"@flowCollections\" },\n { include: \"@flowScalars\" },\n\n // Scalar Data types\n { include: \"@tagHandle\" },\n { include: \"@anchor\" },\n { include: \"@flowNumber\" },\n\n // Other value (keyword or string)\n [\n /[^\\},]+/,\n {\n cases: {\n \"@keywords\": \"keyword\",\n \"@default\": \"string\",\n },\n },\n ],\n ],\n\n // Flow Collection: Flow Sequence\n array: [\n { include: \"@whitespace\" },\n { include: \"@comment\" },\n\n // Flow Sequence termination\n [/\\]/, \"@brackets\", \"@pop\"],\n\n // Flow Sequence delimiter\n [/,/, \"delimiter.comma\"],\n\n // Start Flow Style\n { include: \"@flowCollections\" },\n { include: \"@flowScalars\" },\n\n // Scalar Data types\n { include: \"@tagHandle\" },\n { include: \"@anchor\" },\n { include: \"@flowNumber\" },\n\n // Other value (keyword or string)\n [\n /[^\\],]+/,\n {\n cases: {\n \"@keywords\": \"keyword\",\n \"@default\": \"string\",\n },\n },\n ],\n ],\n\n // First line of a Block Style\n multiString: [[/^( +).+$/, \"string\", \"@multiStringContinued.$1\"]],\n\n // Further lines of a Block Style\n // Workaround for indentation detection\n multiStringContinued: [\n [\n /^( *).+$/,\n {\n cases: {\n \"$1==$S2\": \"string\",\n \"@default\": { token: \"@rematch\", next: \"@popall\" },\n },\n },\n ],\n ],\n\n whitespace: [[/[ \\t\\r\\n]+/, \"white\"]],\n\n // Only line comments\n comment: [[/#.*$/, \"comment\"]],\n\n // Start Flow Collections\n flowCollections: [\n [/\\[/, \"@brackets\", \"@array\"],\n [/\\{/, \"@brackets\", \"@object\"],\n ],\n\n // Start Flow Scalars (quoted strings)\n flowScalars: [\n [/\"([^\"\\\\]|\\\\.)*$/, \"string.invalid\"],\n [/'([^'\\\\]|\\\\.)*$/, \"string.invalid\"],\n [/'[^']*'/, \"string\"],\n [/\"/, \"string\", \"@doubleQuotedString\"],\n ],\n\n doubleQuotedString: [\n [/[^\\\\\"]+/, \"string\"],\n [/@escapes/, \"string.escape\"],\n [/\\\\./, \"string.escape.invalid\"],\n [/\"/, \"string\", \"@pop\"],\n ],\n\n // Start Block Scalar\n blockStyle: [[/[>|][0-9]*[+-]?$/, \"operators\", \"@multiString\"]],\n\n // Numbers in Flow Collections (terminate with ,]})\n flowNumber: [\n [/@numberInteger(?=[ \\t]*[,\\]\\}])/, \"number\"],\n [/@numberFloat(?=[ \\t]*[,\\]\\}])/, \"number.float\"],\n [/@numberOctal(?=[ \\t]*[,\\]\\}])/, \"number.octal\"],\n [/@numberHex(?=[ \\t]*[,\\]\\}])/, \"number.hex\"],\n [/@numberInfinity(?=[ \\t]*[,\\]\\}])/, \"number.infinity\"],\n [/@numberNaN(?=[ \\t]*[,\\]\\}])/, \"number.nan\"],\n [/@numberDate(?=[ \\t]*[,\\]\\}])/, \"number.date\"],\n ],\n\n tagHandle: [[/\\![^ ]*/, \"tag\"]],\n\n anchor: [[/[&*][^ ]+/, \"namespace\"]],\n },\n};\n\nconfigureMonacoYaml(monaco, {\n enableSchemaRequest: true,\n schemas: [\n {\n fileMatch: [\"**/*compose.yml\", \"**/*compose.yaml\"],\n uri: new URL(\n \"/schema/compose-spec.json\",\n window.location.href\n ).toString(),\n },\n ],\n});\n\nmonaco.languages.register({ id: \"yaml\", aliases: [\"yml\"] });\nmonaco.languages.setMonarchTokensProvider(\"yaml\", yaml_language);\nmonaco.languages.setLanguageConfiguration(\"yaml\", yaml_conf);\n\n/// V1\n// const yaml_conf: monaco.languages.LanguageConfiguration = {\n// comments: {\n// lineComment: \"#\",\n// },\n// brackets: [\n// [\"{\", \"}\"],\n// [\"[\", \"]\"],\n// ],\n// autoClosingPairs: [\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// ],\n// indentationRules: {\n// increaseIndentPattern: /^.*(\\{[^}]*|\\[[^\\]]*)$/,\n// decreaseIndentPattern: /^\\s*[}\\]],?\\s*$/,\n// },\n// };\n\n// const yaml_language = <monaco.languages.IMonarchLanguage>{\n// defaultToken: \"\",\n// tokenPostfix: \".yaml\",\n\n// // Common regular expressions\n// escapes:\n// /\\\\(?:[abfnrtv\\\\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,\n\n// // The main tokenizer for YAML\n// tokenizer: {\n// root: [\n// { include: \"@whitespace\" },\n// { include: \"@comments\" },\n// { include: \"@keys\" },\n// { include: \"@numbers\" },\n// { include: \"@booleans\" },\n// { include: \"@strings\" },\n// { include: \"@constants\" },\n// ],\n\n// whitespace: [[/[ \\t\\r\\n]+/, \"\"]],\n\n// comments: [[/#.*$/, \"comment\"]],\n\n// keys: [[/([^\\s\\[\\]{},\"']+)(\\s*)(:)/, [\"key\", \"\", \"delimiter\"]]],\n\n// numbers: [\n// [/\\b\\d+\\.\\d*\\b/, \"number.float\"],\n// [/\\b0x[0-9a-fA-F]+\\b/, \"number.hex\"],\n// [/\\b\\d+\\b/, \"number\"],\n// ],\n\n// booleans: [[/\\b(true|false|yes|no|on|off)\\b/, \"constant.language.boolean\"]],\n\n// strings: [\n// [/\"([^\"\\\\]|\\\\.)*$/, \"string.invalid\"], // non-terminated string\n// [/'([^'\\\\]|\\\\.)*$/, \"string.invalid\"], // non-terminated string\n// [/\"/, \"string\", \"@string_double\"],\n// [/'/, \"string\", \"@string_single\"],\n// ],\n\n// string_double: [\n// [/[^\\\\\"]+/, \"string\"],\n// [/@escapes/, \"string.escape\"],\n// [/\\\\./, \"string.escape.invalid\"],\n// [/\"/, \"string\", \"@pop\"],\n// ],\n\n// string_single: [\n// [/[^\\\\']+/, \"string\"],\n// [/@escapes/, \"string.escape\"],\n// [/\\\\./, \"string.escape.invalid\"],\n// [/'/, \"string\", \"@pop\"],\n// ],\n\n// constants: [[/\\b(null|~)\\b/, \"constant.language.null\"]],\n// },\n// };\n\n// monaco.languages.register({ id: \"yaml\" });\n// monaco.languages.setMonarchTokensProvider(\"yaml\", yaml_language);\n// monaco.languages.setLanguageConfiguration(\"yaml\", yaml_conf);\n"],"mappings":"AAAA,YAAY,YAAY;AACxB,SAAS,2BAA2B;AAIpC,MAAM,YAAoD;AAAA,EACxD,UAAU;AAAA,IACR,aAAa;AAAA,EACf;AAAA,EACA,UAAU;AAAA,IACR,CAAC,KAAK,GAAG;AAAA,IACT,CAAC,KAAK,GAAG;AAAA,IACT,CAAC,KAAK,GAAG;AAAA,EACX;AAAA,EACA,kBAAkB;AAAA,IAChB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,IACxB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,IACxB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,IACxB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,IACxB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,EAC1B;AAAA,EACA,kBAAkB;AAAA,IAChB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,IACxB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,IACxB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,IACxB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,IACxB,EAAE,MAAM,KAAK,OAAO,IAAI;AAAA,EAC1B;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,EACX;AAAA,EACA,cAAc;AAAA,IACZ;AAAA,MACE,YAAY;AAAA,MACZ,QAAQ;AAAA,QACN,cAAc,OAAO,UAAU,aAAa;AAAA,MAC9C;AAAA,IACF;AAAA,EACF;AACF;AAEA,MAAM,gBAAmD;AAAA,EACvD,cAAc;AAAA,EAEd,UAAU;AAAA,IACR,EAAE,OAAO,qBAAqB,MAAM,KAAK,OAAO,IAAI;AAAA,IACpD,EAAE,OAAO,oBAAoB,MAAM,KAAK,OAAO,IAAI;AAAA,EACrD;AAAA,EAEA,UAAU;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EAEA,eAAe;AAAA,EACf,aAAa;AAAA,EACb,aAAa;AAAA,EACb,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,YACE;AAAA,EAEF,SAAS;AAAA,EAET,WAAW;AAAA,IACT,MAAM;AAAA,MACJ,EAAE,SAAS,cAAc;AAAA,MACzB,EAAE,SAAS,WAAW;AAAA;AAAA,MAGtB,CAAC,aAAa,gBAAgB;AAAA;AAAA,MAG9B,CAAC,OAAO,yBAAyB;AAAA,MACjC,CAAC,SAAS,uBAAuB;AAAA;AAAA,MAGjC,CAAC,cAAc,WAAW;AAAA,MAE1B,EAAE,SAAS,UAAU;AAAA,MACrB,EAAE,SAAS,aAAa;AAAA,MACxB,EAAE,SAAS,mBAAmB;AAAA,MAC9B,EAAE,SAAS,cAAc;AAAA;AAAA,MAGzB,CAAC,+BAA+B,QAAQ;AAAA,MACxC,CAAC,6BAA6B,cAAc;AAAA,MAC5C,CAAC,6BAA6B,cAAc;AAAA,MAC5C,CAAC,2BAA2B,YAAY;AAAA,MACxC,CAAC,gCAAgC,iBAAiB;AAAA,MAClD,CAAC,2BAA2B,YAAY;AAAA,MACxC,CAAC,4BAA4B,aAAa;AAAA;AAAA,MAG1C;AAAA,QACE;AAAA,QACA,CAAC,OAAO,SAAS,aAAa,OAAO;AAAA,MACvC;AAAA,MAEA,EAAE,SAAS,eAAe;AAAA;AAAA,MAG1B;AAAA,QACE;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,aAAa;AAAA,YACb,YAAY;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA,IAGA,QAAQ;AAAA,MACN,EAAE,SAAS,cAAc;AAAA,MACzB,EAAE,SAAS,WAAW;AAAA;AAAA,MAGtB,CAAC,MAAM,aAAa,MAAM;AAAA;AAAA,MAG1B,CAAC,KAAK,iBAAiB;AAAA;AAAA,MAGvB,CAAC,UAAU,WAAW;AAAA;AAAA,MAGtB,CAAC,oCAAoC,MAAM;AAAA;AAAA,MAG3C,EAAE,SAAS,mBAAmB;AAAA,MAC9B,EAAE,SAAS,eAAe;AAAA;AAAA,MAG1B,EAAE,SAAS,aAAa;AAAA,MACxB,EAAE,SAAS,UAAU;AAAA,MACrB,EAAE,SAAS,cAAc;AAAA;AAAA,MAGzB;AAAA,QACE;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,aAAa;AAAA,YACb,YAAY;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA,IAGA,OAAO;AAAA,MACL,EAAE,SAAS,cAAc;AAAA,MACzB,EAAE,SAAS,WAAW;AAAA;AAAA,MAGtB,CAAC,MAAM,aAAa,MAAM;AAAA;AAAA,MAG1B,CAAC,KAAK,iBAAiB;AAAA;AAAA,MAGvB,EAAE,SAAS,mBAAmB;AAAA,MAC9B,EAAE,SAAS,eAAe;AAAA;AAAA,MAG1B,EAAE,SAAS,aAAa;AAAA,MACxB,EAAE,SAAS,UAAU;AAAA,MACrB,EAAE,SAAS,cAAc;AAAA;AAAA,MAGzB;AAAA,QACE;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,aAAa;AAAA,YACb,YAAY;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA,IAGA,aAAa,CAAC,CAAC,YAAY,UAAU,0BAA0B,CAAC;AAAA;AAAA;AAAA,IAIhE,sBAAsB;AAAA,MACpB;AAAA,QACE;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,WAAW;AAAA,YACX,YAAY,EAAE,OAAO,YAAY,MAAM,UAAU;AAAA,UACnD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAEA,YAAY,CAAC,CAAC,cAAc,OAAO,CAAC;AAAA;AAAA,IAGpC,SAAS,CAAC,CAAC,QAAQ,SAAS,CAAC;AAAA;AAAA,IAG7B,iBAAiB;AAAA,MACf,CAAC,MAAM,aAAa,QAAQ;AAAA,MAC5B,CAAC,MAAM,aAAa,SAAS;AAAA,IAC/B;AAAA;AAAA,IAGA,aAAa;AAAA,MACX,CAAC,mBAAmB,gBAAgB;AAAA,MACpC,CAAC,mBAAmB,gBAAgB;AAAA,MACpC,CAAC,WAAW,QAAQ;AAAA,MACpB,CAAC,KAAK,UAAU,qBAAqB;AAAA,IACvC;AAAA,IAEA,oBAAoB;AAAA,MAClB,CAAC,WAAW,QAAQ;AAAA,MACpB,CAAC,YAAY,eAAe;AAAA,MAC5B,CAAC,OAAO,uBAAuB;AAAA,MAC/B,CAAC,KAAK,UAAU,MAAM;AAAA,IACxB;AAAA;AAAA,IAGA,YAAY,CAAC,CAAC,oBAAoB,aAAa,cAAc,CAAC;AAAA;AAAA,IAG9D,YAAY;AAAA,MACV,CAAC,mCAAmC,QAAQ;AAAA,MAC5C,CAAC,iCAAiC,cAAc;AAAA,MAChD,CAAC,iCAAiC,cAAc;AAAA,MAChD,CAAC,+BAA+B,YAAY;AAAA,MAC5C,CAAC,oCAAoC,iBAAiB;AAAA,MACtD,CAAC,+BAA+B,YAAY;AAAA,MAC5C,CAAC,gCAAgC,aAAa;AAAA,IAChD;AAAA,IAEA,WAAW,CAAC,CAAC,WAAW,KAAK,CAAC;AAAA,IAE9B,QAAQ,CAAC,CAAC,aAAa,WAAW,CAAC;AAAA,EACrC;AACF;AAEA,oBAAoB,QAAQ;AAAA,EAC1B,qBAAqB;AAAA,EACrB,SAAS;AAAA,IACP;AAAA,MACE,WAAW,CAAC,mBAAmB,kBAAkB;AAAA,MACjD,KAAK,IAAI;AAAA,QACP;AAAA,QACA,OAAO,SAAS;AAAA,MAClB,EAAE,SAAS;AAAA,IACb;AAAA,EACF;AACF,CAAC;AAED,OAAO,UAAU,SAAS,EAAE,IAAI,QAAQ,SAAS,CAAC,KAAK,EAAE,CAAC;AAC1D,OAAO,UAAU,yBAAyB,QAAQ,aAAa;AAC/D,OAAO,UAAU,yBAAyB,QAAQ,SAAS;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/monaco/syntax/yaml.ts"],"sourcesContent":["import * as monaco from \"monaco-editor\";\n\n// This is the one provided by Microsoft.\n// https://github.com/microsoft/monaco-editor/blob/main/src/basic-languages/yaml/yaml.ts\nconst yaml_conf: monaco.languages.LanguageConfiguration = {\n comments: {\n lineComment: \"#\",\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 folding: {\n offSide: true,\n },\n onEnterRules: [\n {\n beforeText: /:\\s*$/,\n action: {\n indentAction: monaco.languages.IndentAction.Indent,\n },\n },\n ],\n};\n\nconst yaml_language = <monaco.languages.IMonarchLanguage>{\n tokenPostfix: \".yaml\",\n\n brackets: [\n { token: \"delimiter.bracket\", open: \"{\", close: \"}\" },\n { token: \"delimiter.square\", open: \"[\", close: \"]\" },\n ],\n\n keywords: [\n \"true\",\n \"True\",\n \"TRUE\",\n \"false\",\n \"False\",\n \"FALSE\",\n \"null\",\n \"Null\",\n \"Null\",\n \"~\",\n ],\n\n numberInteger: /(?:0|[+-]?[0-9]+)/,\n numberFloat: /(?:0|[+-]?[0-9]+)(?:\\.[0-9]+)?(?:e[-+][1-9][0-9]*)?/,\n numberOctal: /0o[0-7]+/,\n numberHex: /0x[0-9a-fA-F]+/,\n numberInfinity: /[+-]?\\.(?:inf|Inf|INF)/,\n numberNaN: /\\.(?:nan|Nan|NAN)/,\n numberDate:\n /\\d{4}-\\d\\d-\\d\\d([Tt ]\\d\\d:\\d\\d:\\d\\d(\\.\\d+)?(( ?[+-]\\d\\d?(:\\d\\d)?)|Z)?)?/,\n\n escapes: /\\\\(?:[btnfr\\\\\"']|[0-7][0-7]?|[0-3][0-7]{2})/,\n\n tokenizer: {\n root: [\n { include: \"@whitespace\" },\n { include: \"@comment\" },\n\n // Directive\n [/%[^ ]+.*$/, \"meta.directive\"],\n\n // Document Markers\n [/---/, \"operators.directivesEnd\"],\n [/\\.{3}/, \"operators.documentEnd\"],\n\n // Block Structure Indicators\n [/[-?:](?= )/, \"operators\"],\n\n { include: \"@anchor\" },\n { include: \"@tagHandle\" },\n { include: \"@flowCollections\" },\n { include: \"@blockStyle\" },\n\n // Numbers\n [/@numberInteger(?![ \\t]*\\S+)/, \"number\"],\n [/@numberFloat(?![ \\t]*\\S+)/, \"number.float\"],\n [/@numberOctal(?![ \\t]*\\S+)/, \"number.octal\"],\n [/@numberHex(?![ \\t]*\\S+)/, \"number.hex\"],\n [/@numberInfinity(?![ \\t]*\\S+)/, \"number.infinity\"],\n [/@numberNaN(?![ \\t]*\\S+)/, \"number.nan\"],\n [/@numberDate(?![ \\t]*\\S+)/, \"number.date\"],\n\n // Key:Value pair\n [\n /(\".*?\"|'.*?'|[^#'\"]*?)([ \\t]*)(:)( |$)/,\n [\"key\", \"white\", \"operators\", \"white\"],\n ],\n\n { include: \"@flowScalars\" },\n\n // String nodes\n [\n /.+?(?=(\\s+#|$))/,\n {\n cases: {\n \"@keywords\": \"keyword\",\n \"@default\": \"string\",\n },\n },\n ],\n ],\n\n // Flow Collection: Flow Mapping\n object: [\n { include: \"@whitespace\" },\n { include: \"@comment\" },\n\n // Flow Mapping termination\n [/\\}/, \"@brackets\", \"@pop\"],\n\n // Flow Mapping delimiter\n [/,/, \"delimiter.comma\"],\n\n // Flow Mapping Key:Value delimiter\n [/:(?= )/, \"operators\"],\n\n // Flow Mapping Key:Value key\n [/(?:\".*?\"|'.*?'|[^,\\{\\[]+?)(?=: )/, \"type\"],\n\n // Start Flow Style\n { include: \"@flowCollections\" },\n { include: \"@flowScalars\" },\n\n // Scalar Data types\n { include: \"@tagHandle\" },\n { include: \"@anchor\" },\n { include: \"@flowNumber\" },\n\n // Other value (keyword or string)\n [\n /[^\\},]+/,\n {\n cases: {\n \"@keywords\": \"keyword\",\n \"@default\": \"string\",\n },\n },\n ],\n ],\n\n // Flow Collection: Flow Sequence\n array: [\n { include: \"@whitespace\" },\n { include: \"@comment\" },\n\n // Flow Sequence termination\n [/\\]/, \"@brackets\", \"@pop\"],\n\n // Flow Sequence delimiter\n [/,/, \"delimiter.comma\"],\n\n // Start Flow Style\n { include: \"@flowCollections\" },\n { include: \"@flowScalars\" },\n\n // Scalar Data types\n { include: \"@tagHandle\" },\n { include: \"@anchor\" },\n { include: \"@flowNumber\" },\n\n // Other value (keyword or string)\n [\n /[^\\],]+/,\n {\n cases: {\n \"@keywords\": \"keyword\",\n \"@default\": \"string\",\n },\n },\n ],\n ],\n\n // First line of a Block Style\n multiString: [[/^( +).+$/, \"string\", \"@multiStringContinued.$1\"]],\n\n // Further lines of a Block Style\n // Workaround for indentation detection\n multiStringContinued: [\n [\n /^( *).+$/,\n {\n cases: {\n \"$1==$S2\": \"string\",\n \"@default\": { token: \"@rematch\", next: \"@popall\" },\n },\n },\n ],\n ],\n\n whitespace: [[/[ \\t\\r\\n]+/, \"white\"]],\n\n // Only line comments\n comment: [[/#.*$/, \"comment\"]],\n\n // Start Flow Collections\n flowCollections: [\n [/\\[/, \"@brackets\", \"@array\"],\n [/\\{/, \"@brackets\", \"@object\"],\n ],\n\n // Start Flow Scalars (quoted strings)\n flowScalars: [\n [/\"([^\"\\\\]|\\\\.)*$/, \"string.invalid\"],\n [/'([^'\\\\]|\\\\.)*$/, \"string.invalid\"],\n [/'[^']*'/, \"string\"],\n [/\"/, \"string\", \"@doubleQuotedString\"],\n ],\n\n doubleQuotedString: [\n [/[^\\\\\"]+/, \"string\"],\n [/@escapes/, \"string.escape\"],\n [/\\\\./, \"string.escape.invalid\"],\n [/\"/, \"string\", \"@pop\"],\n ],\n\n // Start Block Scalar\n blockStyle: [[/[>|][0-9]*[+-]?$/, \"operators\", \"@multiString\"]],\n\n // Numbers in Flow Collections (terminate with ,]})\n flowNumber: [\n [/@numberInteger(?=[ \\t]*[,\\]\\}])/, \"number\"],\n [/@numberFloat(?=[ \\t]*[,\\]\\}])/, \"number.float\"],\n [/@numberOctal(?=[ \\t]*[,\\]\\}])/, \"number.octal\"],\n [/@numberHex(?=[ \\t]*[,\\]\\}])/, \"number.hex\"],\n [/@numberInfinity(?=[ \\t]*[,\\]\\}])/, \"number.infinity\"],\n [/@numberNaN(?=[ \\t]*[,\\]\\}])/, \"number.nan\"],\n [/@numberDate(?=[ \\t]*[,\\]\\}])/, \"number.date\"],\n ],\n\n tagHandle: [[/\\![^ ]*/, \"tag\"]],\n\n anchor: [[/[&*][^ ]+/, \"namespace\"]],\n },\n};\n\nmonaco.languages.register({ id: \"yaml\", aliases: [\"yml\"] });\nmonaco.languages.setMonarchTokensProvider(\"yaml\", yaml_language);\nmonaco.languages.setLanguageConfiguration(\"yaml\", yaml_conf);\n\n/// V1\n// const yaml_conf: monaco.languages.LanguageConfiguration = {\n// comments: {\n// lineComment: \"#\",\n// },\n// brackets: [\n// [\"{\", \"}\"],\n// [\"[\", \"]\"],\n// ],\n// autoClosingPairs: [\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// ],\n// indentationRules: {\n// increaseIndentPattern: /^.*(\\{[^}]*|\\[[^\\]]*)$/,\n// decreaseIndentPattern: /^\\s*[}\\]],?\\s*$/,\n// },\n// };\n\n// const yaml_language = <monaco.languages.IMonarchLanguage>{\n// defaultToken: \"\",\n// tokenPostfix: \".yaml\",\n\n// // Common regular expressions\n// escapes:\n// /\\\\(?:[abfnrtv\\\\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,\n\n// // The main tokenizer for YAML\n// tokenizer: {\n// root: [\n// { include: \"@whitespace\" },\n// { include: \"@comments\" },\n// { include: \"@keys\" },\n// { include: \"@numbers\" },\n// { include: \"@booleans\" },\n// { include: \"@strings\" },\n// { include: \"@constants\" },\n// ],\n\n// whitespace: [[/[ \\t\\r\\n]+/, \"\"]],\n\n// comments: [[/#.*$/, \"comment\"]],\n\n// keys: [[/([^\\s\\[\\]{},\"']+)(\\s*)(:)/, [\"key\", \"\", \"delimiter\"]]],\n\n// numbers: [\n// [/\\b\\d+\\.\\d*\\b/, \"number.float\"],\n// [/\\b0x[0-9a-fA-F]+\\b/, \"number.hex\"],\n// [/\\b\\d+\\b/, \"number\"],\n// ],\n\n// booleans: [[/\\b(true|false|yes|no|on|off)\\b/, \"constant.language.boolean\"]],\n\n// strings: [\n// [/\"([^\"\\\\]|\\\\.)*$/, \"string.invalid\"], // non-terminated string\n// [/'([^'\\\\]|\\\\.)*$/, \"string.invalid\"], // non-terminated string\n// [/\"/, \"string\", \"@string_double\"],\n// [/'/, \"string\", \"@string_single\"],\n// ],\n\n// string_double: [\n// [/[^\\\\\"]+/, \"string\"],\n// [/@escapes/, \"string.escape\"],\n// [/\\\\./, \"string.escape.invalid\"],\n// [/\"/, \"string\", \"@pop\"],\n// ],\n\n// string_single: [\n// [/[^\\\\']+/, \"string\"],\n// [/@escapes/, \"string.escape\"],\n// [/\\\\./, \"string.escape.invalid\"],\n// [/'/, \"string\", \"@pop\"],\n// ],\n\n// constants: [[/\\b(null|~)\\b/, \"constant.language.null\"]],\n// },\n// };\n\n// monaco.languages.register({ id: \"yaml\" });\n// monaco.languages.setMonarchTokensProvider(\"yaml\", yaml_language);\n// monaco.languages.setLanguageConfiguration(\"yaml\", yaml_conf);\n"],"mappings":"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","names":[]}
|