This commit enhances type safety and fixes type-related issues throughout the project including: - Updated type definitions in entities, repositories, and models - Improved type annotations in services and controllers - Fixed type issues in adapters and utilities - Enhanced test file type definitions - Added typings/index.d.ts for global type declarations 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude <noreply@anthropic.com>
60 lines
1.7 KiB
TypeScript
60 lines
1.7 KiB
TypeScript
import { SingletonProto } from '@eggjs/tegg';
|
|
import { E500 } from 'egg-errors';
|
|
import { RegistryType } from '../../../common/enum/Registry.ts';
|
|
import type { Registry } from '../../../core/entity/Registry.ts';
|
|
import {
|
|
AbstractChangeStream,
|
|
RegistryChangesStream,
|
|
} from './AbstractChangesStream.ts';
|
|
|
|
@SingletonProto()
|
|
@RegistryChangesStream(RegistryType.Cnpmcore)
|
|
export class CnpmcoreChangesStream extends AbstractChangeStream {
|
|
async getInitialSince(registry: Registry): Promise<string> {
|
|
const db = new URL(registry.changeStream).origin;
|
|
const { status, data } = await this.httpclient.request(db, {
|
|
followRedirect: true,
|
|
timeout: 10_000,
|
|
dataType: 'json',
|
|
});
|
|
if (!data.update_seq) {
|
|
throw new E500(`get getInitialSince failed: ${data.update_seq}`);
|
|
}
|
|
const since = String(data.update_seq - 10);
|
|
this.logger.warn(
|
|
'[NpmChangesStream.getInitialSince:firstSeq] GET %s status: %s, data: %j, since: %s',
|
|
registry.name,
|
|
status,
|
|
data,
|
|
since
|
|
);
|
|
return since;
|
|
}
|
|
|
|
async *fetchChanges(registry: Registry, since: string) {
|
|
const db = this.getChangesStreamUrl(registry, since);
|
|
// json mode
|
|
const { data } = await this.httpclient.request(db, {
|
|
followRedirect: true,
|
|
timeout: 30_000,
|
|
dataType: 'json',
|
|
gzip: true,
|
|
});
|
|
|
|
if (data.results?.length > 0) {
|
|
for (const change of data.results) {
|
|
const seq = String(change.seq);
|
|
const fullname = change.id;
|
|
// cnpmcore 默认返回 >= 需要做特殊判断
|
|
if (seq && fullname && seq !== since) {
|
|
const change = {
|
|
fullname,
|
|
seq,
|
|
};
|
|
yield change;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|