UNPKG

@mieweb/wikigdrive

Version:

Google Drive to MarkDown synchronization

247 lines (246 loc) 15.3 kB
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) { var useValue = arguments.length > 2; for (var i = 0; i < initializers.length; i++) { value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); } return useValue ? value : void 0; }; var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); var _, done = false; for (var i = decorators.length - 1; i >= 0; i--) { var context = {}; for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; for (var p in contextIn.access) context.access[p] = contextIn.access[p]; context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); if (kind === "accessor") { if (result === void 0) continue; if (result === null || typeof result !== "object") throw new TypeError("Object expected"); if (_ = accept(result.get)) descriptor.get = _; if (_ = accept(result.set)) descriptor.set = _; if (_ = accept(result.init)) initializers.unshift(_); } else if (_ = accept(result)) { if (kind === "field") initializers.unshift(_); else descriptor[key] = _; } } if (target) Object.defineProperty(target, contextIn.name, descriptor); done = true; }; import { Controller, RouteGet, RoutePost, RouteUse } from './Controller.js'; import { GitScanner } from '../../../git/GitScanner.js'; import { UserConfigService } from '../../google_folder/UserConfigService.js'; import { initJob } from '../../job/JobManagerContainer.js'; let GitController = (() => { var _a; let _classSuper = Controller; let _instanceExtraInitializers = []; let _getHistory_decorators; let _getDiff_decorators; let _getCommit_decorators; let _postCommit_decorators; let _postCmd_decorators; let _fetch_decorators; let _pull_decorators; let _push_decorators; let _resetRemote_decorators; let _resetLocal_decorators; let _removeUntracked_decorators; let _removeCached_decorators; return _a = class GitController extends _classSuper { constructor(subPath, filesService, jobManagerContainer, engine) { super(subPath); Object.defineProperty(this, "filesService", { enumerable: true, configurable: true, writable: true, value: (__runInitializers(this, _instanceExtraInitializers), filesService) }); Object.defineProperty(this, "jobManagerContainer", { enumerable: true, configurable: true, writable: true, value: jobManagerContainer }); Object.defineProperty(this, "engine", { enumerable: true, configurable: true, writable: true, value: engine }); } async getHistory(ctx) { const driveId = await ctx.routeParamPath('driveId'); const filePath = ctx.req.originalUrl.replace('/api/git/' + driveId + '/history', '') || '/'; const transformedFileSystem = await this.filesService.getSubFileService(driveId + '_transform', ''); const gitScanner = new GitScanner(ctx.logger, transformedFileSystem.getRealPath(), 'wikigdrive@wikigdrive.com'); await gitScanner.initialize(); const googleFileSystem = await this.filesService.getSubFileService(driveId, ''); const userConfigService = new UserConfigService(googleFileSystem); const userConfig = await userConfigService.load(); const history = await gitScanner.history(filePath, userConfig.remote_branch); return history; } async getDiff(ctx) { const driveId = await ctx.routeParamPath('driveId'); const filePath = ctx.req.originalUrl.replace('/api/git/' + driveId + '/diff', '') || '/'; const transformedFileSystem = await this.filesService.getSubFileService(driveId + '_transform', ''); const gitScanner = new GitScanner(ctx.logger, transformedFileSystem.getRealPath(), 'wikigdrive@wikigdrive.com'); await gitScanner.initialize(); const history = await gitScanner.diff(filePath); return history; } async getCommit(ctx) { const driveId = await ctx.routeParamPath('driveId'); const transformedFileSystem = await this.filesService.getSubFileService(driveId + '_transform', ''); const gitScanner = new GitScanner(ctx.logger, transformedFileSystem.getRealPath(), 'wikigdrive@wikigdrive.com'); await gitScanner.initialize(); const changes = await gitScanner.changes(); return { changes }; } async postCommit(ctx) { const driveId = await ctx.routeParamPath('driveId'); const body = await ctx.routeParamBody(); const user = await ctx.routeParamUser(); const message = body.message; const filePaths = Array.isArray(body.filePaths) ? body.filePaths : (body.filePaths ? [body.filePaths] : []); await this.jobManagerContainer.schedule(driveId, { ...initJob(), type: 'git_commit', title: 'Git Commit', payload: JSON.stringify({ message, filePaths, user }) }); return { driveId, message }; } async postCmd(ctx) { const driveId = await ctx.routeParamPath('driveId'); const body = await ctx.routeParamBody(); const transformedFileSystem = await this.filesService.getSubFileService(driveId + '_transform', ''); const gitScanner = new GitScanner(ctx.logger, transformedFileSystem.getRealPath(), 'wikigdrive@wikigdrive.com'); await gitScanner.initialize(); const output = await gitScanner.executer.cmd(body.cmd, body.arg || ''); return output; } async fetch(ctx) { const driveId = await ctx.routeParamPath('driveId'); await this.jobManagerContainer.schedule(driveId, { ...initJob(), type: 'git_fetch', title: 'Git Fetch' }); return { driveId }; } async pull(ctx) { const driveId = await ctx.routeParamPath('driveId'); await this.jobManagerContainer.schedule(driveId, { ...initJob(), type: 'git_pull', title: 'Git Pull' }); return { driveId }; } async push(ctx) { const driveId = await ctx.routeParamPath('driveId'); await this.jobManagerContainer.schedule(driveId, { ...initJob(), type: 'git_push', title: 'Git Push' }); return { driveId }; } async resetRemote(ctx) { const driveId = await ctx.routeParamPath('driveId'); await this.jobManagerContainer.schedule(driveId, { ...initJob(), type: 'git_reset', title: 'Git Reset to Remote', payload: 'remote' }); return { driveId, payload: 'remote' }; } async resetLocal(ctx) { const driveId = await ctx.routeParamPath('driveId'); await this.jobManagerContainer.schedule(driveId, { ...initJob(), type: 'git_reset', title: 'Git Reset to Local', payload: 'local' }); return { driveId, payload: 'local' }; } async removeUntracked(ctx) { const driveId = await ctx.routeParamPath('driveId'); try { const transformedFileSystem = await this.filesService.getSubFileService(driveId + '_transform', ''); const gitScanner = new GitScanner(ctx.logger, transformedFileSystem.getRealPath(), 'wikigdrive@wikigdrive.com'); await gitScanner.initialize(); await gitScanner.removeUntracked(); return {}; } catch (err) { ctx.logger.error(err.stack ? err.stack : err.message); if (err.message.indexOf('Failed to retrieve list of SSH authentication methods') > -1) { return { error: 'Failed to authenticate' }; } throw err; } } async removeCached(ctx) { const driveId = await ctx.routeParamPath('driveId'); const body = await ctx.routeParamBody(); try { const transformedFileSystem = await this.filesService.getSubFileService(driveId + '_transform', ''); const gitScanner = new GitScanner(ctx.logger, transformedFileSystem.getRealPath(), 'wikigdrive@wikigdrive.com'); await gitScanner.initialize(); await gitScanner.removeCached(body.filePath); return {}; } catch (err) { ctx.logger.error(err.stack ? err.stack : err.message); if (err.message.indexOf('Failed to retrieve list of SSH authentication methods') > -1) { return { error: 'Failed to authenticate' }; } throw err; } } }, (() => { const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0; _getHistory_decorators = [RouteUse('/:driveId/history')]; _getDiff_decorators = [RouteUse('/:driveId/diff')]; _getCommit_decorators = [RouteGet('/:driveId/commit')]; _postCommit_decorators = [RoutePost('/:driveId/commit')]; _postCmd_decorators = [RoutePost('/:driveId/cmd')]; _fetch_decorators = [RoutePost('/:driveId/fetch')]; _pull_decorators = [RoutePost('/:driveId/pull')]; _push_decorators = [RoutePost('/:driveId/push')]; _resetRemote_decorators = [RoutePost('/:driveId/reset_remote')]; _resetLocal_decorators = [RoutePost('/:driveId/reset_local')]; _removeUntracked_decorators = [RoutePost('/:driveId/remove_untracked')]; _removeCached_decorators = [RoutePost('/:driveId/remove_cached')]; __esDecorate(_a, null, _getHistory_decorators, { kind: "method", name: "getHistory", static: false, private: false, access: { has: obj => "getHistory" in obj, get: obj => obj.getHistory }, metadata: _metadata }, null, _instanceExtraInitializers); __esDecorate(_a, null, _getDiff_decorators, { kind: "method", name: "getDiff", static: false, private: false, access: { has: obj => "getDiff" in obj, get: obj => obj.getDiff }, metadata: _metadata }, null, _instanceExtraInitializers); __esDecorate(_a, null, _getCommit_decorators, { kind: "method", name: "getCommit", static: false, private: false, access: { has: obj => "getCommit" in obj, get: obj => obj.getCommit }, metadata: _metadata }, null, _instanceExtraInitializers); __esDecorate(_a, null, _postCommit_decorators, { kind: "method", name: "postCommit", static: false, private: false, access: { has: obj => "postCommit" in obj, get: obj => obj.postCommit }, metadata: _metadata }, null, _instanceExtraInitializers); __esDecorate(_a, null, _postCmd_decorators, { kind: "method", name: "postCmd", static: false, private: false, access: { has: obj => "postCmd" in obj, get: obj => obj.postCmd }, metadata: _metadata }, null, _instanceExtraInitializers); __esDecorate(_a, null, _fetch_decorators, { kind: "method", name: "fetch", static: false, private: false, access: { has: obj => "fetch" in obj, get: obj => obj.fetch }, metadata: _metadata }, null, _instanceExtraInitializers); __esDecorate(_a, null, _pull_decorators, { kind: "method", name: "pull", static: false, private: false, access: { has: obj => "pull" in obj, get: obj => obj.pull }, metadata: _metadata }, null, _instanceExtraInitializers); __esDecorate(_a, null, _push_decorators, { kind: "method", name: "push", static: false, private: false, access: { has: obj => "push" in obj, get: obj => obj.push }, metadata: _metadata }, null, _instanceExtraInitializers); __esDecorate(_a, null, _resetRemote_decorators, { kind: "method", name: "resetRemote", static: false, private: false, access: { has: obj => "resetRemote" in obj, get: obj => obj.resetRemote }, metadata: _metadata }, null, _instanceExtraInitializers); __esDecorate(_a, null, _resetLocal_decorators, { kind: "method", name: "resetLocal", static: false, private: false, access: { has: obj => "resetLocal" in obj, get: obj => obj.resetLocal }, metadata: _metadata }, null, _instanceExtraInitializers); __esDecorate(_a, null, _removeUntracked_decorators, { kind: "method", name: "removeUntracked", static: false, private: false, access: { has: obj => "removeUntracked" in obj, get: obj => obj.removeUntracked }, metadata: _metadata }, null, _instanceExtraInitializers); __esDecorate(_a, null, _removeCached_decorators, { kind: "method", name: "removeCached", static: false, private: false, access: { has: obj => "removeCached" in obj, get: obj => obj.removeCached }, metadata: _metadata }, null, _instanceExtraInitializers); if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); })(), _a; })(); export default GitController;