@feng0531/dsh-vcs 0.3.105 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ import{readFileSync as u}from"node:fs";var a="@feng0531/dsh-vcs";function i(r){return typeof r=="string"&&/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/.test(r)&&r.length<50}function l(r,s){if(!i(r)||!i(s))return!1;let t=r.split(".").map(BigInt),n=s.split(".").map(BigInt);for(let e=0;e<3;e++)if(t[e]!==n[e])return t[e]>n[e];return!1}var f=JSON.parse(u(new URL("../package.json",import.meta.url),"utf8")).version;function m(){return{packageName:a,runningVersion:f,protocol:1}}async function b({fetcher:r=fetch,signal:s}={}){let t=await r("https://registry.npmjs.org/@feng0531%2fdsh-vcs/latest",{redirect:"error",headers:{Accept:"application/json"},signal:AbortSignal.any([...s?[s]:[],AbortSignal.timeout(15e3)])});if(!t.ok)throw new Error("\u65E0\u6CD5\u67E5\u8BE2 npm \u6700\u65B0\u7248\u672C\uFF08HTTP "+t.status+"\uFF09");if(Number(t.headers.get("content-length"))>256*1024)throw new Error("\u7248\u672C\u4FE1\u606F\u8FC7\u5927");let n=t.body.getReader(),e=0,c=[];try{for(;;){let{value:p,done:g}=await n.read();if(g)break;if(e+=p.length,e>256*1024)throw new Error("\u7248\u672C\u4FE1\u606F\u8FC7\u5927");c.push(p)}}finally{await n.cancel(),n.releaseLock()}let o=JSON.parse(Buffer.concat(c).toString("utf8"));if(o.name!==a||!i(o.version)||!o.dsh?.bundle)throw new Error("npm \u8FD4\u56DE\u7684\u63D2\u4EF6\u4FE1\u606F\u65E0\u6548");return{...m(),latestVersion:o.version,available:l(o.version,f),registry:"https://registry.npmjs.org/",releaseUrl:"https://github.com/f-e-n-g-0531/dsh-vcs/releases/tag/v"+o.version}}export{f as RUNNING_VERSION,b as checkUpdate,m as runtimeInfo};
package/docs/RELEASING.md CHANGED
@@ -4,6 +4,8 @@
4
4
 
5
5
  ## 发布内容
6
6
 
7
+ 每次改动完成并验证通过后,主动完成 npm 与 GitHub 正式发布,不停留在本地修改或只推标签。版本使用 `vX.Y.Z`:X 为大版本,Y 为小版本/新增功能,Z 为 BUG 修复;递增前一位时后面的位归零。失败门禁必须先修复,不能为了发布跳过验证。发布不自动安装或重启宿主。
8
+
7
9
  每个新版本必须有独立的中文发布说明,放在 `docs/releases/版本号.md`。按“本版变化、安装、限制、验证”组织,不把自动提交列表、开发轮次或内部恢复记录当作用户说明。没有新增功能时明确写出,不夸大改动。
8
10
 
9
11
  更新包版本和锁文件,在变更记录中填写同一版本。核查许可证、第三方声明及公开文件,排除凭据和私人数据。
package/index.mjs CHANGED
@@ -3,6 +3,7 @@ import {readFileSync} from 'node:fs';
3
3
  import {registerFrontendAssets} from './frontend-assets.mjs';
4
4
  const runningFrontend=JSON.parse(readFileSync(new URL('./dist/frontend.json',import.meta.url),'utf8'));
5
5
  import * as adapter from './vcs.mjs';
6
+ import {runtimeInfo,checkUpdate} from './dist/updates.mjs';
6
7
  import {createSvnHttpsHost} from './dist/svn-host.mjs';
7
8
 
8
9
  export const name = 'dsh-vcs';
@@ -160,6 +161,15 @@ export function createHandler(ctx, api = adapter, maxActive = 4, { now = Date.no
160
161
  }
161
162
  if(bindSvnIdentityResolver!==undefined){if(typeof bindSvnIdentityResolver!=='function')throw new Error('Invalid internal SVN resolver binding');bindSvnIdentityResolver(async(address,signal)=>{validatePayload('vcs/svn-identity',address);signal?.throwIfAborted();const cwd=await resolveSessionCwd(ctx,address.sessionId,signal),entry=current(address.sessionId,cwd),repository=entry?.repositories.get(address.repositoryId);if(!repository)throw rediscover();if(repository.type!=='svn')throw invalid('SVN working copy required.');const identity=await api.getSvnIdentity({...repository},{signal});await assertCurrent(address.sessionId,cwd,entry,signal);if(entry.repositories.get(address.repositoryId)!==repository)throw rediscover();return {...identity,cwd};});}
162
163
  return async (endpoint, payload, signal) => {
164
+ if (['vcs/runtime-info','vcs/check-update'].includes(endpoint)) {
165
+ try {
166
+ signal?.throwIfAborted();
167
+ if (!payload || typeof payload!=='object' || Array.isArray(payload) || Object.keys(payload).length) throw invalid('Update requests accept no fields.');
168
+ if (endpoint==='vcs/runtime-info') return {ok:true,value:runtimeInfo()};
169
+ if (active>=maxActive) return failure('vcs/busy','Too many VCS requests. Please retry.');
170
+ active++;try { return {ok:true,value:await checkUpdate({signal})}; } finally { active--; }
171
+ } catch(error) { return failure(signal?.aborted?'vcs/cancelled':'vcs/update-failed',error.message); }
172
+ }
163
173
  if (!['vcs/svn-identity', 'vcs/repositories', 'vcs/status', 'vcs/compare', 'vcs/conflict-stages', 'vcs/history', 'vcs/commit', 'vcs/commit-compare', 'vcs/revision-changes', 'vcs/revision-compare', 'vcs/file-history', 'vcs/blame', 'vcs/tree', 'vcs/tree-file', 'vcs/tree-segment', 'vcs/tree-history', 'vcs/commit-image', 'vcs/revision-image', 'vcs/workspace-image', 'vcs/references', 'vcs/stash-list', 'vcs/grep'].includes(endpoint)) return failure('vcs/not-found', 'Unknown VCS endpoint.');
164
174
  if (active >= maxActive) return failure('vcs/busy', 'Too many VCS requests. Please retry.');
165
175
  active++;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@feng0531/dsh-vcs",
3
- "version": "0.3.105",
3
+ "version": "0.4.0",
4
4
  "private": false,
5
5
  "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org/" },
6
6
  "type": "module",