summaryrefslogtreecommitdiff
path: root/src/server/api/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/api/common')
-rw-r--r--src/server/api/common/drive/add-file.ts8
-rw-r--r--src/server/api/common/drive/upload_from_url.ts2
-rw-r--r--src/server/api/common/get-friends.ts2
-rw-r--r--src/server/api/common/notify.ts6
-rw-r--r--src/server/api/common/push-sw.ts2
-rw-r--r--src/server/api/common/read-messaging-message.ts4
-rw-r--r--src/server/api/common/read-notification.ts2
-rw-r--r--src/server/api/common/text/core/syntax-highlighter.ts334
-rw-r--r--src/server/api/common/text/elements/bold.ts14
-rw-r--r--src/server/api/common/text/elements/code.ts17
-rw-r--r--src/server/api/common/text/elements/emoji.ts14
-rw-r--r--src/server/api/common/text/elements/hashtag.ts19
-rw-r--r--src/server/api/common/text/elements/inline-code.ts17
-rw-r--r--src/server/api/common/text/elements/link.ts19
-rw-r--r--src/server/api/common/text/elements/mention.ts17
-rw-r--r--src/server/api/common/text/elements/quote.ts14
-rw-r--r--src/server/api/common/text/elements/url.ts14
-rw-r--r--src/server/api/common/text/index.ts72
-rw-r--r--src/server/api/common/watch-post.ts2
19 files changed, 14 insertions, 565 deletions
diff --git a/src/server/api/common/drive/add-file.ts b/src/server/api/common/drive/add-file.ts
index 21ddd1aae3..4551f55748 100644
--- a/src/server/api/common/drive/add-file.ts
+++ b/src/server/api/common/drive/add-file.ts
@@ -10,11 +10,11 @@ import * as debug from 'debug';
import fileType = require('file-type');
import prominence = require('prominence');
-import DriveFile, { getGridFSBucket } from '../../models/drive-file';
-import DriveFolder from '../../models/drive-folder';
-import { pack } from '../../models/drive-file';
+import DriveFile, { getGridFSBucket } from '../../../../models/drive-file';
+import DriveFolder from '../../../../models/drive-folder';
+import { pack } from '../../../../models/drive-file';
import event, { publishDriveStream } from '../../event';
-import getAcct from '../../../common/user/get-acct';
+import getAcct from '../../../../common/user/get-acct';
import config from '../../../../conf';
const gm = _gm.subClass({
diff --git a/src/server/api/common/drive/upload_from_url.ts b/src/server/api/common/drive/upload_from_url.ts
index 5dd9695936..b825e4c531 100644
--- a/src/server/api/common/drive/upload_from_url.ts
+++ b/src/server/api/common/drive/upload_from_url.ts
@@ -1,5 +1,5 @@
import * as URL from 'url';
-import { IDriveFile, validateFileName } from '../../models/drive-file';
+import { IDriveFile, validateFileName } from '../../../../models/drive-file';
import create from './add-file';
import * as debug from 'debug';
import * as tmp from 'tmp';
diff --git a/src/server/api/common/get-friends.ts b/src/server/api/common/get-friends.ts
index 7f548b3bbf..e0942e0292 100644
--- a/src/server/api/common/get-friends.ts
+++ b/src/server/api/common/get-friends.ts
@@ -1,5 +1,5 @@
import * as mongodb from 'mongodb';
-import Following from '../models/following';
+import Following from '../../../models/following';
export default async (me: mongodb.ObjectID, includeMe: boolean = true) => {
// Fetch relation to other users who the I follows
diff --git a/src/server/api/common/notify.ts b/src/server/api/common/notify.ts
index c4df17f880..f90506cf3c 100644
--- a/src/server/api/common/notify.ts
+++ b/src/server/api/common/notify.ts
@@ -1,8 +1,8 @@
import * as mongo from 'mongodb';
-import Notification from '../models/notification';
-import Mute from '../models/mute';
+import Notification from '../../../models/notification';
+import Mute from '../../../models/mute';
import event from '../event';
-import { pack } from '../models/notification';
+import { pack } from '../../../models/notification';
export default (
notifiee: mongo.ObjectID,
diff --git a/src/server/api/common/push-sw.ts b/src/server/api/common/push-sw.ts
index e5fbec10ec..13227af8d5 100644
--- a/src/server/api/common/push-sw.ts
+++ b/src/server/api/common/push-sw.ts
@@ -1,6 +1,6 @@
const push = require('web-push');
import * as mongo from 'mongodb';
-import Subscription from '../models/sw-subscription';
+import Subscription from '../../../models/sw-subscription';
import config from '../../../conf';
if (config.sw) {
diff --git a/src/server/api/common/read-messaging-message.ts b/src/server/api/common/read-messaging-message.ts
index 9047edec8c..f728130bb3 100644
--- a/src/server/api/common/read-messaging-message.ts
+++ b/src/server/api/common/read-messaging-message.ts
@@ -1,6 +1,6 @@
import * as mongo from 'mongodb';
-import Message from '../models/messaging-message';
-import { IMessagingMessage as IMessage } from '../models/messaging-message';
+import Message from '../../../models/messaging-message';
+import { IMessagingMessage as IMessage } from '../../../models/messaging-message';
import publishUserStream from '../event';
import { publishMessagingStream } from '../event';
import { publishMessagingIndexStream } from '../event';
diff --git a/src/server/api/common/read-notification.ts b/src/server/api/common/read-notification.ts
index 5bbf136323..27632c7ecd 100644
--- a/src/server/api/common/read-notification.ts
+++ b/src/server/api/common/read-notification.ts
@@ -1,5 +1,5 @@
import * as mongo from 'mongodb';
-import { default as Notification, INotification } from '../models/notification';
+import { default as Notification, INotification } from '../../../models/notification';
import publishUserStream from '../event';
/**
diff --git a/src/server/api/common/text/core/syntax-highlighter.ts b/src/server/api/common/text/core/syntax-highlighter.ts
deleted file mode 100644
index c0396b1fc6..0000000000
--- a/src/server/api/common/text/core/syntax-highlighter.ts
+++ /dev/null
@@ -1,334 +0,0 @@
-function escape(text) {
- return text
- .replace(/>/g, '>')
- .replace(/</g, '&lt;');
-}
-
-// 文字数が多い順にソートします
-// そうしないと、「function」という文字列が与えられたときに「func」が先にマッチしてしまう可能性があるためです
-const _keywords = [
- 'true',
- 'false',
- 'null',
- 'nil',
- 'undefined',
- 'void',
- 'var',
- 'const',
- 'let',
- 'mut',
- 'dim',
- 'if',
- 'then',
- 'else',
- 'switch',
- 'match',
- 'case',
- 'default',
- 'for',
- 'each',
- 'in',
- 'while',
- 'loop',
- 'continue',
- 'break',
- 'do',
- 'goto',
- 'next',
- 'end',
- 'sub',
- 'throw',
- 'try',
- 'catch',
- 'finally',
- 'enum',
- 'delegate',
- 'function',
- 'func',
- 'fun',
- 'fn',
- 'return',
- 'yield',
- 'async',
- 'await',
- 'require',
- 'include',
- 'import',
- 'imports',
- 'export',
- 'exports',
- 'from',
- 'as',
- 'using',
- 'use',
- 'internal',
- 'module',
- 'namespace',
- 'where',
- 'select',
- 'struct',
- 'union',
- 'new',
- 'delete',
- 'this',
- 'super',
- 'base',
- 'class',
- 'interface',
- 'abstract',
- 'static',
- 'public',
- 'private',
- 'protected',
- 'virtual',
- 'partial',
- 'override',
- 'extends',
- 'implements',
- 'constructor'
-];
-
-const keywords = _keywords
- .concat(_keywords.map(k => k[0].toUpperCase() + k.substr(1)))
- .concat(_keywords.map(k => k.toUpperCase()))
- .sort((a, b) => b.length - a.length);
-
-const symbols = [
- '=',
- '+',
- '-',
- '*',
- '/',
- '%',
- '~',
- '^',
- '&',
- '|',
- '>',
- '<',
- '!',
- '?'
-];
-
-const elements = [
- // comment
- code => {
- if (code.substr(0, 2) != '//') return null;
- const match = code.match(/^\/\/(.+?)(\n|$)/);
- if (!match) return null;
- const comment = match[0];
- return {
- html: `<span class="comment">${escape(comment)}</span>`,
- next: comment.length
- };
- },
-
- // block comment
- code => {
- const match = code.match(/^\/\*([\s\S]+?)\*\//);
- if (!match) return null;
- return {
- html: `<span class="comment">${escape(match[0])}</span>`,
- next: match[0].length
- };
- },
-
- // string
- code => {
- if (!/^['"`]/.test(code)) return null;
- const begin = code[0];
- let str = begin;
- let thisIsNotAString = false;
- for (let i = 1; i < code.length; i++) {
- const char = code[i];
- if (char == '\\') {
- str += char;
- str += code[i + 1] || '';
- i++;
- continue;
- } else if (char == begin) {
- str += char;
- break;
- } else if (char == '\n' || i == (code.length - 1)) {
- thisIsNotAString = true;
- break;
- } else {
- str += char;
- }
- }
- if (thisIsNotAString) {
- return null;
- } else {
- return {
- html: `<span class="string">${escape(str)}</span>`,
- next: str.length
- };
- }
- },
-
- // regexp
- code => {
- if (code[0] != '/') return null;
- let regexp = '';
- let thisIsNotARegexp = false;
- for (let i = 1; i < code.length; i++) {
- const char = code[i];
- if (char == '\\') {
- regexp += char;
- regexp += code[i + 1] || '';
- i++;
- continue;
- } else if (char == '/') {
- break;
- } else if (char == '\n' || i == (code.length - 1)) {
- thisIsNotARegexp = true;
- break;
- } else {
- regexp += char;
- }
- }
-
- if (thisIsNotARegexp) return null;
- if (regexp == '') return null;
- if (regexp[0] == ' ' && regexp[regexp.length - 1] == ' ') return null;
-
- return {
- html: `<span class="regexp">/${escape(regexp)}/</span>`,
- next: regexp.length + 2
- };
- },
-
- // label
- code => {
- if (code[0] != '@') return null;
- const match = code.match(/^@([a-zA-Z_-]+?)\n/);
- if (!match) return null;
- const label = match[0];
- return {
- html: `<span class="label">${label}</span>`,
- next: label.length
- };
- },
-
- // number
- (code, i, source) => {
- const prev = source[i - 1];
- if (prev && /[a-zA-Z]/.test(prev)) return null;
- if (!/^[\-\+]?[0-9\.]+/.test(code)) return null;
- const match = code.match(/^[\-\+]?[0-9\.]+/)[0];
- if (match) {
- return {
- html: `<span class="number">${match}</span>`,
- next: match.length
- };
- } else {
- return null;
- }
- },
-
- // nan
- (code, i, source) => {
- const prev = source[i - 1];
- if (prev && /[a-zA-Z]/.test(prev)) return null;
- if (code.substr(0, 3) == 'NaN') {
- return {
- html: `<span class="nan">NaN</span>`,
- next: 3
- };
- } else {
- return null;
- }
- },
-
- // method
- code => {
- const match = code.match(/^([a-zA-Z_-]+?)\(/);
- if (!match) return null;
-
- if (match[1] == '-') return null;
-
- return {
- html: `<span class="method">${match[1]}</span>`,
- next: match[1].length
- };
- },
-
- // property
- (code, i, source) => {
- const prev = source[i - 1];
- if (prev != '.') return null;
-
- const match = code.match(/^[a-zA-Z0-9_-]+/);
- if (!match) return null;
-
- return {
- html: `<span class="property">${match[0]}</span>`,
- next: match[0].length
- };
- },
-
- // keyword
- (code, i, source) => {
- const prev = source[i - 1];
- if (prev && /[a-zA-Z]/.test(prev)) return null;
-
- const match = keywords.filter(k => code.substr(0, k.length) == k)[0];
- if (match) {
- if (/^[a-zA-Z]/.test(code.substr(match.length))) return null;
- return {
- html: `<span class="keyword ${match}">${match}</span>`,
- next: match.length
- };
- } else {
- return null;
- }
- },
-
- // symbol
- code => {
- const match = symbols.filter(s => code[0] == s)[0];
- if (match) {
- return {
- html: `<span class="symbol">${match}</span>`,
- next: 1
- };
- } else {
- return null;
- }
- }
-];
-
-// specify lang is todo
-export default (source: string, lang?: string) => {
- let code = source;
- let html = '';
-
- let i = 0;
-
- function push(token) {
- html += token.html;
- code = code.substr(token.next);
- i += token.next;
- }
-
- while (code != '') {
- const parsed = elements.some(el => {
- const e = el(code, i, source);
- if (e) {
- push(e);
- return true;
- } else {
- return false;
- }
- });
-
- if (!parsed) {
- push({
- html: escape(code[0]),
- next: 1
- });
- }
- }
-
- return html;
-};
diff --git a/src/server/api/common/text/elements/bold.ts b/src/server/api/common/text/elements/bold.ts
deleted file mode 100644
index ce25764457..0000000000
--- a/src/server/api/common/text/elements/bold.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * Bold
- */
-
-module.exports = text => {
- const match = text.match(/^\*\*(.+?)\*\*/);
- if (!match) return null;
- const bold = match[0];
- return {
- type: 'bold',
- content: bold,
- bold: bold.substr(2, bold.length - 4)
- };
-};
diff --git a/src/server/api/common/text/elements/code.ts b/src/server/api/common/text/elements/code.ts
deleted file mode 100644
index 4821e95fe2..0000000000
--- a/src/server/api/common/text/elements/code.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * Code (block)
- */
-
-import genHtml from '../core/syntax-highlighter';
-
-module.exports = text => {
- const match = text.match(/^```([\s\S]+?)```/);
- if (!match) return null;
- const code = match[0];
- return {
- type: 'code',
- content: code,
- code: code.substr(3, code.length - 6).trim(),
- html: genHtml(code.substr(3, code.length - 6).trim())
- };
-};
diff --git a/src/server/api/common/text/elements/emoji.ts b/src/server/api/common/text/elements/emoji.ts
deleted file mode 100644
index e24231a223..0000000000
--- a/src/server/api/common/text/elements/emoji.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * Emoji
- */
-
-module.exports = text => {
- const match = text.match(/^:[a-zA-Z0-9+-_]+:/);
- if (!match) return null;
- const emoji = match[0];
- return {
- type: 'emoji',
- content: emoji,
- emoji: emoji.substr(1, emoji.length - 2)
- };
-};
diff --git a/src/server/api/common/text/elements/hashtag.ts b/src/server/api/common/text/elements/hashtag.ts
deleted file mode 100644
index ee57b140b8..0000000000
--- a/src/server/api/common/text/elements/hashtag.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * Hashtag
- */
-
-module.exports = (text, i) => {
- if (!(/^\s#[^\s]+/.test(text) || (i == 0 && /^#[^\s]+/.test(text)))) return null;
- const isHead = text[0] == '#';
- const hashtag = text.match(/^\s?#[^\s]+/)[0];
- const res: any[] = !isHead ? [{
- type: 'text',
- content: text[0]
- }] : [];
- res.push({
- type: 'hashtag',
- content: isHead ? hashtag : hashtag.substr(1),
- hashtag: isHead ? hashtag.substr(1) : hashtag.substr(2)
- });
- return res;
-};
diff --git a/src/server/api/common/text/elements/inline-code.ts b/src/server/api/common/text/elements/inline-code.ts
deleted file mode 100644
index 9f9ef51a2b..0000000000
--- a/src/server/api/common/text/elements/inline-code.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * Code (inline)
- */
-
-import genHtml from '../core/syntax-highlighter';
-
-module.exports = text => {
- const match = text.match(/^`(.+?)`/);
- if (!match) return null;
- const code = match[0];
- return {
- type: 'inline-code',
- content: code,
- code: code.substr(1, code.length - 2).trim(),
- html: genHtml(code.substr(1, code.length - 2).trim())
- };
-};
diff --git a/src/server/api/common/text/elements/link.ts b/src/server/api/common/text/elements/link.ts
deleted file mode 100644
index 35563ddc3d..0000000000
--- a/src/server/api/common/text/elements/link.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * Link
- */
-
-module.exports = text => {
- const match = text.match(/^\??\[([^\[\]]+?)\]\((https?:\/\/[\w\/:%#@\$&\?!\(\)\[\]~\.=\+\-]+?)\)/);
- if (!match) return null;
- const silent = text[0] == '?';
- const link = match[0];
- const title = match[1];
- const url = match[2];
- return {
- type: 'link',
- content: link,
- title: title,
- url: url,
- silent: silent
- };
-};
diff --git a/src/server/api/common/text/elements/mention.ts b/src/server/api/common/text/elements/mention.ts
deleted file mode 100644
index 2025dfdaad..0000000000
--- a/src/server/api/common/text/elements/mention.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * Mention
- */
-import parseAcct from '../../../../common/user/parse-acct';
-
-module.exports = text => {
- const match = text.match(/^(?:@[a-zA-Z0-9\-]+){1,2}/);
- if (!match) return null;
- const mention = match[0];
- const { username, host } = parseAcct(mention.substr(1));
- return {
- type: 'mention',
- content: mention,
- username,
- host
- };
-};
diff --git a/src/server/api/common/text/elements/quote.ts b/src/server/api/common/text/elements/quote.ts
deleted file mode 100644
index cc8cfffdc4..0000000000
--- a/src/server/api/common/text/elements/quote.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * Quoted text
- */
-
-module.exports = text => {
- const match = text.match(/^"([\s\S]+?)\n"/);
- if (!match) return null;
- const quote = match[0];
- return {
- type: 'quote',
- content: quote,
- quote: quote.substr(1, quote.length - 2).trim(),
- };
-};
diff --git a/src/server/api/common/text/elements/url.ts b/src/server/api/common/text/elements/url.ts
deleted file mode 100644
index 1003aff9c3..0000000000
--- a/src/server/api/common/text/elements/url.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * URL
- */
-
-module.exports = text => {
- const match = text.match(/^https?:\/\/[\w\/:%#@\$&\?!\(\)\[\]~\.=\+\-]+/);
- if (!match) return null;
- const url = match[0];
- return {
- type: 'url',
- content: url,
- url: url
- };
-};
diff --git a/src/server/api/common/text/index.ts b/src/server/api/common/text/index.ts
deleted file mode 100644
index 1e2398dc38..0000000000
--- a/src/server/api/common/text/index.ts
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- * Misskey Text Analyzer
- */
-
-const elements = [
- require('./elements/bold'),
- require('./elements/url'),
- require('./elements/link'),
- require('./elements/mention'),
- require('./elements/hashtag'),
- require('./elements/code'),
- require('./elements/inline-code'),
- require('./elements/quote'),
- require('./elements/emoji')
-];
-
-export default (source: string) => {
-
- if (source == '') {
- return null;
- }
-
- const tokens = [];
-
- function push(token) {
- if (token != null) {
- tokens.push(token);
- source = source.substr(token.content.length);
- }
- }
-
- let i = 0;
-
- // パース
- while (source != '') {
- const parsed = elements.some(el => {
- let _tokens = el(source, i);
- if (_tokens) {
- if (!Array.isArray(_tokens)) {
- _tokens = [_tokens];
- }
- _tokens.forEach(push);
- return true;
- } else {
- return false;
- }
- });
-
- if (!parsed) {
- push({
- type: 'text',
- content: source[0]
- });
- }
-
- i++;
- }
-
- // テキストを纏める
- tokens[0] = [tokens[0]];
- return tokens.reduce((a, b) => {
- if (a[a.length - 1].type == 'text' && b.type == 'text') {
- const tail = a.pop();
- return a.concat({
- type: 'text',
- content: tail.content + b.content
- });
- } else {
- return a.concat(b);
- }
- });
-};
diff --git a/src/server/api/common/watch-post.ts b/src/server/api/common/watch-post.ts
index 61ea444430..83c9b94f3e 100644
--- a/src/server/api/common/watch-post.ts
+++ b/src/server/api/common/watch-post.ts
@@ -1,5 +1,5 @@
import * as mongodb from 'mongodb';
-import Watching from '../models/post-watching';
+import Watching from '../../../models/post-watching';
export default async (me: mongodb.ObjectID, post: object) => {
// 自分の投稿はwatchできない