Outerspace Next
Dark, minimalistic themes with bright neon primary colors. Theme is excellent for those who like to code long hours at low light conditions since it's easy on the eyes, have good contrast and remain cool appearance as well🔥.
Dark, minimalistic themes with bright neon primary colors. Theme is excellent for those who like to code long hours at low light conditions since it's easy on the eyes, have good contrast and remain cool appearance as well🔥.
Full workbench mockup using this variant's colors and tokenColors.
Loading...
Workbench UI color keys from the theme JSON colors map.
TextMate scopes and font styles (syntax highlighting rules).
| scope | foreground | fontStyle |
|---|---|---|
| meta.attribute-selector.less entity.other.attribute-name.attribute | #ffeb95 | — |
| meta.attribute-selector.sass entity.other.attribute-name.attribute, meta.attribute-selector.scss entity.other.attribute-name.attribute | #ffeb95 | — |
| entity.other.attribute-name | #C792EA | — |
| entity.name.type.class.cs | #FFCA28 | — |
| entity.name.type.namespace.cs | #B2CCD6 | — |
| variable.other.readwrite.cs | #d6deeb | — |
| keyword.other.unit | #FFEB95 | — |
| keyword.other.unit.css | #ffeb95 | — |
| markup.changed | #C792EA | — |
| entity.name.class, entity.name.type.class, markup.changed.git_gutter, meta.use.php, support.class, support.orther.namespace.use.php, support.other.namespace.php | #FFCA28 | — |
| support.type | #ffeb95 | — |
| comment, punctuation.definition.comment | #B1CCC066 | italic |
| tag.decorator.js entity.name.tag.js, tag.decorator.js punctuation.definition.tag.js | #82AAFF | italic |
| markup.deleted | #EC5F67 | — |
| source.js constant.other.object.key.js string.unquoted.label.js | #EC5F67 | italic |
| constant.character.escape | #7FDBCA | — |
| entity.name.function, keyword.other.special-method, meta.block-level, support.function, variable.function | #82AAFF | — |
| meta.function-call | #CCDDD5 | — |
| markup.inserted | #ADDB67 | — |
| support.type.property-name.json | #FFEB95 | — |
| meta.structure.dictionary.value.json string.quoted.double | #addb67 | — |
| support.constant.json | #addb67 | — |
| keyword.other.unit | #ffeb95 | — |
| keyword, storage.type | #C792EA | — |
| keyword.other.unit.css | #ffeb95 | — |
| keyword.other.unit.css | #ffeb95 | — |
| entity.name.tag.less | #7fdbca | — |
| variable.language | #EC5F67 | italic |
| punctuation.definition.list, punctuation.definition.list.begin, punctuation.definition.list.end, punctuation.separator.arguments | #d9f5dd | — |
| constant.character, constant.language, constant.numeric | #F78C6C | — |
| support.constant | #addb67 | — |
| constant.other.color, keyword.operator, keyword.other.substitution, keyword.other.template, meta.tag, punctuation, punctuation.definition.tag, punctuation.definition.tag.begin.html, punctuation.definition.tag.end.html, punctuation.definition.tag.html, punctuation.section.embedded, punctuation.separator.inheritance.php | #7FDBCA | — |
| string.other.link, support.other.variable | #F2777A | — |
| meta.array, punctuation.definition.arguments, punctuation.definition.array, punctuation.section.array, punctuation.terminator.expression | #d6deeb | — |
| string.regexp | #7FDBCA | — |
| keyword.other.unit.sass, keyword.other.unit.scss | #ffeb95 | — |
| variable.parameter.url.sass, variable.parameter.url.scss, variable.sass, variable.scss | #CCDDD5 | — |
| entity.name.filename.find-in-files | #ADDB67 | — |
| constant.numeric.line-number.find-in-files - match | #f78c6c | — |
| meta.structure.dictionary.json meta.structure.dictionary.value constant.language | #ff5874 | — |
| storage.type.cs | #82AAFF | — |
| constant.other.key, constant.other.symbol, entity.other.inherited-class, markup.heading, markup.inserted.git_gutter, meta.group.braces.curly constant.other.object.key.js string.unquoted.label.js, string | #ADDB67 | — |
| string.quoted.double.json punctuation.definition.string.json | #80CBC4 | — |
| entity.name.module.js, variable.import.parameter.js, variable.other.class.js | #EC5F67 | — |
| entity.name.tag.sass, entity.name.tag.scss | #7fdbca | — |
| entity.name.tag, markup.deleted.git_gutter, meta.tag.sgml | #ff5874 | — |
| *link*, *uri*, *url* | — | underline |
| variable | #CCDDD5 | — |
| source.css.sass meta.at-rule variable, source.css.scss meta.at-rule variable | #82AAFF | — |
| source.css.sass meta.at-rule variable, source.css.scss meta.at-rule variable | #bec5d4 | — |
| entity.name.method.js | #D8DEE9 | — |
| meta.method.js entity.name.function.js, variable.function.constructor | #D8DEE9 | — |
Full workbench mockup using this variant's colors and tokenColors.
Loading...
Workbench UI color keys from the theme JSON colors map.
TextMate scopes and font styles (syntax highlighting rules).
| scope | foreground | fontStyle |
|---|---|---|
| source, punctuation.definition.string.begin,punctuation.definition.string.end,punctuation.definition.dictionary,punctuation.separator.dictionary,punctuation.definition.array,punctuation.separator.array,punctuation.definition.keyword,punctuation.terminator.rule,punctuation.definition.entity.css,meta.delimiter.comma,punctuation.separator.parameter.function,punctuation.section.property-list,keyword.operator.new,keyword.operator.expression.delete,keyword.operator.expression.in,keyword.operator.expression.of,keyword.operator.expression.instanceof,keyword.operator.expression.typeof,keyword.operator.expression.void,keyword.other.template,keyword.control.at-rule.import, keyword.other.namespace, keyword.other.using.cs, keyword.control.import, keyword.control.from,keyword.control.export, storage.modifier,storage.type.class, storage.type.function,keyword.control.conditional,keyword.control.switch, storage.type.js,punctuation.definition.pseudo-class.begin.bracket.round.css,punctuation.definition.pseudo-class.end.bracket.round.css,meta.property-value.scss,meta.property-value.sass,meta.property-value.less | #55799B | — |
| string.unquoted.label, meta.property.object, support.type.object.module, meta.scriptblock.powershell, meta.jsx.js, entity.name.variable.property, keyword.other, variable.other.class, meta.instance.constructor | #C9CCDB | — |
| variable, variable.parameter.function | #C9CCDB | — |
| comment markup.link | #5C588A | italic |
| markup.changed.diff | #F1C56C | — |
| meta.diff.header.from-file,punctuation.definition.from-file.diff | #569cd6 | — |
| markup.inserted.diff | #45F5CF | — |
| markup.deleted.diff | #FF82A9 | — |
| variable.language.super | #FFEB95 | — |
| keyword.operator.expression.import | #82AAFF | — |
| support.constant.math | #c792ea | — |
| support.constant.property.math | #82AAFF | — |
| variable.other.constant | #FF82A9 | — |
| support.constant.property-value.scss,support.constant.property-value.less,support.constant.property-value.css | #c792ea | — |
| support.constant.color.w3c-standard-color-name.css,support.constant.color.w3c-standard-color-name.less,support.constant.color.w3c-standard-color-name.scss | #c792ea | — |
| punctuation.separator.list.comma.css | #C9CCDB | — |
| support.constant.color.w3c-standard-color-name.css | #c792ea | — |
| support.type.property-name.css | #82AAFF | — |
| support.type.vendored.property-name.css | #A8C3FF | — |
| support.constant.vendored.property-value.css | #D5B4EA | — |
| constant.length.units.css,meta.property-values.css,styled,meta.var.expr.js | #f866c9 | — |
| punctuation.definition.template-expression.begin,punctuation.definition.template-expression.end | #7b79b5 | — |
| variable.other.readwrite,meta.object-literal.key,support.variable.property,support.variable.object.process,support.variable.object.node | #C9CCDB | — |
| comment.line.double-slash,comment.block.documentation,comment | #46637F | italic |
| support.constant.json | #796bd8 | — |
| support.type.object.console | #C9CCDB | — |
| support.variable.property.process | #C9CCDB | — |
| entity.name.function,support.function.console | #82AAFF | — |
| support.variable.dom,support.variable.property.dom | #C9CCDB | — |
| punctuation.definition.tag, punctuation.definition.tag.begin.html, punctuation.definition.tag.end.html, punctuation.definition.tag.html, punctuation.definition.parameters, punctuation.terminator.statement, meta.brace, meta.brace.curly, meta.brace.square, punctuation.definition.string | #55799B | — |
| keyword.operator | #55799B | — |
| storage.type.class.js, storage.type.extends.js | #55799B | — |
| keyword.operator.accessor,keyword.operator.spread,keyword.operator.arithmetic,keyword.operator.comparison, keyword.operator.relational, keyword.operator.bitwise,keyword.operator.arithmetic,keyword.operator.logical, keyword.operator.assignment,keyword.control.loop,keyword.control.powershell,keyword.operator.css,meta.property-list.scss,meta.property-list.sass,meta.property-list.less, punctuation.separator.key-value | #7EEAD6 | — |
| keyword | #FF82A9 | — |
| variable.scss, variable.sass, variable.less, variable.parameter.url.scss, variable.parameter.url.sass, variable.parameter.url.less | #C9CCDB | — |
| entity.name.function, keyword.other.special-method, meta.block-level, support.function, variable.function, support.function.node, meta.class meta.function-call variable.function.js, meta.class meta.group.braces.curly meta.function-call variable.function.js, storage.type.tsx, support.function.powershell | #82AAFF | — |
| token.package.keyword | #a68ea1 | — |
| token.package | #C9CCDB | — |
| support.class, entity.name.type.class | #FFEB95 | — |
| entity.name.class.identifier.namespace.type | #FFEB95 | — |
| entity.name.class | #FFEB95 | — |
| keyword.control | #FF82A9 | — |
| control.elements, keyword.operator.less | #E79041 | — |
| keyword.other.special-method | #A5C2FF | — |
| storage, keyword.other.substitution, keyword.other.variable.definition.powershell, keyword.other.array.begin.powershell, keyword.other.hashtable.begin.powershell | #FF82A9 | — |
| punctuation.definition.interpolation.begin.bracket.curly.scss, punctuation.definition.interpolation.end.bracket.curly.scss, punctuation.definition.interpolation.begin.bracket.curly.less, punctuation.definition.interpolation.end.bracket.curly.less, punctuation.definition.interpolation.begin.bracket.curly.sass, punctuation.definition.interpolation.end.bracket.curly.sass | #FF82A9 | — |
| entity.name.type | #c792ea | — |
| entity.name.type.namespace.cs | #ADDB76 | — |
| storage.modifier | #A9DBA4 | — |
| entity.name.type.namespace.cs | #8CFFEB | — |
| storage.type.function.arrow | #FF82A9 | — |
| support.function | #C9CCDB | — |
| support.type.property-name | #C9CCDB | — |
| support.constant.property-value | #C9CCDB | — |
| support.constant.font-name | #DBA48C | — |
| meta.tag | #C9CCDB | — |
| string, entity.other.inherited-class | #ADDB76 | — |
| constant.other.symbol | #2BBAC5 | — |
| constant.numeric, punctuation.definition.constant | #DBA48C | — |
| constant.language.boolean, constant.language | #FF82A9 | — |
| constant.other | #FFEB95 | — |
| entity.name.tag, storage.type.cs, support.class.component | #706DFF | — |
| entity.other.attribute-name | #55799B | italic |
| entity.other.attribute-name.id | #82AAFF | — |
| entity.other.attribute-name.class.css | #ADDB76 | — |
| entity.other.attribute-name.pseudo-class | #55799B | — |
| meta.selector | #a68ea1 | — |
| markup.heading | #C9CCDB | bold |
| markup.heading punctuation.definition.heading, entity.name.section | #82AAFF | — |
| keyword.other.unit | #FFEB95 | — |
| markup.bold,todo.bold | #FFEB95 | bold |
| punctuation.definition.bold | #706DFF | — |
| markup.italic,punctuation.definition.italic,todo.emphasis | #c792ea | — |
| emphasis md | #c792ea | — |
| entity.name.section.markdown | #EF596F | — |
| punctuation.definition.heading.markdown | #EF596F | — |
| markup.heading.setext | #C9CCDB | — |
| punctuation.definition.bold.markdown | #DBA48C | — |
| markup.inline.raw.markdown | #ADDB76 | — |
| beginning.punctuation.definition.list.markdown | #C9CCDB | — |
| markup.quote.markdown | #615E8E | italic |
| punctuation.definition.string.begin.markdown,punctuation.definition.string.end.markdown,punctuation.definition.metadata.markdown | #55799B | — |
| punctuation.definition.metadata.markdown | #c792ea | — |
| markup.underline.link.markdown,markup.underline.link.image.markdown | #c792ea | — |
| string.other.link.title.markdown,string.other.link.description.markdown | #82AAFF | — |
| markup.italic.markdown | — | italic |
| markup.bold.markdown | — | bold |
| string.regexp | #ADDB76 | — |
| constant.character.escape | #ADDB76 | — |
| punctuation.section.embedded, variable.interpolation | #55799B | — |
| invalid.illegal | #FFFFFF | — |
| invalid.broken | #FFFFFF | — |
| invalid.deprecated | #FFFFFF | — |
| invalid.unimplemented | #FFFFFF | — |
| source.json meta.structure.dictionary.json > string.quoted.json | #FF82A9 | — |
| source.json meta.structure.dictionary.json > string.quoted.json > punctuation.string | #FF82A9 | — |
| source.json meta.structure.dictionary.json > value.json > string.quoted.json,source.json meta.structure.array.json > value.json > string.quoted.json,source.json meta.structure.dictionary.json > value.json > string.quoted.json > punctuation,source.json meta.structure.array.json > value.json > string.quoted.json > punctuation | #C9CCDB | — |
| source.json meta.structure.dictionary.json > constant.language.json,source.json meta.structure.array.json > constant.language.json | #ADDB76 | — |
| support.type.property-name.json | #FFEB95 | — |
| support.type.property-name.json punctuation | #55799B | — |
| function.parameter | #c792ea | — |
| function.parameter | #C9CCDB | — |
| function.brace | #C9CCDB | — |
| rgb-value | #ADDB76 | — |
| inline-color-decoration rgb-value | #c792ea | — |
| less rgb-value | #c792ea | — |
| selector.sass | #FF82A9 | — |
| var.this,variable.language.this.js,variable.language.this.ts,variable.language.this.jsx,variable.language.this.tsx, support.type.object | #FFEB95 | |
| support.type.primitive,support.type.builtin | #FF82A9 | — |
| block.scope.end,block.scope.begin | #C9CCDB | — |
| entity.name.variable.local.cs | #C9CCDB | — |
| token.info-token | #82AAFF | — |
| token.warn-token | #FFEB95 | — |
| token.error-token | #FF82A9 | — |
| token.debug-token | #c792ea | — |
| meta.preprocessor | #706DFF | — |
| punctuation.squarebracket.open.cs,punctuation.squarebracket.close.cs,punctuation.parenthesis.open.cs,punctuation.parenthesis.close.cs,punctuation.curlybrace.open.cs,punctuation.curlybrace.close.cs,punctuation.terminator.statement.cs | #55799B | — |
| entity.name.variable.local.cs | #C9CCDB | — |
Full workbench mockup using this variant's colors and tokenColors.
Loading...
Workbench UI color keys from the theme JSON colors map.
TextMate scopes and font styles (syntax highlighting rules).
| scope | foreground | fontStyle |
|---|---|---|
| punctuation.definition.string.begin,punctuation.definition.string.end,punctuation.definition.dictionary,punctuation.separator.dictionary,punctuation.definition.array,punctuation.separator.array,punctuation.definition.keyword,punctuation.terminator.rule,punctuation.definition.entity.css,meta.delimiter.comma | #7F7F7F | — |
| variable.parameter.function | #C9CBDB | — |
| comment markup.link | #5C588A | italic |
| markup.changed.diff | #F1C56C | — |
| meta.diff.header.from-file,punctuation.definition.from-file.diff | #569cd6 | — |
| markup.inserted.diff | #45F5CF | — |
| markup.deleted.diff | #FF6E9C | — |
| variable.language.super | #FFDB7F | italic |
| keyword.operator.expression.import | #7DA7FF | — |
| support.constant.math | #e591ff | — |
| support.constant.property.math | #7DA7FF | — |
| variable.other.constant | #e591ff | — |
| support.constant.property-value.scss,support.constant.property-value.less,support.constant.property-value.css | #AC71FC | — |
| support.constant.color.w3c-standard-color-name.css,support.constant.color.w3c-standard-color-name.less,support.constant.color.w3c-standard-color-name.scss | #AC71FC | — |
| punctuation.separator.list.comma.css | #C9CBDB | — |
| support.constant.color.w3c-standard-color-name.css | #e591ff | — |
| support.type.property-name.css | #7DA7FF | — |
| support.type.vendored.property-name.css | #7DA7FFaa | — |
| support.constant.vendored.property-value.css | #AC71FCaa | — |
| constant.length.units.css,meta.property-values.css,styled,meta.var.expr.js | #f866c9 | — |
| punctuation.definition.template-expression.begin,punctuation.definition.template-expression.end | #7b79b5 | — |
| support.module.node,support.type.object.module | #e591ff | — |
| variable.other.readwrite,meta.object-literal.key,support.variable.property,support.variable.object.process,support.variable.object.node | #C5BDD9 | — |
| comment.line.double-slash,comment.block.documentation,comment | #9C9BC165 | italic |
| support.constant.json | #796bd8 | — |
| keyword.operator.expression.instanceof,keyword.operator.new,keyword.operator.ternary | #ac70fc | — |
| support.type.object.console | #C9CBDB | — |
| support.variable.property.process | #C9CBDB | — |
| entity.name.function,support.function.console | #7DA7FF | — |
| support.type.object.dom | #586FB3 | — |
| support.variable.dom,support.variable.property.dom | #C5BDD9 | — |
| none | #C9CBDB | — |
| punctuation.definition.tag, punctuation.definition.tag.begin.html, punctuation.definition.tag.end.html, punctuation.definition.tag.html, punctuation.definition.parameters, punctuation.terminator.statement, meta.brace.curly, meta.brace.square, punctuation.definition.string | #7F7F7F | — |
| keyword.operator, punctuation.separator.key-value, keyword.operator.assignment | #7F7F7F | — |
| storage.type.class.js, storage.type.extends.js | #7F7F7F | — |
| meta.brace, source.js | #C9CBDB | — |
| keyword.operator.arithmetic,keyword.operator.comparison, keyword.operator.relational, keyword.operator.bitwise,keyword.operator.arithmetic,keyword.operator.logical | #B5EF8A | — |
| keyword.operator.expression.delete,keyword.operator.expression.in,keyword.operator.expression.of,keyword.operator.expression.instanceof,keyword.operator.new,keyword.operator.expression.typeof,keyword.operator.expression.void | #a68ea1 | — |
| keyword | #796bd8 | — |
| variable.scss, variable.sass, variable.less, variable.parameter.url.scss, variable.parameter.url.sass, variable.parameter.url.less | #C9CBDB | — |
| entity.name.function, keyword.other.special-method, meta.block-level, support.function, variable.function | #7DA7FF | — |
| token.package.keyword | #a68ea1 | — |
| token.package | #C9CBDB | — |
| entity.name.type.namespace | #FFDB7F | — |
| support.class, entity.name.type.class | #FFDB7F | — |
| entity.name.class.identifier.namespace.type | #FFDB7F | — |
| entity.name.class | #FFDB7F | — |
| entity.name.type | #e591ff | — |
| keyword.control | #B5EF8A | — |
| control.elements, keyword.operator.less | #E79041 | — |
| keyword.other.special-method | #7EA7FF | — |
| storage | #B5EF8A | — |
| storage.type.function.arrow | #FF6E9C | — |
| support.function | #C9CBDB | — |
| support.type.property-name | #C9CBDB | — |
| support.constant.property-value | #C9CBDB | — |
| support.constant.font-name | #D8985F | — |
| meta.tag | #C9CBDB | — |
| string, entity.other.inherited-class | #74FEE1 | — |
| constant.other.symbol | #2BBAC5 | — |
| constant.numeric | #DA65BA | — |
| none | #FFDB7F | — |
| none | #FFDB7F | — |
| constant | #F55AAF | — |
| punctuation.definition.constant | #FFDB7F | — |
| entity.name.tag, variable.other.class | #FF6E9C | — |
| entity.other.attribute-name | #C9CBDB | — |
| entity.other.attribute-name.id | #7DA7FF | — |
| entity.other.attribute-name.class.css | #74FEE1 | — |
| entity.other.attribute-name.pseudo-class | #7f7f7f | — |
| meta.selector | #a68ea1 | — |
| none | #FFDB7F | — |
| markup.heading | #C5BDD9 | bold |
| markup.heading punctuation.definition.heading, entity.name.section | #7DA7FF | — |
| keyword.other.unit | #F9987C | — |
| markup.bold,todo.bold | #FFDB7F | bold |
| punctuation.definition.bold | #474295 | — |
| markup.italic,punctuation.definition.italic,todo.emphasis | #A68AE1 | — |
| emphasis md | #A68AE1 | — |
| entity.name.section.markdown | #EF596F | — |
| punctuation.definition.heading.markdown | #EF596F | — |
| markup.heading.setext | #C9CBDB | — |
| punctuation.definition.bold.markdown | #D8985F | — |
| markup.inline.raw.markdown | #74FEE1 | — |
| beginning.punctuation.definition.list.markdown | #C5BDD9 | — |
| markup.quote.markdown | #615E8E | italic |
| punctuation.definition.string.begin.markdown,punctuation.definition.string.end.markdown,punctuation.definition.metadata.markdown | #7F7F7F | — |
| punctuation.definition.metadata.markdown | #A68AE1 | — |
| markup.underline.link.markdown,markup.underline.link.image.markdown | #A68AE1 | — |
| string.other.link.title.markdown,string.other.link.description.markdown | #7DA7FF | — |
| markup.italic.markdown | — | italic |
| markup.bold.markdown | — | bold |
| string.regexp | #71E4FE | — |
| constant.character.escape | #71E4FE | — |
| punctuation.section.embedded, variable.interpolation | #7F7F7F | — |
| invalid.illegal | #FFFFFF | — |
| invalid.broken | #FFFFFF | — |
| invalid.deprecated | #FFFFFF | — |
| invalid.unimplemented | #FFFFFF | — |
| source.json meta.structure.dictionary.json > string.quoted.json | #FF709E | — |
| source.json meta.structure.dictionary.json > string.quoted.json > punctuation.string | #FF709E | — |
| source.json meta.structure.dictionary.json > value.json > string.quoted.json,source.json meta.structure.array.json > value.json > string.quoted.json,source.json meta.structure.dictionary.json > value.json > string.quoted.json > punctuation,source.json meta.structure.array.json > value.json > string.quoted.json > punctuation | #C9CBDB | — |
| source.json meta.structure.dictionary.json > constant.language.json,source.json meta.structure.array.json > constant.language.json | #71E4FE | — |
| support.type.property-name.json | #FFDB7F | — |
| support.type.property-name.json punctuation | #7F7F7F | — |
| function.parameter | #e591ff | — |
| function.parameter | #C9CBDB | — |
| function.brace | #C9CBDB | — |
| rgb-value | #71E4FE | — |
| inline-color-decoration rgb-value | #e591ff | — |
| less rgb-value | #e591ff | — |
| selector.sass | #D8618E | — |
| var.this,variable.language.this.js,variable.language.this.ts,variable.language.this.jsx,variable.language.this.tsx | #FFDB7F | italic |
| support.type.primitive.ts,support.type.builtin.ts | #e591ff | — |
| block.scope.end,block.scope.begin | #C9CBDB | — |
| entity.name.variable.local.cs | #C5BDD9 | — |
| token.info-token | #7DA7FF | — |
| token.warn-token | #FFCA28 | — |
| token.error-token | #E54B4B | — |
| token.debug-token | #A68AE1 | — |
| meta.preprocessor | #8954d3 | — |
| punctuation.squarebracket.open.cs,punctuation.squarebracket.close.cs,punctuation.parenthesis.open.cs,punctuation.parenthesis.close.cs,punctuation.curlybrace.open.cs,punctuation.curlybrace.close.cs,punctuation.terminator.statement.cs | #7866c9 | — |
| entity.name.variable.local.cs | #c5bdd9 | — |
export interface User {
id: string;
name: string;
role: "admin" | "member";
tags: string[];
}
/**
* Fetch user data by ID
* @param id
* @returns User object or null if ID is invalid
*/
export async function fetchUser(id: string): Promise<User | null> {
if (!id) {
return null;
}
const response = await fetch(`/api/users/${id}`, {
method: "GET",
headers: { Accept: "application/json" },
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
return (await response.json()) as User;
}
function greet(user: User): string {
// Simple greeting function that uses the user's name
return `Hello, ${user.name}!`;
}
export interface User {
id: string;
name: string;
role: "admin" | "member";
tags: string[];
}
/**
* Fetch user data by ID
* @param id
* @returns User object or null if ID is invalid
*/
export async function fetchUser(id: string): Promise<User | null> {
if (!id) {
return null;
}
const response = await fetch(`/api/users/${id}`, {
method: "GET",
headers: { Accept: "application/json" },
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
return (await response.json()) as User;
}
function greet(user: User): string {
// Simple greeting function that uses the user's name
return `Hello, ${user.name}!`;
}
export interface User {
id: string;
name: string;
role: "admin" | "member";
tags: string[];
}
/**
* Fetch user data by ID
* @param id
* @returns User object or null if ID is invalid
*/
export async function fetchUser(id: string): Promise<User | null> {
if (!id) {
return null;
}
const response = await fetch(`/api/users/${id}`, {
method: "GET",
headers: { Accept: "application/json" },
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
return (await response.json()) as User;
}
function greet(user: User): string {
// Simple greeting function that uses the user's name
return `Hello, ${user.name}!`;
}