feat(ql3): establish 3.0 incubation baseline

This commit is contained in:
whyour
2026-08-12 00:25:26 +08:00
parent 4bf92dcfeb
commit c699c32461
2817 changed files with 779642 additions and 653 deletions
@@ -0,0 +1,75 @@
const assert = require('node:assert/strict');
const { DatabaseSync } = require('node:sqlite');
const { test } = require('node:test');
const {
materializedRevisionFixture,
registerPluginPackageMaterializedRevisionRepositoryContract,
} = require('../../../test/contracts/pluginPackageMaterializedRevisionRepositoryContract.cjs');
const {
PluginPackageResourceMaterializationUnavailableError,
} = require('@qinglong/runtime-core/plugin-package-resource-materialization');
const {
LocalSqlitePluginPackageMaterializedRevisionRepository,
} = require('../dist/plugin-package/pluginPackageMaterializedRevisionRepository');
const { migrateLocalSqliteDatabase } = require('../dist/migration/migration');
async function createRepository(_t, fixture) {
const client = new DatabaseSync(':memory:');
client.exec('PRAGMA foreign_keys = ON');
await migrateLocalSqliteDatabase(client);
client
.prepare(
`INSERT INTO "QingLong3Projects"
(id, name, slug, status, version, created_at_ms, updated_at_ms)
VALUES (?, ?, ?, 'active', 1, 1, 1)`,
)
.run(fixture.projectId, fixture.projectId, fixture.projectId);
return {
client,
repository: new LocalSqlitePluginPackageMaterializedRevisionRepository(
client,
fixture.registry,
),
close: () => client.close(),
};
}
registerPluginPackageMaterializedRevisionRepositoryContract({
name: 'SQLite Plugin Package materialized revision repository',
namespace: 'sqlite-materialized',
profile: 'edge',
createRepository,
});
test('fails closed when durable semantic JSON is changed in place', async (t) => {
const fixture = materializedRevisionFixture('sqlite-corrupt');
const harness = await createRepository(t, fixture);
t.after(() => harness.close());
await harness.repository.publish(fixture.revision);
harness.client.exec('PRAGMA ignore_check_constraints = ON');
harness.client
.prepare(
`UPDATE "QingLong3PluginPackageMaterializedRevisions"
SET revision_json =
json_set(revision_json, '$.resources[0].value.name', 'Changed')
WHERE generation_digest = ?`,
)
.run(fixture.revision.generation.generationDigest);
await assert.rejects(
harness.repository.find(fixture.revision.generation.generationDigest),
PluginPackageResourceMaterializationUnavailableError,
);
});
test('publishes storage only through the explicit subpath', () => {
const entrypoint = require('@qinglong/local-sqlite/plugin-package-materialized-revision');
assert.equal(
entrypoint.LocalSqlitePluginPackageMaterializedRevisionRepository,
LocalSqlitePluginPackageMaterializedRevisionRepository,
);
assert.equal(
require('../dist').LocalSqlitePluginPackageMaterializedRevisionRepository,
undefined,
);
});