Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/consumer/src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ while (true) {
for (const item of items) {
const result = exitRequested
? Result.ok('exit' as const)
: await processItem(item.name, item.revId);
: await processItem(item);

if (result.isErr()) {
logger.error(`packument store failed`, {
Expand Down
61 changes: 57 additions & 4 deletions packages/consumer/src/process.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,67 @@
import { processPackument } from './shared/packument';
import { processVersion } from './pkv/version';
import { processPackage } from './pkg/package';
import { eq, notExists } from 'drizzle-orm';
import { db } from '@npm.rest/db/server';
import { Result } from 'better-result';
import pLimit from 'p-limit';
import {
type changeTable,
repositoryTable,
dependencyTable,
packumentTable,
specifierTable,
packageTable,
versionTable,
} from '@npm.rest/db/schema';

export async function process(name: string, rev: string) {
const packument = await processPackument(name, rev);
export async function process(item: typeof changeTable.$inferSelect) {
if (item.deleted) {
await db.transaction(async (tx) => {
// Delete package (cascades to versions, dependencies, and publint)
await tx
.delete(packageTable)
.where(eq(packageTable.name, item.name));

await tx
.delete(packumentTable)
.where(eq(packumentTable.id, item.name));

// Clean up orphaned specifiers (no longer referenced by any dependency)
await tx
.delete(specifierTable)
.where(
notExists(
tx
.select({ id: dependencyTable.specifierId })
.from(dependencyTable)
.where(
eq(
dependencyTable.specifierId,
specifierTable.id,
),
),
),
);

// Clean up orphaned repositories (no longer referenced by any version)
await tx
.delete(repositoryTable)
.where(
notExists(
tx
.select({ id: versionTable.id })
.from(versionTable)
.where(eq(versionTable.repo, repositoryTable.id)),
),
);
});
}

const packument = await processPackument(item.name, item.revId);
if (packument.isErr()) return packument;

Check failure on line 62 in packages/consumer/src/process.ts

View workflow job for this annotation

GitHub Actions / test (24.x)

[0] packages/consumer/test/process.test.ts > process() deletion > performs all deletions in a transaction

TypeError: Cannot read properties of undefined (reading 'isErr') ❯ Module.process packages/consumer/src/process.ts:62:16 ❯ packages/consumer/test/process.test.ts:474:3

Check failure on line 62 in packages/consumer/src/process.ts

View workflow job for this annotation

GitHub Actions / test (24.x)

[0] packages/consumer/test/process.test.ts > process() deletion > does not delete repositories still referenced by other versions

TypeError: Cannot read properties of undefined (reading 'isErr') ❯ Module.process packages/consumer/src/process.ts:62:16 ❯ packages/consumer/test/process.test.ts:399:3

Check failure on line 62 in packages/consumer/src/process.ts

View workflow job for this annotation

GitHub Actions / test (24.x)

[0] packages/consumer/test/process.test.ts > process() deletion > cleans up orphaned repositories after package deletion

TypeError: Cannot read properties of undefined (reading 'isErr') ❯ Module.process packages/consumer/src/process.ts:62:16 ❯ packages/consumer/test/process.test.ts:319:3

Check failure on line 62 in packages/consumer/src/process.ts

View workflow job for this annotation

GitHub Actions / test (24.x)

[0] packages/consumer/test/process.test.ts > process() deletion > does not delete specifiers still referenced by other packages

TypeError: Cannot read properties of undefined (reading 'isErr') ❯ Module.process packages/consumer/src/process.ts:62:16 ❯ packages/consumer/test/process.test.ts:266:3

Check failure on line 62 in packages/consumer/src/process.ts

View workflow job for this annotation

GitHub Actions / test (24.x)

[0] packages/consumer/test/process.test.ts > process() deletion > cleans up orphaned specifiers after package deletion

TypeError: Cannot read properties of undefined (reading 'isErr') ❯ Module.process packages/consumer/src/process.ts:62:16 ❯ packages/consumer/test/process.test.ts:172:3

Check failure on line 62 in packages/consumer/src/process.ts

View workflow job for this annotation

GitHub Actions / test (24.x)

[0] packages/consumer/test/process.test.ts > process() deletion > cascades deletion from package to versions

TypeError: Cannot read properties of undefined (reading 'isErr') ❯ Module.process packages/consumer/src/process.ts:62:16 ❯ packages/consumer/test/process.test.ts:113:3

Check failure on line 62 in packages/consumer/src/process.ts

View workflow job for this annotation

GitHub Actions / test (24.x)

[0] packages/consumer/test/process.test.ts > process() deletion > deletes package and packument when item.deleted is true

TypeError: Cannot read properties of undefined (reading 'isErr') ❯ Module.process packages/consumer/src/process.ts:62:16 ❯ packages/consumer/test/process.test.ts:65:3

const packageId = await processPackage(packument.value, rev);
const packageId = await processPackage(packument.value, item.revId);
if (packageId.isErr()) return packageId;

if (packument.value.versions) {
Expand All @@ -22,7 +75,7 @@
packageId.value,
packument.value,
pkv,
rev,
item.revId,
);
});
}),
Expand Down
8 changes: 0 additions & 8 deletions packages/consumer/test/pkv/types.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,6 @@ const createPackument = (name: string) => ({
},
});

vi.mock('@npm.rest/db/server', async () => {
const { drizzle } = await import('drizzle-orm/postgres-js');

return {
db: drizzle.mock({}),
};
});

vi.mock(import('../../src/shared/logger'), async () => {
const { getLogger } = await import('@logtape/logtape');

Expand Down
Loading
Loading