Skip to content

feat(registry): add promise-first adapter APIs - #1549

Open
ricardo-devis-agullo wants to merge 3 commits into
masterfrom
feat/promise-first-adapters
Open

feat(registry): add promise-first adapter APIs#1549
ricardo-devis-agullo wants to merge 3 commits into
masterfrom
feat/promise-first-adapters

Conversation

@ricardo-devis-agullo

Copy link
Copy Markdown
Collaborator

What

Implements the V1.md Track 1, non-breaking 0.x promise-first storage and metadata adapter groundwork.

  • Adds promise-native and callback-compatible adapter types for storage and metadata packages.
  • Keeps callback-only custom adapters working through registry normalization.
  • Adds one-time deprecation warnings for callback adapter usage.
  • Updates official S3, GS, Azure Blob, Azure SQL, and Azure Table adapters to expose promise-first methods with callback compatibility.
  • Covers successful operations, callback compatibility, error propagation, official/custom adapter paths, repository wiring, validation, and TypeScript types.
  • Leaves component and browser contracts unchanged.

Closes #1548

Test plan

  • npx turbo run lint --filter=oc-storage-adapters-utils --filter=oc-metadata-adapters-utils --filter=oc-s3-storage-adapter --filter=oc-gs-storage-adapter --filter=oc-azure-storage-adapter --filter=oc-azure-sql-metadata-adapter --filter=oc-azure-table-metadata-adapter --filter=oc
  • npx turbo run test-silent --filter=oc-storage-adapters-utils --filter=oc-metadata-adapters-utils --filter=oc-s3-storage-adapter --filter=oc-gs-storage-adapter --filter=oc-azure-storage-adapter --filter=oc-azure-sql-metadata-adapter --filter=oc-azure-table-metadata-adapter --filter=oc
  • npx mocha test/unit/registry-domain-storage-adapter.js test/unit/registry-domain-metadata-adapter.js from packages/oc
  • Full affected oc suite: 997 passing

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds promise-first storage and metadata adapter contracts while retaining callback compatibility for official and custom adapters.

Changes:

  • Adds dual promise/callback adapter types and deprecation warnings.
  • Normalizes legacy adapters for registry internals.
  • Updates official adapters and expands runtime/type coverage.

Reviewed changes

Copilot reviewed 23 out of 23 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
packages/oc/test/unit/registry-domain-validator.js Tests callback metadata validation.
packages/oc/test/unit/registry-domain-storage-adapter.js Tests storage normalization and warnings.
packages/oc/test/unit/registry-domain-repository.js Tests callback metadata repository usage.
packages/oc/test/unit/registry-domain-metadata-adapter.js Tests metadata normalization.
packages/oc/test/types/adapter-registration.ts Exercises adapter type contracts.
packages/oc/src/types.ts Accepts promise or legacy adapters.
packages/oc/src/registry/domain/validators/registry-configuration.ts Normalizes metadata during validation.
packages/oc/src/registry/domain/storage-adapter.ts Normalizes legacy storage adapters.
packages/oc/src/registry/domain/repository.ts Normalizes repository metadata stores.
packages/oc/src/registry/domain/metadata-adapter.ts Adds metadata adapter normalization.
packages/oc/src/cli/facade/registry-migrate-metadata.ts Normalizes migration metadata stores.
packages/oc-storage-adapters-utils/src/index.ts Adds storage callback compatibility types.
packages/oc-s3-storage-adapter/test/s3.test.ts Tests S3 callback compatibility.
packages/oc-s3-storage-adapter/src/index.ts Adds dual S3 methods.
packages/oc-metadata-adapters-utils/src/index.ts Adds metadata callback compatibility types.
packages/oc-gs-storage-adapter/test/gs.test.ts Tests GS callback compatibility.
packages/oc-gs-storage-adapter/src/index.ts Adds dual GS methods.
packages/oc-azure-table-metadata-adapter/test/index.js Tests Azure Table callbacks.
packages/oc-azure-table-metadata-adapter/src/index.ts Adds dual Azure Table methods.
packages/oc-azure-storage-adapter/test/azure.test.ts Tests Azure Blob callbacks.
packages/oc-azure-storage-adapter/src/index.ts Adds dual Azure Blob methods.
packages/oc-azure-sql-metadata-adapter/test/index.js Tests Azure SQL callbacks.
packages/oc-azure-sql-metadata-adapter/src/index.ts Adds dual Azure SQL methods.
Suppressed comments (1)

packages/oc/src/registry/domain/metadata-adapter.ts:101

  • The unmarked-adapter path also loses a prototype-defined adapterType because object spread only copies own enumerable properties. Explicitly retain this required field so class-based custom stores still satisfy MetadataStore after normalization.
    ...adapter,

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +73 to +74
...adapter,
adapterApi: 'promise',
Comment on lines +26 to +27
...adapter,
adapterApi: 'promise',
Comment on lines +47 to +66
if (typeof callback !== 'function') {
return Promise.resolve().then(() => fn(...(arguments_ as Arguments)));
}

warnAboutCallbacks(adapterId);
arguments_.pop();
let settled = false;
const finish = (error: unknown, value?: ReturnValue) => {
if (settled) {
return;
}
settled = true;
(callback as AdapterCallback<ReturnValue>)(error, value);
};

try {
fn(...(arguments_ as Arguments)).then(
(value) => finish(null, value),
(error) => finish(error)
);
Comment on lines +49 to +68
if (typeof callback !== 'function') {
return Promise.resolve().then(() => fn(...(arguments_ as Arguments)));
}

warnAboutCallbacks(adapterId);
arguments_.pop();
let settled = false;
const finish = (error: unknown, value?: ReturnValue) => {
if (settled) {
return;
}
settled = true;
(callback as MetadataAdapterCallback<ReturnValue>)(error, value);
};

try {
fn(...(arguments_ as Arguments)).then(
(value) => finish(null, value),
(error) => finish(error)
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(registry): add promise-first storage and metadata adapter APIs

2 participants