mirror of
https://github.com/usememos/memos.git
synced 2025-06-05 22:09:59 +02:00
chore: move buf generated code to gitignore (#2236)
This commit is contained in:
6
.github/workflows/frontend-tests.yml
vendored
6
.github/workflows/frontend-tests.yml
vendored
@ -13,6 +13,9 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: bufbuild/buf-setup-action@v1
|
||||
- run: buf generate
|
||||
working-directory: proto
|
||||
- uses: pnpm/action-setup@v2.2.4
|
||||
with:
|
||||
version: 8
|
||||
@ -31,6 +34,9 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: bufbuild/buf-setup-action@v1
|
||||
- run: buf generate
|
||||
working-directory: proto
|
||||
- uses: pnpm/action-setup@v2.2.4
|
||||
with:
|
||||
version: 8
|
||||
|
14
Dockerfile
14
Dockerfile
@ -2,12 +2,18 @@
|
||||
FROM node:18-alpine AS frontend
|
||||
WORKDIR /frontend-build
|
||||
|
||||
COPY ./web/package.json ./web/pnpm-lock.yaml ./
|
||||
COPY . .
|
||||
|
||||
WORKDIR /frontend-build/proto
|
||||
|
||||
RUN npm i -g @bufbuild/buf
|
||||
|
||||
RUN buf generate
|
||||
|
||||
WORKDIR /frontend-build/web
|
||||
|
||||
RUN corepack enable && pnpm i --frozen-lockfile
|
||||
|
||||
COPY ./web/ .
|
||||
|
||||
RUN pnpm build
|
||||
|
||||
# Build backend exec file.
|
||||
@ -15,7 +21,7 @@ FROM golang:1.21-alpine AS backend
|
||||
WORKDIR /backend-build
|
||||
|
||||
COPY . .
|
||||
COPY --from=frontend /frontend-build/dist ./server/dist
|
||||
COPY --from=frontend /frontend-build/web/dist ./server/dist
|
||||
|
||||
RUN CGO_ENABLED=0 go build -o memos ./main.go
|
||||
|
||||
|
@ -20,7 +20,7 @@ plugins:
|
||||
- paths=source_relative
|
||||
# Build the TypeScript definitions for the web.
|
||||
- plugin: buf.build/community/stephenh-ts-proto:v1.152.1
|
||||
out: ../web/src/types/proto-grpcweb
|
||||
out: ../web/src/types/proto
|
||||
# reference: https://github.com/deeplay-io/nice-grpc/blob/master/packages/nice-grpc-web/README.md#using-ts-proto
|
||||
opt:
|
||||
- env=browser
|
||||
|
7
web/.gitignore
vendored
7
web/.gitignore
vendored
@ -3,9 +3,4 @@ node_modules
|
||||
dist
|
||||
dist-ssr
|
||||
*.local
|
||||
|
||||
/test-results/
|
||||
/playwright-report/
|
||||
/playwright/.cache/
|
||||
/playwright-screenshot/
|
||||
|
||||
src/types/proto
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { Autocomplete, Button, Input, List, ListItem, Option, Select, Typography } from "@mui/joy";
|
||||
import React, { useRef, useState } from "react";
|
||||
import { toast } from "react-hot-toast";
|
||||
import { Resource } from "@/types/proto-grpcweb/api/v2/resource_service";
|
||||
import { Resource } from "@/types/proto/api/v2/resource_service";
|
||||
import { useTranslate } from "@/utils/i18n";
|
||||
import { useResourceStore } from "../store/module";
|
||||
import { generateDialog } from "./Dialog";
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { Resource } from "@/types/proto-grpcweb/api/v2/resource_service";
|
||||
import { Resource } from "@/types/proto/api/v2/resource_service";
|
||||
import Icon from "../Icon";
|
||||
import ResourceIcon from "../ResourceIcon";
|
||||
|
||||
|
@ -8,7 +8,7 @@ import { TAB_SPACE_WIDTH, UNKNOWN_ID } from "@/helpers/consts";
|
||||
import { clearContentQueryParam } from "@/helpers/utils";
|
||||
import { getMatchedNodes } from "@/labs/marked";
|
||||
import { useFilterStore, useGlobalStore, useMemoStore, useResourceStore, useTagStore, useUserStore } from "@/store/module";
|
||||
import { Resource } from "@/types/proto-grpcweb/api/v2/resource_service";
|
||||
import { Resource } from "@/types/proto/api/v2/resource_service";
|
||||
import { useTranslate } from "@/utils/i18n";
|
||||
import showCreateResourceDialog from "../CreateResourceDialog";
|
||||
import Icon from "../Icon";
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { Resource } from "@/types/proto-grpcweb/api/v2/resource_service";
|
||||
import { Resource } from "@/types/proto/api/v2/resource_service";
|
||||
import { getResourceUrl } from "@/utils/resource";
|
||||
import ResourceIcon from "./ResourceIcon";
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
import classNames from "classnames";
|
||||
import { absolutifyLink } from "@/helpers/utils";
|
||||
import { Resource } from "@/types/proto-grpcweb/api/v2/resource_service";
|
||||
import { Resource } from "@/types/proto/api/v2/resource_service";
|
||||
import { getResourceType, getResourceUrl } from "@/utils/resource";
|
||||
import MemoResource from "./MemoResource";
|
||||
import showPreviewImageDialog from "./PreviewImageDialog";
|
||||
|
@ -1,6 +1,6 @@
|
||||
import classNames from "classnames";
|
||||
import React from "react";
|
||||
import { Resource } from "@/types/proto-grpcweb/api/v2/resource_service";
|
||||
import { Resource } from "@/types/proto/api/v2/resource_service";
|
||||
import { getResourceType, getResourceUrl } from "@/utils/resource";
|
||||
import Icon from "./Icon";
|
||||
import showPreviewImageDialog from "./PreviewImageDialog";
|
||||
|
@ -4,7 +4,7 @@ import copy from "copy-to-clipboard";
|
||||
import { useEffect, useState } from "react";
|
||||
import { toast } from "react-hot-toast";
|
||||
import useCurrentUser from "@/hooks/useCurrentUser";
|
||||
import { ListUserAccessTokensResponse, UserAccessToken } from "@/types/proto-grpcweb/api/v2/user_service";
|
||||
import { ListUserAccessTokensResponse, UserAccessToken } from "@/types/proto/api/v2/user_service";
|
||||
import { useTranslate } from "@/utils/i18n";
|
||||
import showCreateAccessTokenDialog from "../CreateAccessTokenDialog";
|
||||
import { showCommonDialog } from "../Dialog/CommonDialog";
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { createChannel, createClientFactory, FetchTransport } from "nice-grpc-web";
|
||||
import { UserServiceDefinition } from "./types/proto-grpcweb/api/v2/user_service";
|
||||
import { UserServiceDefinition } from "./types/proto/api/v2/user_service";
|
||||
|
||||
const address = import.meta.env.MODE === "development" ? "http://localhost:8081" : window.location.origin;
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
import axios from "axios";
|
||||
import { Resource } from "@/types/proto-grpcweb/api/v2/resource_service";
|
||||
import { GetUserResponse } from "@/types/proto-grpcweb/api/v2/user_service";
|
||||
import { Resource } from "@/types/proto/api/v2/resource_service";
|
||||
import { GetUserResponse } from "@/types/proto/api/v2/user_service";
|
||||
|
||||
export function getSystemStatus() {
|
||||
return axios.get<SystemStatus>("/api/v1/status");
|
||||
|
@ -7,7 +7,7 @@ import UserAvatar from "@/components/UserAvatar";
|
||||
import useLoading from "@/hooks/useLoading";
|
||||
import { useMemoStore } from "@/store/module";
|
||||
import { useUserV1Store } from "@/store/v1";
|
||||
import { User } from "@/types/proto-grpcweb/api/v2/user_service";
|
||||
import { User } from "@/types/proto/api/v2/user_service";
|
||||
|
||||
const MemoDetail = () => {
|
||||
const params = useParams();
|
||||
|
@ -6,7 +6,7 @@ import Icon from "@/components/Icon";
|
||||
import MobileHeader from "@/components/MobileHeader";
|
||||
import ResourceIcon from "@/components/ResourceIcon";
|
||||
import useLoading from "@/hooks/useLoading";
|
||||
import { ListResourcesResponse, Resource } from "@/types/proto-grpcweb/api/v2/resource_service";
|
||||
import { ListResourcesResponse, Resource } from "@/types/proto/api/v2/resource_service";
|
||||
import { useTranslate } from "@/utils/i18n";
|
||||
|
||||
const fetchAllResources = async () => {
|
||||
|
@ -7,7 +7,7 @@ import UserAvatar from "@/components/UserAvatar";
|
||||
import useLoading from "@/hooks/useLoading";
|
||||
import { useUserStore } from "@/store/module";
|
||||
import { useUserV1Store } from "@/store/v1";
|
||||
import { User } from "@/types/proto-grpcweb/api/v2/user_service";
|
||||
import { User } from "@/types/proto/api/v2/user_service";
|
||||
import { useTranslate } from "@/utils/i18n";
|
||||
|
||||
const UserProfile = () => {
|
||||
|
@ -1,5 +1,5 @@
|
||||
import * as api from "@/helpers/api";
|
||||
import { Resource } from "@/types/proto-grpcweb/api/v2/resource_service";
|
||||
import { Resource } from "@/types/proto/api/v2/resource_service";
|
||||
import { useTranslate } from "@/utils/i18n";
|
||||
import store, { useAppSelector } from "../";
|
||||
import { deleteResource, patchResource, setResources } from "../reducer/resource";
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
|
||||
import { uniqBy } from "lodash-es";
|
||||
import { Resource } from "@/types/proto-grpcweb/api/v2/resource_service";
|
||||
import { Resource } from "@/types/proto/api/v2/resource_service";
|
||||
|
||||
interface State {
|
||||
resources: Resource[];
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { create } from "zustand";
|
||||
import { userServiceClient } from "@/grpcweb";
|
||||
import { User } from "@/types/proto-grpcweb/api/v2/user_service";
|
||||
import { User } from "@/types/proto/api/v2/user_service";
|
||||
|
||||
interface UserV1Store {
|
||||
userMapByUsername: Record<string, User>;
|
||||
|
@ -1,10 +0,0 @@
|
||||
/* eslint-disable */
|
||||
|
||||
export const protobufPackage = "memos.api.v2";
|
||||
|
||||
export enum RowStatus {
|
||||
ROW_STATUS_UNSPECIFIED = 0,
|
||||
ACTIVE = 1,
|
||||
ARCHIVED = 2,
|
||||
UNRECOGNIZED = -1,
|
||||
}
|
@ -1,468 +0,0 @@
|
||||
/* eslint-disable */
|
||||
import Long from "long";
|
||||
import _m0 from "protobufjs/minimal";
|
||||
import { RowStatus } from "./common";
|
||||
|
||||
export const protobufPackage = "memos.api.v2";
|
||||
|
||||
export enum Visibility {
|
||||
VISIBILITY_UNSPECIFIED = 0,
|
||||
PRIVATE = 1,
|
||||
PROTECTED = 2,
|
||||
PUBLIC = 3,
|
||||
UNRECOGNIZED = -1,
|
||||
}
|
||||
|
||||
export interface Memo {
|
||||
id: number;
|
||||
rowStatus: RowStatus;
|
||||
creatorId: number;
|
||||
createdTs: number;
|
||||
updatedTs: number;
|
||||
content: string;
|
||||
visibility: Visibility;
|
||||
pinned: boolean;
|
||||
}
|
||||
|
||||
export interface ListMemosRequest {
|
||||
page: number;
|
||||
pageSize: number;
|
||||
/** Filter is used to filter memos returned in the list. */
|
||||
filter: string;
|
||||
}
|
||||
|
||||
export interface ListMemosResponse {
|
||||
memos: Memo[];
|
||||
}
|
||||
|
||||
export interface GetMemoRequest {
|
||||
id: number;
|
||||
}
|
||||
|
||||
export interface GetMemoResponse {
|
||||
memo?: Memo | undefined;
|
||||
}
|
||||
|
||||
function createBaseMemo(): Memo {
|
||||
return { id: 0, rowStatus: 0, creatorId: 0, createdTs: 0, updatedTs: 0, content: "", visibility: 0, pinned: false };
|
||||
}
|
||||
|
||||
export const Memo = {
|
||||
encode(message: Memo, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
|
||||
if (message.id !== 0) {
|
||||
writer.uint32(8).int32(message.id);
|
||||
}
|
||||
if (message.rowStatus !== 0) {
|
||||
writer.uint32(16).int32(message.rowStatus);
|
||||
}
|
||||
if (message.creatorId !== 0) {
|
||||
writer.uint32(24).int32(message.creatorId);
|
||||
}
|
||||
if (message.createdTs !== 0) {
|
||||
writer.uint32(32).int64(message.createdTs);
|
||||
}
|
||||
if (message.updatedTs !== 0) {
|
||||
writer.uint32(40).int64(message.updatedTs);
|
||||
}
|
||||
if (message.content !== "") {
|
||||
writer.uint32(50).string(message.content);
|
||||
}
|
||||
if (message.visibility !== 0) {
|
||||
writer.uint32(56).int32(message.visibility);
|
||||
}
|
||||
if (message.pinned === true) {
|
||||
writer.uint32(64).bool(message.pinned);
|
||||
}
|
||||
return writer;
|
||||
},
|
||||
|
||||
decode(input: _m0.Reader | Uint8Array, length?: number): Memo {
|
||||
const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
|
||||
let end = length === undefined ? reader.len : reader.pos + length;
|
||||
const message = createBaseMemo();
|
||||
while (reader.pos < end) {
|
||||
const tag = reader.uint32();
|
||||
switch (tag >>> 3) {
|
||||
case 1:
|
||||
if (tag !== 8) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.id = reader.int32();
|
||||
continue;
|
||||
case 2:
|
||||
if (tag !== 16) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.rowStatus = reader.int32() as any;
|
||||
continue;
|
||||
case 3:
|
||||
if (tag !== 24) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.creatorId = reader.int32();
|
||||
continue;
|
||||
case 4:
|
||||
if (tag !== 32) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.createdTs = longToNumber(reader.int64() as Long);
|
||||
continue;
|
||||
case 5:
|
||||
if (tag !== 40) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.updatedTs = longToNumber(reader.int64() as Long);
|
||||
continue;
|
||||
case 6:
|
||||
if (tag !== 50) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.content = reader.string();
|
||||
continue;
|
||||
case 7:
|
||||
if (tag !== 56) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.visibility = reader.int32() as any;
|
||||
continue;
|
||||
case 8:
|
||||
if (tag !== 64) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.pinned = reader.bool();
|
||||
continue;
|
||||
}
|
||||
if ((tag & 7) === 4 || tag === 0) {
|
||||
break;
|
||||
}
|
||||
reader.skipType(tag & 7);
|
||||
}
|
||||
return message;
|
||||
},
|
||||
|
||||
create(base?: DeepPartial<Memo>): Memo {
|
||||
return Memo.fromPartial(base ?? {});
|
||||
},
|
||||
|
||||
fromPartial(object: DeepPartial<Memo>): Memo {
|
||||
const message = createBaseMemo();
|
||||
message.id = object.id ?? 0;
|
||||
message.rowStatus = object.rowStatus ?? 0;
|
||||
message.creatorId = object.creatorId ?? 0;
|
||||
message.createdTs = object.createdTs ?? 0;
|
||||
message.updatedTs = object.updatedTs ?? 0;
|
||||
message.content = object.content ?? "";
|
||||
message.visibility = object.visibility ?? 0;
|
||||
message.pinned = object.pinned ?? false;
|
||||
return message;
|
||||
},
|
||||
};
|
||||
|
||||
function createBaseListMemosRequest(): ListMemosRequest {
|
||||
return { page: 0, pageSize: 0, filter: "" };
|
||||
}
|
||||
|
||||
export const ListMemosRequest = {
|
||||
encode(message: ListMemosRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
|
||||
if (message.page !== 0) {
|
||||
writer.uint32(8).int32(message.page);
|
||||
}
|
||||
if (message.pageSize !== 0) {
|
||||
writer.uint32(16).int32(message.pageSize);
|
||||
}
|
||||
if (message.filter !== "") {
|
||||
writer.uint32(26).string(message.filter);
|
||||
}
|
||||
return writer;
|
||||
},
|
||||
|
||||
decode(input: _m0.Reader | Uint8Array, length?: number): ListMemosRequest {
|
||||
const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
|
||||
let end = length === undefined ? reader.len : reader.pos + length;
|
||||
const message = createBaseListMemosRequest();
|
||||
while (reader.pos < end) {
|
||||
const tag = reader.uint32();
|
||||
switch (tag >>> 3) {
|
||||
case 1:
|
||||
if (tag !== 8) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.page = reader.int32();
|
||||
continue;
|
||||
case 2:
|
||||
if (tag !== 16) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.pageSize = reader.int32();
|
||||
continue;
|
||||
case 3:
|
||||
if (tag !== 26) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.filter = reader.string();
|
||||
continue;
|
||||
}
|
||||
if ((tag & 7) === 4 || tag === 0) {
|
||||
break;
|
||||
}
|
||||
reader.skipType(tag & 7);
|
||||
}
|
||||
return message;
|
||||
},
|
||||
|
||||
create(base?: DeepPartial<ListMemosRequest>): ListMemosRequest {
|
||||
return ListMemosRequest.fromPartial(base ?? {});
|
||||
},
|
||||
|
||||
fromPartial(object: DeepPartial<ListMemosRequest>): ListMemosRequest {
|
||||
const message = createBaseListMemosRequest();
|
||||
message.page = object.page ?? 0;
|
||||
message.pageSize = object.pageSize ?? 0;
|
||||
message.filter = object.filter ?? "";
|
||||
return message;
|
||||
},
|
||||
};
|
||||
|
||||
function createBaseListMemosResponse(): ListMemosResponse {
|
||||
return { memos: [] };
|
||||
}
|
||||
|
||||
export const ListMemosResponse = {
|
||||
encode(message: ListMemosResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
|
||||
for (const v of message.memos) {
|
||||
Memo.encode(v!, writer.uint32(10).fork()).ldelim();
|
||||
}
|
||||
return writer;
|
||||
},
|
||||
|
||||
decode(input: _m0.Reader | Uint8Array, length?: number): ListMemosResponse {
|
||||
const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
|
||||
let end = length === undefined ? reader.len : reader.pos + length;
|
||||
const message = createBaseListMemosResponse();
|
||||
while (reader.pos < end) {
|
||||
const tag = reader.uint32();
|
||||
switch (tag >>> 3) {
|
||||
case 1:
|
||||
if (tag !== 10) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.memos.push(Memo.decode(reader, reader.uint32()));
|
||||
continue;
|
||||
}
|
||||
if ((tag & 7) === 4 || tag === 0) {
|
||||
break;
|
||||
}
|
||||
reader.skipType(tag & 7);
|
||||
}
|
||||
return message;
|
||||
},
|
||||
|
||||
create(base?: DeepPartial<ListMemosResponse>): ListMemosResponse {
|
||||
return ListMemosResponse.fromPartial(base ?? {});
|
||||
},
|
||||
|
||||
fromPartial(object: DeepPartial<ListMemosResponse>): ListMemosResponse {
|
||||
const message = createBaseListMemosResponse();
|
||||
message.memos = object.memos?.map((e) => Memo.fromPartial(e)) || [];
|
||||
return message;
|
||||
},
|
||||
};
|
||||
|
||||
function createBaseGetMemoRequest(): GetMemoRequest {
|
||||
return { id: 0 };
|
||||
}
|
||||
|
||||
export const GetMemoRequest = {
|
||||
encode(message: GetMemoRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
|
||||
if (message.id !== 0) {
|
||||
writer.uint32(8).int32(message.id);
|
||||
}
|
||||
return writer;
|
||||
},
|
||||
|
||||
decode(input: _m0.Reader | Uint8Array, length?: number): GetMemoRequest {
|
||||
const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
|
||||
let end = length === undefined ? reader.len : reader.pos + length;
|
||||
const message = createBaseGetMemoRequest();
|
||||
while (reader.pos < end) {
|
||||
const tag = reader.uint32();
|
||||
switch (tag >>> 3) {
|
||||
case 1:
|
||||
if (tag !== 8) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.id = reader.int32();
|
||||
continue;
|
||||
}
|
||||
if ((tag & 7) === 4 || tag === 0) {
|
||||
break;
|
||||
}
|
||||
reader.skipType(tag & 7);
|
||||
}
|
||||
return message;
|
||||
},
|
||||
|
||||
create(base?: DeepPartial<GetMemoRequest>): GetMemoRequest {
|
||||
return GetMemoRequest.fromPartial(base ?? {});
|
||||
},
|
||||
|
||||
fromPartial(object: DeepPartial<GetMemoRequest>): GetMemoRequest {
|
||||
const message = createBaseGetMemoRequest();
|
||||
message.id = object.id ?? 0;
|
||||
return message;
|
||||
},
|
||||
};
|
||||
|
||||
function createBaseGetMemoResponse(): GetMemoResponse {
|
||||
return { memo: undefined };
|
||||
}
|
||||
|
||||
export const GetMemoResponse = {
|
||||
encode(message: GetMemoResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
|
||||
if (message.memo !== undefined) {
|
||||
Memo.encode(message.memo, writer.uint32(10).fork()).ldelim();
|
||||
}
|
||||
return writer;
|
||||
},
|
||||
|
||||
decode(input: _m0.Reader | Uint8Array, length?: number): GetMemoResponse {
|
||||
const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
|
||||
let end = length === undefined ? reader.len : reader.pos + length;
|
||||
const message = createBaseGetMemoResponse();
|
||||
while (reader.pos < end) {
|
||||
const tag = reader.uint32();
|
||||
switch (tag >>> 3) {
|
||||
case 1:
|
||||
if (tag !== 10) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.memo = Memo.decode(reader, reader.uint32());
|
||||
continue;
|
||||
}
|
||||
if ((tag & 7) === 4 || tag === 0) {
|
||||
break;
|
||||
}
|
||||
reader.skipType(tag & 7);
|
||||
}
|
||||
return message;
|
||||
},
|
||||
|
||||
create(base?: DeepPartial<GetMemoResponse>): GetMemoResponse {
|
||||
return GetMemoResponse.fromPartial(base ?? {});
|
||||
},
|
||||
|
||||
fromPartial(object: DeepPartial<GetMemoResponse>): GetMemoResponse {
|
||||
const message = createBaseGetMemoResponse();
|
||||
message.memo = (object.memo !== undefined && object.memo !== null) ? Memo.fromPartial(object.memo) : undefined;
|
||||
return message;
|
||||
},
|
||||
};
|
||||
|
||||
export type MemoServiceDefinition = typeof MemoServiceDefinition;
|
||||
export const MemoServiceDefinition = {
|
||||
name: "MemoService",
|
||||
fullName: "memos.api.v2.MemoService",
|
||||
methods: {
|
||||
listMemos: {
|
||||
name: "ListMemos",
|
||||
requestType: ListMemosRequest,
|
||||
requestStream: false,
|
||||
responseType: ListMemosResponse,
|
||||
responseStream: false,
|
||||
options: {
|
||||
_unknownFields: {
|
||||
578365826: [new Uint8Array([15, 18, 13, 47, 97, 112, 105, 47, 118, 50, 47, 109, 101, 109, 111, 115])],
|
||||
},
|
||||
},
|
||||
},
|
||||
getMemo: {
|
||||
name: "GetMemo",
|
||||
requestType: GetMemoRequest,
|
||||
requestStream: false,
|
||||
responseType: GetMemoResponse,
|
||||
responseStream: false,
|
||||
options: {
|
||||
_unknownFields: {
|
||||
8410: [new Uint8Array([2, 105, 100])],
|
||||
578365826: [
|
||||
new Uint8Array([
|
||||
20,
|
||||
18,
|
||||
18,
|
||||
47,
|
||||
97,
|
||||
112,
|
||||
105,
|
||||
47,
|
||||
118,
|
||||
50,
|
||||
47,
|
||||
109,
|
||||
101,
|
||||
109,
|
||||
111,
|
||||
115,
|
||||
47,
|
||||
123,
|
||||
105,
|
||||
100,
|
||||
125,
|
||||
]),
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
} as const;
|
||||
|
||||
declare const self: any | undefined;
|
||||
declare const window: any | undefined;
|
||||
declare const global: any | undefined;
|
||||
const tsProtoGlobalThis: any = (() => {
|
||||
if (typeof globalThis !== "undefined") {
|
||||
return globalThis;
|
||||
}
|
||||
if (typeof self !== "undefined") {
|
||||
return self;
|
||||
}
|
||||
if (typeof window !== "undefined") {
|
||||
return window;
|
||||
}
|
||||
if (typeof global !== "undefined") {
|
||||
return global;
|
||||
}
|
||||
throw "Unable to locate global object";
|
||||
})();
|
||||
|
||||
type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
|
||||
|
||||
export type DeepPartial<T> = T extends Builtin ? T
|
||||
: T extends Array<infer U> ? Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>>
|
||||
: T extends {} ? { [K in keyof T]?: DeepPartial<T[K]> }
|
||||
: Partial<T>;
|
||||
|
||||
function longToNumber(long: Long): number {
|
||||
if (long.gt(Number.MAX_SAFE_INTEGER)) {
|
||||
throw new tsProtoGlobalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
|
||||
}
|
||||
return long.toNumber();
|
||||
}
|
||||
|
||||
if (_m0.util.Long !== Long) {
|
||||
_m0.util.Long = Long as any;
|
||||
_m0.configure();
|
||||
}
|
@ -1,288 +0,0 @@
|
||||
/* eslint-disable */
|
||||
import Long from "long";
|
||||
import _m0 from "protobufjs/minimal";
|
||||
import { Timestamp } from "../../google/protobuf/timestamp";
|
||||
|
||||
export const protobufPackage = "memos.api.v2";
|
||||
|
||||
export interface Resource {
|
||||
id: number;
|
||||
createdTs?: Date | undefined;
|
||||
filename: string;
|
||||
externalLink: string;
|
||||
type: string;
|
||||
size: number;
|
||||
relatedMemoId?: number | undefined;
|
||||
}
|
||||
|
||||
export interface ListResourcesRequest {
|
||||
}
|
||||
|
||||
export interface ListResourcesResponse {
|
||||
resources: Resource[];
|
||||
}
|
||||
|
||||
function createBaseResource(): Resource {
|
||||
return { id: 0, createdTs: undefined, filename: "", externalLink: "", type: "", size: 0, relatedMemoId: undefined };
|
||||
}
|
||||
|
||||
export const Resource = {
|
||||
encode(message: Resource, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
|
||||
if (message.id !== 0) {
|
||||
writer.uint32(8).int32(message.id);
|
||||
}
|
||||
if (message.createdTs !== undefined) {
|
||||
Timestamp.encode(toTimestamp(message.createdTs), writer.uint32(18).fork()).ldelim();
|
||||
}
|
||||
if (message.filename !== "") {
|
||||
writer.uint32(26).string(message.filename);
|
||||
}
|
||||
if (message.externalLink !== "") {
|
||||
writer.uint32(34).string(message.externalLink);
|
||||
}
|
||||
if (message.type !== "") {
|
||||
writer.uint32(42).string(message.type);
|
||||
}
|
||||
if (message.size !== 0) {
|
||||
writer.uint32(48).int64(message.size);
|
||||
}
|
||||
if (message.relatedMemoId !== undefined) {
|
||||
writer.uint32(56).int32(message.relatedMemoId);
|
||||
}
|
||||
return writer;
|
||||
},
|
||||
|
||||
decode(input: _m0.Reader | Uint8Array, length?: number): Resource {
|
||||
const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
|
||||
let end = length === undefined ? reader.len : reader.pos + length;
|
||||
const message = createBaseResource();
|
||||
while (reader.pos < end) {
|
||||
const tag = reader.uint32();
|
||||
switch (tag >>> 3) {
|
||||
case 1:
|
||||
if (tag !== 8) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.id = reader.int32();
|
||||
continue;
|
||||
case 2:
|
||||
if (tag !== 18) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.createdTs = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
|
||||
continue;
|
||||
case 3:
|
||||
if (tag !== 26) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.filename = reader.string();
|
||||
continue;
|
||||
case 4:
|
||||
if (tag !== 34) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.externalLink = reader.string();
|
||||
continue;
|
||||
case 5:
|
||||
if (tag !== 42) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.type = reader.string();
|
||||
continue;
|
||||
case 6:
|
||||
if (tag !== 48) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.size = longToNumber(reader.int64() as Long);
|
||||
continue;
|
||||
case 7:
|
||||
if (tag !== 56) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.relatedMemoId = reader.int32();
|
||||
continue;
|
||||
}
|
||||
if ((tag & 7) === 4 || tag === 0) {
|
||||
break;
|
||||
}
|
||||
reader.skipType(tag & 7);
|
||||
}
|
||||
return message;
|
||||
},
|
||||
|
||||
create(base?: DeepPartial<Resource>): Resource {
|
||||
return Resource.fromPartial(base ?? {});
|
||||
},
|
||||
|
||||
fromPartial(object: DeepPartial<Resource>): Resource {
|
||||
const message = createBaseResource();
|
||||
message.id = object.id ?? 0;
|
||||
message.createdTs = object.createdTs ?? undefined;
|
||||
message.filename = object.filename ?? "";
|
||||
message.externalLink = object.externalLink ?? "";
|
||||
message.type = object.type ?? "";
|
||||
message.size = object.size ?? 0;
|
||||
message.relatedMemoId = object.relatedMemoId ?? undefined;
|
||||
return message;
|
||||
},
|
||||
};
|
||||
|
||||
function createBaseListResourcesRequest(): ListResourcesRequest {
|
||||
return {};
|
||||
}
|
||||
|
||||
export const ListResourcesRequest = {
|
||||
encode(_: ListResourcesRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
|
||||
return writer;
|
||||
},
|
||||
|
||||
decode(input: _m0.Reader | Uint8Array, length?: number): ListResourcesRequest {
|
||||
const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
|
||||
let end = length === undefined ? reader.len : reader.pos + length;
|
||||
const message = createBaseListResourcesRequest();
|
||||
while (reader.pos < end) {
|
||||
const tag = reader.uint32();
|
||||
switch (tag >>> 3) {
|
||||
}
|
||||
if ((tag & 7) === 4 || tag === 0) {
|
||||
break;
|
||||
}
|
||||
reader.skipType(tag & 7);
|
||||
}
|
||||
return message;
|
||||
},
|
||||
|
||||
create(base?: DeepPartial<ListResourcesRequest>): ListResourcesRequest {
|
||||
return ListResourcesRequest.fromPartial(base ?? {});
|
||||
},
|
||||
|
||||
fromPartial(_: DeepPartial<ListResourcesRequest>): ListResourcesRequest {
|
||||
const message = createBaseListResourcesRequest();
|
||||
return message;
|
||||
},
|
||||
};
|
||||
|
||||
function createBaseListResourcesResponse(): ListResourcesResponse {
|
||||
return { resources: [] };
|
||||
}
|
||||
|
||||
export const ListResourcesResponse = {
|
||||
encode(message: ListResourcesResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
|
||||
for (const v of message.resources) {
|
||||
Resource.encode(v!, writer.uint32(10).fork()).ldelim();
|
||||
}
|
||||
return writer;
|
||||
},
|
||||
|
||||
decode(input: _m0.Reader | Uint8Array, length?: number): ListResourcesResponse {
|
||||
const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
|
||||
let end = length === undefined ? reader.len : reader.pos + length;
|
||||
const message = createBaseListResourcesResponse();
|
||||
while (reader.pos < end) {
|
||||
const tag = reader.uint32();
|
||||
switch (tag >>> 3) {
|
||||
case 1:
|
||||
if (tag !== 10) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.resources.push(Resource.decode(reader, reader.uint32()));
|
||||
continue;
|
||||
}
|
||||
if ((tag & 7) === 4 || tag === 0) {
|
||||
break;
|
||||
}
|
||||
reader.skipType(tag & 7);
|
||||
}
|
||||
return message;
|
||||
},
|
||||
|
||||
create(base?: DeepPartial<ListResourcesResponse>): ListResourcesResponse {
|
||||
return ListResourcesResponse.fromPartial(base ?? {});
|
||||
},
|
||||
|
||||
fromPartial(object: DeepPartial<ListResourcesResponse>): ListResourcesResponse {
|
||||
const message = createBaseListResourcesResponse();
|
||||
message.resources = object.resources?.map((e) => Resource.fromPartial(e)) || [];
|
||||
return message;
|
||||
},
|
||||
};
|
||||
|
||||
export type ResourceServiceDefinition = typeof ResourceServiceDefinition;
|
||||
export const ResourceServiceDefinition = {
|
||||
name: "ResourceService",
|
||||
fullName: "memos.api.v2.ResourceService",
|
||||
methods: {
|
||||
listResources: {
|
||||
name: "ListResources",
|
||||
requestType: ListResourcesRequest,
|
||||
requestStream: false,
|
||||
responseType: ListResourcesResponse,
|
||||
responseStream: false,
|
||||
options: {
|
||||
_unknownFields: {
|
||||
578365826: [
|
||||
new Uint8Array([19, 18, 17, 47, 97, 112, 105, 47, 118, 50, 47, 114, 101, 115, 111, 117, 114, 99, 101, 115]),
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
} as const;
|
||||
|
||||
declare const self: any | undefined;
|
||||
declare const window: any | undefined;
|
||||
declare const global: any | undefined;
|
||||
const tsProtoGlobalThis: any = (() => {
|
||||
if (typeof globalThis !== "undefined") {
|
||||
return globalThis;
|
||||
}
|
||||
if (typeof self !== "undefined") {
|
||||
return self;
|
||||
}
|
||||
if (typeof window !== "undefined") {
|
||||
return window;
|
||||
}
|
||||
if (typeof global !== "undefined") {
|
||||
return global;
|
||||
}
|
||||
throw "Unable to locate global object";
|
||||
})();
|
||||
|
||||
type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
|
||||
|
||||
export type DeepPartial<T> = T extends Builtin ? T
|
||||
: T extends Array<infer U> ? Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>>
|
||||
: T extends {} ? { [K in keyof T]?: DeepPartial<T[K]> }
|
||||
: Partial<T>;
|
||||
|
||||
function toTimestamp(date: Date): Timestamp {
|
||||
const seconds = date.getTime() / 1_000;
|
||||
const nanos = (date.getTime() % 1_000) * 1_000_000;
|
||||
return { seconds, nanos };
|
||||
}
|
||||
|
||||
function fromTimestamp(t: Timestamp): Date {
|
||||
let millis = (t.seconds || 0) * 1_000;
|
||||
millis += (t.nanos || 0) / 1_000_000;
|
||||
return new Date(millis);
|
||||
}
|
||||
|
||||
function longToNumber(long: Long): number {
|
||||
if (long.gt(Number.MAX_SAFE_INTEGER)) {
|
||||
throw new tsProtoGlobalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
|
||||
}
|
||||
return long.toNumber();
|
||||
}
|
||||
|
||||
if (_m0.util.Long !== Long) {
|
||||
_m0.util.Long = Long as any;
|
||||
_m0.configure();
|
||||
}
|
@ -1,465 +0,0 @@
|
||||
/* eslint-disable */
|
||||
import Long from "long";
|
||||
import _m0 from "protobufjs/minimal";
|
||||
|
||||
export const protobufPackage = "memos.api.v2";
|
||||
|
||||
export interface SystemInfo {
|
||||
version: string;
|
||||
mode: string;
|
||||
allowRegistration: boolean;
|
||||
disablePasswordLogin: boolean;
|
||||
additionalScript: string;
|
||||
additionalStyle: string;
|
||||
dbSize: number;
|
||||
}
|
||||
|
||||
export interface GetSystemInfoRequest {
|
||||
}
|
||||
|
||||
export interface GetSystemInfoResponse {
|
||||
systemInfo?: SystemInfo | undefined;
|
||||
}
|
||||
|
||||
export interface UpdateSystemInfoRequest {
|
||||
/** System info is the updated data. */
|
||||
systemInfo?:
|
||||
| SystemInfo
|
||||
| undefined;
|
||||
/** Update mask is the array of paths. */
|
||||
updateMask: string[];
|
||||
}
|
||||
|
||||
export interface UpdateSystemInfoResponse {
|
||||
systemInfo?: SystemInfo | undefined;
|
||||
}
|
||||
|
||||
function createBaseSystemInfo(): SystemInfo {
|
||||
return {
|
||||
version: "",
|
||||
mode: "",
|
||||
allowRegistration: false,
|
||||
disablePasswordLogin: false,
|
||||
additionalScript: "",
|
||||
additionalStyle: "",
|
||||
dbSize: 0,
|
||||
};
|
||||
}
|
||||
|
||||
export const SystemInfo = {
|
||||
encode(message: SystemInfo, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
|
||||
if (message.version !== "") {
|
||||
writer.uint32(10).string(message.version);
|
||||
}
|
||||
if (message.mode !== "") {
|
||||
writer.uint32(18).string(message.mode);
|
||||
}
|
||||
if (message.allowRegistration === true) {
|
||||
writer.uint32(24).bool(message.allowRegistration);
|
||||
}
|
||||
if (message.disablePasswordLogin === true) {
|
||||
writer.uint32(32).bool(message.disablePasswordLogin);
|
||||
}
|
||||
if (message.additionalScript !== "") {
|
||||
writer.uint32(42).string(message.additionalScript);
|
||||
}
|
||||
if (message.additionalStyle !== "") {
|
||||
writer.uint32(50).string(message.additionalStyle);
|
||||
}
|
||||
if (message.dbSize !== 0) {
|
||||
writer.uint32(56).int64(message.dbSize);
|
||||
}
|
||||
return writer;
|
||||
},
|
||||
|
||||
decode(input: _m0.Reader | Uint8Array, length?: number): SystemInfo {
|
||||
const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
|
||||
let end = length === undefined ? reader.len : reader.pos + length;
|
||||
const message = createBaseSystemInfo();
|
||||
while (reader.pos < end) {
|
||||
const tag = reader.uint32();
|
||||
switch (tag >>> 3) {
|
||||
case 1:
|
||||
if (tag !== 10) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.version = reader.string();
|
||||
continue;
|
||||
case 2:
|
||||
if (tag !== 18) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.mode = reader.string();
|
||||
continue;
|
||||
case 3:
|
||||
if (tag !== 24) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.allowRegistration = reader.bool();
|
||||
continue;
|
||||
case 4:
|
||||
if (tag !== 32) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.disablePasswordLogin = reader.bool();
|
||||
continue;
|
||||
case 5:
|
||||
if (tag !== 42) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.additionalScript = reader.string();
|
||||
continue;
|
||||
case 6:
|
||||
if (tag !== 50) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.additionalStyle = reader.string();
|
||||
continue;
|
||||
case 7:
|
||||
if (tag !== 56) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.dbSize = longToNumber(reader.int64() as Long);
|
||||
continue;
|
||||
}
|
||||
if ((tag & 7) === 4 || tag === 0) {
|
||||
break;
|
||||
}
|
||||
reader.skipType(tag & 7);
|
||||
}
|
||||
return message;
|
||||
},
|
||||
|
||||
create(base?: DeepPartial<SystemInfo>): SystemInfo {
|
||||
return SystemInfo.fromPartial(base ?? {});
|
||||
},
|
||||
|
||||
fromPartial(object: DeepPartial<SystemInfo>): SystemInfo {
|
||||
const message = createBaseSystemInfo();
|
||||
message.version = object.version ?? "";
|
||||
message.mode = object.mode ?? "";
|
||||
message.allowRegistration = object.allowRegistration ?? false;
|
||||
message.disablePasswordLogin = object.disablePasswordLogin ?? false;
|
||||
message.additionalScript = object.additionalScript ?? "";
|
||||
message.additionalStyle = object.additionalStyle ?? "";
|
||||
message.dbSize = object.dbSize ?? 0;
|
||||
return message;
|
||||
},
|
||||
};
|
||||
|
||||
function createBaseGetSystemInfoRequest(): GetSystemInfoRequest {
|
||||
return {};
|
||||
}
|
||||
|
||||
export const GetSystemInfoRequest = {
|
||||
encode(_: GetSystemInfoRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
|
||||
return writer;
|
||||
},
|
||||
|
||||
decode(input: _m0.Reader | Uint8Array, length?: number): GetSystemInfoRequest {
|
||||
const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
|
||||
let end = length === undefined ? reader.len : reader.pos + length;
|
||||
const message = createBaseGetSystemInfoRequest();
|
||||
while (reader.pos < end) {
|
||||
const tag = reader.uint32();
|
||||
switch (tag >>> 3) {
|
||||
}
|
||||
if ((tag & 7) === 4 || tag === 0) {
|
||||
break;
|
||||
}
|
||||
reader.skipType(tag & 7);
|
||||
}
|
||||
return message;
|
||||
},
|
||||
|
||||
create(base?: DeepPartial<GetSystemInfoRequest>): GetSystemInfoRequest {
|
||||
return GetSystemInfoRequest.fromPartial(base ?? {});
|
||||
},
|
||||
|
||||
fromPartial(_: DeepPartial<GetSystemInfoRequest>): GetSystemInfoRequest {
|
||||
const message = createBaseGetSystemInfoRequest();
|
||||
return message;
|
||||
},
|
||||
};
|
||||
|
||||
function createBaseGetSystemInfoResponse(): GetSystemInfoResponse {
|
||||
return { systemInfo: undefined };
|
||||
}
|
||||
|
||||
export const GetSystemInfoResponse = {
|
||||
encode(message: GetSystemInfoResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
|
||||
if (message.systemInfo !== undefined) {
|
||||
SystemInfo.encode(message.systemInfo, writer.uint32(10).fork()).ldelim();
|
||||
}
|
||||
return writer;
|
||||
},
|
||||
|
||||
decode(input: _m0.Reader | Uint8Array, length?: number): GetSystemInfoResponse {
|
||||
const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
|
||||
let end = length === undefined ? reader.len : reader.pos + length;
|
||||
const message = createBaseGetSystemInfoResponse();
|
||||
while (reader.pos < end) {
|
||||
const tag = reader.uint32();
|
||||
switch (tag >>> 3) {
|
||||
case 1:
|
||||
if (tag !== 10) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.systemInfo = SystemInfo.decode(reader, reader.uint32());
|
||||
continue;
|
||||
}
|
||||
if ((tag & 7) === 4 || tag === 0) {
|
||||
break;
|
||||
}
|
||||
reader.skipType(tag & 7);
|
||||
}
|
||||
return message;
|
||||
},
|
||||
|
||||
create(base?: DeepPartial<GetSystemInfoResponse>): GetSystemInfoResponse {
|
||||
return GetSystemInfoResponse.fromPartial(base ?? {});
|
||||
},
|
||||
|
||||
fromPartial(object: DeepPartial<GetSystemInfoResponse>): GetSystemInfoResponse {
|
||||
const message = createBaseGetSystemInfoResponse();
|
||||
message.systemInfo = (object.systemInfo !== undefined && object.systemInfo !== null)
|
||||
? SystemInfo.fromPartial(object.systemInfo)
|
||||
: undefined;
|
||||
return message;
|
||||
},
|
||||
};
|
||||
|
||||
function createBaseUpdateSystemInfoRequest(): UpdateSystemInfoRequest {
|
||||
return { systemInfo: undefined, updateMask: [] };
|
||||
}
|
||||
|
||||
export const UpdateSystemInfoRequest = {
|
||||
encode(message: UpdateSystemInfoRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
|
||||
if (message.systemInfo !== undefined) {
|
||||
SystemInfo.encode(message.systemInfo, writer.uint32(10).fork()).ldelim();
|
||||
}
|
||||
for (const v of message.updateMask) {
|
||||
writer.uint32(18).string(v!);
|
||||
}
|
||||
return writer;
|
||||
},
|
||||
|
||||
decode(input: _m0.Reader | Uint8Array, length?: number): UpdateSystemInfoRequest {
|
||||
const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
|
||||
let end = length === undefined ? reader.len : reader.pos + length;
|
||||
const message = createBaseUpdateSystemInfoRequest();
|
||||
while (reader.pos < end) {
|
||||
const tag = reader.uint32();
|
||||
switch (tag >>> 3) {
|
||||
case 1:
|
||||
if (tag !== 10) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.systemInfo = SystemInfo.decode(reader, reader.uint32());
|
||||
continue;
|
||||
case 2:
|
||||
if (tag !== 18) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.updateMask.push(reader.string());
|
||||
continue;
|
||||
}
|
||||
if ((tag & 7) === 4 || tag === 0) {
|
||||
break;
|
||||
}
|
||||
reader.skipType(tag & 7);
|
||||
}
|
||||
return message;
|
||||
},
|
||||
|
||||
create(base?: DeepPartial<UpdateSystemInfoRequest>): UpdateSystemInfoRequest {
|
||||
return UpdateSystemInfoRequest.fromPartial(base ?? {});
|
||||
},
|
||||
|
||||
fromPartial(object: DeepPartial<UpdateSystemInfoRequest>): UpdateSystemInfoRequest {
|
||||
const message = createBaseUpdateSystemInfoRequest();
|
||||
message.systemInfo = (object.systemInfo !== undefined && object.systemInfo !== null)
|
||||
? SystemInfo.fromPartial(object.systemInfo)
|
||||
: undefined;
|
||||
message.updateMask = object.updateMask?.map((e) => e) || [];
|
||||
return message;
|
||||
},
|
||||
};
|
||||
|
||||
function createBaseUpdateSystemInfoResponse(): UpdateSystemInfoResponse {
|
||||
return { systemInfo: undefined };
|
||||
}
|
||||
|
||||
export const UpdateSystemInfoResponse = {
|
||||
encode(message: UpdateSystemInfoResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
|
||||
if (message.systemInfo !== undefined) {
|
||||
SystemInfo.encode(message.systemInfo, writer.uint32(10).fork()).ldelim();
|
||||
}
|
||||
return writer;
|
||||
},
|
||||
|
||||
decode(input: _m0.Reader | Uint8Array, length?: number): UpdateSystemInfoResponse {
|
||||
const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
|
||||
let end = length === undefined ? reader.len : reader.pos + length;
|
||||
const message = createBaseUpdateSystemInfoResponse();
|
||||
while (reader.pos < end) {
|
||||
const tag = reader.uint32();
|
||||
switch (tag >>> 3) {
|
||||
case 1:
|
||||
if (tag !== 10) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.systemInfo = SystemInfo.decode(reader, reader.uint32());
|
||||
continue;
|
||||
}
|
||||
if ((tag & 7) === 4 || tag === 0) {
|
||||
break;
|
||||
}
|
||||
reader.skipType(tag & 7);
|
||||
}
|
||||
return message;
|
||||
},
|
||||
|
||||
create(base?: DeepPartial<UpdateSystemInfoResponse>): UpdateSystemInfoResponse {
|
||||
return UpdateSystemInfoResponse.fromPartial(base ?? {});
|
||||
},
|
||||
|
||||
fromPartial(object: DeepPartial<UpdateSystemInfoResponse>): UpdateSystemInfoResponse {
|
||||
const message = createBaseUpdateSystemInfoResponse();
|
||||
message.systemInfo = (object.systemInfo !== undefined && object.systemInfo !== null)
|
||||
? SystemInfo.fromPartial(object.systemInfo)
|
||||
: undefined;
|
||||
return message;
|
||||
},
|
||||
};
|
||||
|
||||
export type SystemServiceDefinition = typeof SystemServiceDefinition;
|
||||
export const SystemServiceDefinition = {
|
||||
name: "SystemService",
|
||||
fullName: "memos.api.v2.SystemService",
|
||||
methods: {
|
||||
getSystemInfo: {
|
||||
name: "GetSystemInfo",
|
||||
requestType: GetSystemInfoRequest,
|
||||
requestStream: false,
|
||||
responseType: GetSystemInfoResponse,
|
||||
responseStream: false,
|
||||
options: {
|
||||
_unknownFields: {
|
||||
578365826: [
|
||||
new Uint8Array([
|
||||
21,
|
||||
18,
|
||||
19,
|
||||
47,
|
||||
97,
|
||||
112,
|
||||
105,
|
||||
47,
|
||||
118,
|
||||
50,
|
||||
47,
|
||||
115,
|
||||
121,
|
||||
115,
|
||||
116,
|
||||
101,
|
||||
109,
|
||||
47,
|
||||
105,
|
||||
110,
|
||||
102,
|
||||
111,
|
||||
]),
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
updateSystemInfo: {
|
||||
name: "UpdateSystemInfo",
|
||||
requestType: UpdateSystemInfoRequest,
|
||||
requestStream: false,
|
||||
responseType: UpdateSystemInfoResponse,
|
||||
responseStream: false,
|
||||
options: {
|
||||
_unknownFields: {
|
||||
578365826: [
|
||||
new Uint8Array([
|
||||
21,
|
||||
34,
|
||||
19,
|
||||
47,
|
||||
97,
|
||||
112,
|
||||
105,
|
||||
47,
|
||||
118,
|
||||
50,
|
||||
47,
|
||||
115,
|
||||
121,
|
||||
115,
|
||||
116,
|
||||
101,
|
||||
109,
|
||||
47,
|
||||
105,
|
||||
110,
|
||||
102,
|
||||
111,
|
||||
]),
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
} as const;
|
||||
|
||||
declare const self: any | undefined;
|
||||
declare const window: any | undefined;
|
||||
declare const global: any | undefined;
|
||||
const tsProtoGlobalThis: any = (() => {
|
||||
if (typeof globalThis !== "undefined") {
|
||||
return globalThis;
|
||||
}
|
||||
if (typeof self !== "undefined") {
|
||||
return self;
|
||||
}
|
||||
if (typeof window !== "undefined") {
|
||||
return window;
|
||||
}
|
||||
if (typeof global !== "undefined") {
|
||||
return global;
|
||||
}
|
||||
throw "Unable to locate global object";
|
||||
})();
|
||||
|
||||
type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
|
||||
|
||||
export type DeepPartial<T> = T extends Builtin ? T
|
||||
: T extends Array<infer U> ? Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>>
|
||||
: T extends {} ? { [K in keyof T]?: DeepPartial<T[K]> }
|
||||
: Partial<T>;
|
||||
|
||||
function longToNumber(long: Long): number {
|
||||
if (long.gt(Number.MAX_SAFE_INTEGER)) {
|
||||
throw new tsProtoGlobalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
|
||||
}
|
||||
return long.toNumber();
|
||||
}
|
||||
|
||||
if (_m0.util.Long !== Long) {
|
||||
_m0.util.Long = Long as any;
|
||||
_m0.configure();
|
||||
}
|
@ -1,193 +0,0 @@
|
||||
/* eslint-disable */
|
||||
import _m0 from "protobufjs/minimal";
|
||||
|
||||
export const protobufPackage = "memos.api.v2";
|
||||
|
||||
export interface Tag {
|
||||
name: string;
|
||||
creatorId: number;
|
||||
}
|
||||
|
||||
export interface ListTagsRequest {
|
||||
creatorId: number;
|
||||
}
|
||||
|
||||
export interface ListTagsResponse {
|
||||
tags: Tag[];
|
||||
}
|
||||
|
||||
function createBaseTag(): Tag {
|
||||
return { name: "", creatorId: 0 };
|
||||
}
|
||||
|
||||
export const Tag = {
|
||||
encode(message: Tag, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
|
||||
if (message.name !== "") {
|
||||
writer.uint32(10).string(message.name);
|
||||
}
|
||||
if (message.creatorId !== 0) {
|
||||
writer.uint32(16).int32(message.creatorId);
|
||||
}
|
||||
return writer;
|
||||
},
|
||||
|
||||
decode(input: _m0.Reader | Uint8Array, length?: number): Tag {
|
||||
const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
|
||||
let end = length === undefined ? reader.len : reader.pos + length;
|
||||
const message = createBaseTag();
|
||||
while (reader.pos < end) {
|
||||
const tag = reader.uint32();
|
||||
switch (tag >>> 3) {
|
||||
case 1:
|
||||
if (tag !== 10) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.name = reader.string();
|
||||
continue;
|
||||
case 2:
|
||||
if (tag !== 16) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.creatorId = reader.int32();
|
||||
continue;
|
||||
}
|
||||
if ((tag & 7) === 4 || tag === 0) {
|
||||
break;
|
||||
}
|
||||
reader.skipType(tag & 7);
|
||||
}
|
||||
return message;
|
||||
},
|
||||
|
||||
create(base?: DeepPartial<Tag>): Tag {
|
||||
return Tag.fromPartial(base ?? {});
|
||||
},
|
||||
|
||||
fromPartial(object: DeepPartial<Tag>): Tag {
|
||||
const message = createBaseTag();
|
||||
message.name = object.name ?? "";
|
||||
message.creatorId = object.creatorId ?? 0;
|
||||
return message;
|
||||
},
|
||||
};
|
||||
|
||||
function createBaseListTagsRequest(): ListTagsRequest {
|
||||
return { creatorId: 0 };
|
||||
}
|
||||
|
||||
export const ListTagsRequest = {
|
||||
encode(message: ListTagsRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
|
||||
if (message.creatorId !== 0) {
|
||||
writer.uint32(8).int32(message.creatorId);
|
||||
}
|
||||
return writer;
|
||||
},
|
||||
|
||||
decode(input: _m0.Reader | Uint8Array, length?: number): ListTagsRequest {
|
||||
const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
|
||||
let end = length === undefined ? reader.len : reader.pos + length;
|
||||
const message = createBaseListTagsRequest();
|
||||
while (reader.pos < end) {
|
||||
const tag = reader.uint32();
|
||||
switch (tag >>> 3) {
|
||||
case 1:
|
||||
if (tag !== 8) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.creatorId = reader.int32();
|
||||
continue;
|
||||
}
|
||||
if ((tag & 7) === 4 || tag === 0) {
|
||||
break;
|
||||
}
|
||||
reader.skipType(tag & 7);
|
||||
}
|
||||
return message;
|
||||
},
|
||||
|
||||
create(base?: DeepPartial<ListTagsRequest>): ListTagsRequest {
|
||||
return ListTagsRequest.fromPartial(base ?? {});
|
||||
},
|
||||
|
||||
fromPartial(object: DeepPartial<ListTagsRequest>): ListTagsRequest {
|
||||
const message = createBaseListTagsRequest();
|
||||
message.creatorId = object.creatorId ?? 0;
|
||||
return message;
|
||||
},
|
||||
};
|
||||
|
||||
function createBaseListTagsResponse(): ListTagsResponse {
|
||||
return { tags: [] };
|
||||
}
|
||||
|
||||
export const ListTagsResponse = {
|
||||
encode(message: ListTagsResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
|
||||
for (const v of message.tags) {
|
||||
Tag.encode(v!, writer.uint32(10).fork()).ldelim();
|
||||
}
|
||||
return writer;
|
||||
},
|
||||
|
||||
decode(input: _m0.Reader | Uint8Array, length?: number): ListTagsResponse {
|
||||
const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
|
||||
let end = length === undefined ? reader.len : reader.pos + length;
|
||||
const message = createBaseListTagsResponse();
|
||||
while (reader.pos < end) {
|
||||
const tag = reader.uint32();
|
||||
switch (tag >>> 3) {
|
||||
case 1:
|
||||
if (tag !== 10) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.tags.push(Tag.decode(reader, reader.uint32()));
|
||||
continue;
|
||||
}
|
||||
if ((tag & 7) === 4 || tag === 0) {
|
||||
break;
|
||||
}
|
||||
reader.skipType(tag & 7);
|
||||
}
|
||||
return message;
|
||||
},
|
||||
|
||||
create(base?: DeepPartial<ListTagsResponse>): ListTagsResponse {
|
||||
return ListTagsResponse.fromPartial(base ?? {});
|
||||
},
|
||||
|
||||
fromPartial(object: DeepPartial<ListTagsResponse>): ListTagsResponse {
|
||||
const message = createBaseListTagsResponse();
|
||||
message.tags = object.tags?.map((e) => Tag.fromPartial(e)) || [];
|
||||
return message;
|
||||
},
|
||||
};
|
||||
|
||||
export type TagServiceDefinition = typeof TagServiceDefinition;
|
||||
export const TagServiceDefinition = {
|
||||
name: "TagService",
|
||||
fullName: "memos.api.v2.TagService",
|
||||
methods: {
|
||||
listTags: {
|
||||
name: "ListTags",
|
||||
requestType: ListTagsRequest,
|
||||
requestStream: false,
|
||||
responseType: ListTagsResponse,
|
||||
responseStream: false,
|
||||
options: {
|
||||
_unknownFields: {
|
||||
578365826: [new Uint8Array([14, 18, 12, 47, 97, 112, 105, 47, 118, 50, 47, 116, 97, 103, 115])],
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
} as const;
|
||||
|
||||
type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
|
||||
|
||||
export type DeepPartial<T> = T extends Builtin ? T
|
||||
: T extends Array<infer U> ? Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>>
|
||||
: T extends {} ? { [K in keyof T]?: DeepPartial<T[K]> }
|
||||
: Partial<T>;
|
File diff suppressed because it is too large
Load Diff
@ -1,207 +0,0 @@
|
||||
/* eslint-disable */
|
||||
import Long from "long";
|
||||
import _m0 from "protobufjs/minimal";
|
||||
|
||||
export const protobufPackage = "google.protobuf";
|
||||
|
||||
/**
|
||||
* A Timestamp represents a point in time independent of any time zone or local
|
||||
* calendar, encoded as a count of seconds and fractions of seconds at
|
||||
* nanosecond resolution. The count is relative to an epoch at UTC midnight on
|
||||
* January 1, 1970, in the proleptic Gregorian calendar which extends the
|
||||
* Gregorian calendar backwards to year one.
|
||||
*
|
||||
* All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap
|
||||
* second table is needed for interpretation, using a [24-hour linear
|
||||
* smear](https://developers.google.com/time/smear).
|
||||
*
|
||||
* The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By
|
||||
* restricting to that range, we ensure that we can convert to and from [RFC
|
||||
* 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.
|
||||
*
|
||||
* # Examples
|
||||
*
|
||||
* Example 1: Compute Timestamp from POSIX `time()`.
|
||||
*
|
||||
* Timestamp timestamp;
|
||||
* timestamp.set_seconds(time(NULL));
|
||||
* timestamp.set_nanos(0);
|
||||
*
|
||||
* Example 2: Compute Timestamp from POSIX `gettimeofday()`.
|
||||
*
|
||||
* struct timeval tv;
|
||||
* gettimeofday(&tv, NULL);
|
||||
*
|
||||
* Timestamp timestamp;
|
||||
* timestamp.set_seconds(tv.tv_sec);
|
||||
* timestamp.set_nanos(tv.tv_usec * 1000);
|
||||
*
|
||||
* Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
|
||||
*
|
||||
* FILETIME ft;
|
||||
* GetSystemTimeAsFileTime(&ft);
|
||||
* UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
|
||||
*
|
||||
* // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z
|
||||
* // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.
|
||||
* Timestamp timestamp;
|
||||
* timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));
|
||||
* timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
|
||||
*
|
||||
* Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
|
||||
*
|
||||
* long millis = System.currentTimeMillis();
|
||||
*
|
||||
* Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)
|
||||
* .setNanos((int) ((millis % 1000) * 1000000)).build();
|
||||
*
|
||||
* Example 5: Compute Timestamp from Java `Instant.now()`.
|
||||
*
|
||||
* Instant now = Instant.now();
|
||||
*
|
||||
* Timestamp timestamp =
|
||||
* Timestamp.newBuilder().setSeconds(now.getEpochSecond())
|
||||
* .setNanos(now.getNano()).build();
|
||||
*
|
||||
* Example 6: Compute Timestamp from current time in Python.
|
||||
*
|
||||
* timestamp = Timestamp()
|
||||
* timestamp.GetCurrentTime()
|
||||
*
|
||||
* # JSON Mapping
|
||||
*
|
||||
* In JSON format, the Timestamp type is encoded as a string in the
|
||||
* [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the
|
||||
* format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z"
|
||||
* where {year} is always expressed using four digits while {month}, {day},
|
||||
* {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional
|
||||
* seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),
|
||||
* are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone
|
||||
* is required. A proto3 JSON serializer should always use UTC (as indicated by
|
||||
* "Z") when printing the Timestamp type and a proto3 JSON parser should be
|
||||
* able to accept both UTC and other timezones (as indicated by an offset).
|
||||
*
|
||||
* For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past
|
||||
* 01:30 UTC on January 15, 2017.
|
||||
*
|
||||
* In JavaScript, one can convert a Date object to this format using the
|
||||
* standard
|
||||
* [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)
|
||||
* method. In Python, a standard `datetime.datetime` object can be converted
|
||||
* to this format using
|
||||
* [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with
|
||||
* the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use
|
||||
* the Joda Time's [`ISODateTimeFormat.dateTime()`](
|
||||
* http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D
|
||||
* ) to obtain a formatter capable of generating timestamps in this format.
|
||||
*/
|
||||
export interface Timestamp {
|
||||
/**
|
||||
* Represents seconds of UTC time since Unix epoch
|
||||
* 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
|
||||
* 9999-12-31T23:59:59Z inclusive.
|
||||
*/
|
||||
seconds: number;
|
||||
/**
|
||||
* Non-negative fractions of a second at nanosecond resolution. Negative
|
||||
* second values with fractions must still have non-negative nanos values
|
||||
* that count forward in time. Must be from 0 to 999,999,999
|
||||
* inclusive.
|
||||
*/
|
||||
nanos: number;
|
||||
}
|
||||
|
||||
function createBaseTimestamp(): Timestamp {
|
||||
return { seconds: 0, nanos: 0 };
|
||||
}
|
||||
|
||||
export const Timestamp = {
|
||||
encode(message: Timestamp, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
|
||||
if (message.seconds !== 0) {
|
||||
writer.uint32(8).int64(message.seconds);
|
||||
}
|
||||
if (message.nanos !== 0) {
|
||||
writer.uint32(16).int32(message.nanos);
|
||||
}
|
||||
return writer;
|
||||
},
|
||||
|
||||
decode(input: _m0.Reader | Uint8Array, length?: number): Timestamp {
|
||||
const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
|
||||
let end = length === undefined ? reader.len : reader.pos + length;
|
||||
const message = createBaseTimestamp();
|
||||
while (reader.pos < end) {
|
||||
const tag = reader.uint32();
|
||||
switch (tag >>> 3) {
|
||||
case 1:
|
||||
if (tag !== 8) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.seconds = longToNumber(reader.int64() as Long);
|
||||
continue;
|
||||
case 2:
|
||||
if (tag !== 16) {
|
||||
break;
|
||||
}
|
||||
|
||||
message.nanos = reader.int32();
|
||||
continue;
|
||||
}
|
||||
if ((tag & 7) === 4 || tag === 0) {
|
||||
break;
|
||||
}
|
||||
reader.skipType(tag & 7);
|
||||
}
|
||||
return message;
|
||||
},
|
||||
|
||||
create(base?: DeepPartial<Timestamp>): Timestamp {
|
||||
return Timestamp.fromPartial(base ?? {});
|
||||
},
|
||||
|
||||
fromPartial(object: DeepPartial<Timestamp>): Timestamp {
|
||||
const message = createBaseTimestamp();
|
||||
message.seconds = object.seconds ?? 0;
|
||||
message.nanos = object.nanos ?? 0;
|
||||
return message;
|
||||
},
|
||||
};
|
||||
|
||||
declare const self: any | undefined;
|
||||
declare const window: any | undefined;
|
||||
declare const global: any | undefined;
|
||||
const tsProtoGlobalThis: any = (() => {
|
||||
if (typeof globalThis !== "undefined") {
|
||||
return globalThis;
|
||||
}
|
||||
if (typeof self !== "undefined") {
|
||||
return self;
|
||||
}
|
||||
if (typeof window !== "undefined") {
|
||||
return window;
|
||||
}
|
||||
if (typeof global !== "undefined") {
|
||||
return global;
|
||||
}
|
||||
throw "Unable to locate global object";
|
||||
})();
|
||||
|
||||
type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
|
||||
|
||||
export type DeepPartial<T> = T extends Builtin ? T
|
||||
: T extends Array<infer U> ? Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>>
|
||||
: T extends {} ? { [K in keyof T]?: DeepPartial<T[K]> }
|
||||
: Partial<T>;
|
||||
|
||||
function longToNumber(long: Long): number {
|
||||
if (long.gt(Number.MAX_SAFE_INTEGER)) {
|
||||
throw new tsProtoGlobalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
|
||||
}
|
||||
return long.toNumber();
|
||||
}
|
||||
|
||||
if (_m0.util.Long !== Long) {
|
||||
_m0.util.Long = Long as any;
|
||||
_m0.configure();
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
import { Resource } from "@/types/proto-grpcweb/api/v2/resource_service";
|
||||
import { Resource } from "@/types/proto/api/v2/resource_service";
|
||||
|
||||
export const getResourceUrl = (resource: Resource, withOrigin = true) => {
|
||||
if (resource.externalLink) {
|
||||
|
Reference in New Issue
Block a user