@redocly/realm 0.134.0-next.2 → 0.134.0-next.4
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.
- package/CHANGELOG.md +31 -0
- package/dist/cli/eject/ejectComponent.d.ts +1 -1
- package/dist/cli/eject/ejectTheme.d.ts +1 -1
- package/dist/cli/eject/themeOperations.d.ts +2 -2
- package/dist/cli/telemetry/index.d.ts +1 -1
- package/dist/client/ErrorBoundary.d.ts +1 -1
- package/dist/client/TestProvider.d.ts +1 -1
- package/dist/client/app/CircularProgress.d.ts +1 -1
- package/dist/client/app/ConditionalLink.d.ts +2 -2
- package/dist/client/app/Link.js +1 -1
- package/dist/client/app/Sidebar/useSidebarItems.d.ts +2 -2
- package/dist/client/app/hooks/catalog/useCatalogFilter.d.ts +12 -12
- package/dist/client/app/hooks/catalog/useCatalogSort.d.ts +2 -2
- package/dist/client/app/hooks/catalog/useFetchCatalogEntities.d.ts +1 -1
- package/dist/client/app/hooks/catalog/useFetchCatalogEntitiesRelations.d.ts +2 -2
- package/dist/client/app/hooks/catalog/useFetchCatalogEntityRevisions.d.ts +1 -1
- package/dist/client/app/hooks/catalog/useSearchTracker.d.ts +1 -1
- package/dist/client/app/hooks/products/useProducts.d.ts +3 -3
- package/dist/client/app/l10n/index.d.ts +1 -1
- package/dist/client/app/markdoc/custom-components/openapi/get-operation/get-operation.d.ts +1 -1
- package/dist/client/app/markdoc/custom-components/styled.elements.d.ts +2 -4
- package/dist/client/app/pages/DevLogin/DevLoginForm.d.ts +1 -1
- package/dist/client/app/pages/DevLogin/styled.d.ts +3 -3
- package/dist/client/app/useGlobalData.d.ts +1 -1
- package/dist/client/app/utils/getBlocksHeight.d.ts +5 -14
- package/dist/client/app/utils/getBlocksHeight.js +1 -1
- package/dist/client/app/utils/loadAndNavigate.d.ts +1 -1
- package/dist/client/app/utils/syncScrollWithEditor.js +1 -1
- package/dist/client/browser-entry.d.ts +0 -1
- package/dist/client/browser-entry.js +3 -3
- package/dist/client/constants/ai-search.d.ts +7 -7
- package/dist/client/providers/page-data/hooks.d.ts +3 -3
- package/dist/client/templates/asyncapi-docs/helpers.d.ts +4 -181
- package/dist/client/templates/asyncapi-docs/helpers.js +1 -1
- package/dist/client/templates/openapi-docs/helpers.d.ts +1 -1
- package/dist/client/templates/openapi-docs/helpers.js +2 -2
- package/dist/client/templates/openapi-docs/mock-server-config.d.ts +3 -3
- package/dist/client/templates/openapi-docs/template.d.ts +1 -1
- package/dist/client/types/sidebar.d.ts +4 -4
- package/dist/constants/common.d.ts +66 -66
- package/dist/markdoc/helpers/normalize-custom-tags.d.ts +2 -0
- package/dist/markdoc/helpers/normalize-custom-tags.js +1 -0
- package/dist/markdoc/nodes/index.d.ts +6 -6
- package/dist/markdoc/tags/index.d.ts +2 -48
- package/dist/server/api-routes/helpers/read-stream-with-size-limit.d.ts +1 -1
- package/dist/server/api-routes/run-api-routes-worker.d.ts +1 -1
- package/dist/server/config/env-config.d.ts +17 -17
- package/dist/server/config/env-schema.d.ts +46 -46
- package/dist/server/config/env-schemas/auth.d.ts +4 -4
- package/dist/server/config/env-schemas/catalog.d.ts +2 -2
- package/dist/server/config/env-schemas/environment-detection.d.ts +8 -8
- package/dist/server/config/env-schemas/feature-flags.d.ts +10 -10
- package/dist/server/config/env-schemas/search.d.ts +3 -3
- package/dist/server/config/env-schemas/server-config.d.ts +2 -2
- package/dist/server/fs/content-fs.d.ts +1 -1
- package/dist/server/node-bundle-entry.js +1 -1
- package/dist/server/persistence/cache/mappers/create-cache-db-record.d.ts +1 -1
- package/dist/server/persistence/cache/repositories/cache-repository.js +1 -1
- package/dist/server/persistence/file-hashes/mappers/create-file-hash-db-record.d.ts +1 -1
- package/dist/server/persistence/file-hashes/repositories/file-hashes-repository.js +1 -1
- package/dist/server/persistence/kv/mappers/create-kv-db-record.d.ts +1 -1
- package/dist/server/persistence/kv/repositories/kv-repository.d.ts +1 -1
- package/dist/server/persistence/kv/repositories/kv-repository.js +2 -2
- package/dist/server/persistence/kv/services/kv-service.d.ts +3 -2
- package/dist/server/persistence/kv/services/kv-service.js +1 -1
- package/dist/server/plugins/catalog-entities/database/catalog-entities-service.d.ts +7 -6
- package/dist/server/plugins/catalog-entities/database/catalog-entities-service.js +1 -1
- package/dist/server/plugins/catalog-entities/database/mappers/create-entity-attributes-db-record.d.ts +1 -1
- package/dist/server/plugins/catalog-entities/database/mappers/create-entity-db-record.d.ts +1 -1
- package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation-db-record-from-file-schema.d.ts +1 -1
- package/dist/server/plugins/catalog-entities/database/mappers/field-transformations.d.ts +2 -2
- package/dist/server/plugins/catalog-entities/database/remote-publish-lock-service.d.ts +3 -3
- package/dist/server/plugins/catalog-entities/database/repositories/bffEntities/bff-entities-read-repository.d.ts +2 -2
- package/dist/server/plugins/catalog-entities/database/repositories/catalog-entities-repository.d.ts +1 -4
- package/dist/server/plugins/catalog-entities/database/repositories/catalog-entities-repository.js +1 -1
- package/dist/server/plugins/catalog-entities/database/repositories/common/filters-repository.d.ts +1 -1
- package/dist/server/plugins/catalog-entities/database/repositories/common/revision-repository.d.ts +1 -1
- package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-read-repository.d.ts +1 -1
- package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-read-repository.js +1 -1
- package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-write-repository.d.ts +2 -2
- package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-write-repository.js +1 -1
- package/dist/server/plugins/catalog-entities/database/repositories/entityAttributes/entity-attributes-write-repository.d.ts +1 -1
- package/dist/server/plugins/catalog-entities/database/repositories/relations/relations-read-repository.d.ts +2 -2
- package/dist/server/plugins/catalog-entities/database/repositories/utils.d.ts +4 -4
- package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/base.d.ts +2 -2
- package/dist/server/plugins/catalog-entities/extensions/extractors/fs-entities-extractor.d.ts +1 -1
- package/dist/server/plugins/catalog-entities/schemas/database-schemas.d.ts +78 -78
- package/dist/server/plugins/catalog-entities/schemas/dto-schemas.d.ts +28 -28
- package/dist/server/plugins/catalog-entities/utils/get-not-accessible-catalog-resources.d.ts +1 -1
- package/dist/server/plugins/catalog-entities/utils/is-predefined-catalog-type.d.ts +1 -1
- package/dist/server/plugins/catalog-entities/utils/openapi-component-content-extractor.d.ts +1 -1
- package/dist/server/plugins/config-parser/normalize-redirect-sources.d.ts +1 -1
- package/dist/server/plugins/default-theme/resolve-products-config.d.ts +1 -1
- package/dist/server/plugins/dev-onboarding/index.d.ts +1 -1
- package/dist/server/plugins/dev-onboarding/template/App.d.ts +1 -1
- package/dist/server/plugins/dev-onboarding/template/components/ApiKeyItem.d.ts +62 -4
- package/dist/server/plugins/dev-onboarding/template/components/ApiKeyProductStatus.js +2 -2
- package/dist/server/plugins/dev-onboarding/template/components/ApiKeySecret.js +2 -2
- package/dist/server/plugins/dev-onboarding/template/components/ApiKeys.d.ts +8 -2
- package/dist/server/plugins/dev-onboarding/template/components/ApiLogItem.js +1 -1
- package/dist/server/plugins/dev-onboarding/template/components/CharacterCounter.d.ts +1 -1
- package/dist/server/plugins/dev-onboarding/template/components/Container.d.ts +14 -2
- package/dist/server/plugins/dev-onboarding/template/components/DialogStyledComponents.d.ts +31 -11
- package/dist/server/plugins/dev-onboarding/template/components/MenuItemButton.d.ts +1 -1
- package/dist/server/plugins/dev-onboarding/template/components/Paper.d.ts +15 -3
- package/dist/server/plugins/dev-onboarding/template/components/PopupMenuUl.d.ts +1 -1
- package/dist/server/plugins/dev-onboarding/template/components/RevokeAPIKey.d.ts +2 -2
- package/dist/server/plugins/dev-onboarding/template/components/RevokeAPIKey.js +1 -1
- package/dist/server/plugins/dev-onboarding/template/components/RollAPIKey.d.ts +2 -2
- package/dist/server/plugins/dev-onboarding/template/components/RollAPIKey.js +1 -1
- package/dist/server/plugins/dev-onboarding/template/components/ShadowButton.d.ts +1 -1
- package/dist/server/plugins/dev-onboarding/template/components/ShadowButton.js +2 -2
- package/dist/server/plugins/dev-onboarding/template/components/StatusBadge.d.ts +1 -3
- package/dist/server/plugins/dev-onboarding/template/components/useSortableData.d.ts +2 -2
- package/dist/server/plugins/entitlements/utils/get-billed-catalog-build-pages-count.js +1 -1
- package/dist/server/plugins/graphql-docs/constants.d.ts +1 -1
- package/dist/server/plugins/graphql-docs/search/ai/utils.d.ts +1 -1
- package/dist/server/plugins/markdown/markdoc/markdoc-options.d.ts +36 -18
- package/dist/server/plugins/markdown/markdoc/markdoc-options.js +1 -1
- package/dist/server/plugins/markdown/search/get-ai-search-documents.d.ts +1 -1
- package/dist/server/plugins/markdown/search/nodes/tag-node.d.ts +1 -1
- package/dist/server/plugins/markdown/utils/resolve-markdown-template.d.ts +1 -1
- package/dist/server/plugins/mcp/constants.d.ts +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/index.d.ts +8 -8
- package/dist/server/plugins/mcp/docs-mcp/tools/utils.d.ts +1 -1
- package/dist/server/plugins/mcp/docs-mcp/utils.d.ts +2 -2
- package/dist/server/plugins/mcp/servers/docs-server.d.ts +1 -1
- package/dist/server/plugins/scorecard-classic/compute-scorecard.d.ts +1 -1
- package/dist/server/plugins/scorecard-classic/get-scorecard-config.d.ts +63 -63
- package/dist/server/plugins/scorecard-classic/index.d.ts +1 -1
- package/dist/server/plugins/scorecard-classic/lint.d.ts +3 -3
- package/dist/server/plugins/scorecard-classic/template/Gauge.d.ts +1 -1
- package/dist/server/plugins/scorecard-classic/template/components.d.ts +1 -1
- package/dist/server/plugins/scorecard-classic/template/index.styles.d.ts +61 -33
- package/dist/server/plugins/scorecard-classic/template/useData.d.ts +58 -58
- package/dist/server/plugins/scorecard-classic/template/utils.d.ts +1 -1
- package/dist/server/plugins/scorecards/database/repositories/scorecards-config-repository.d.ts +4 -0
- package/dist/server/plugins/scorecards/database/repositories/scorecards-config-repository.js +1 -1
- package/dist/server/plugins/scorecards/database/scorecards-config-service.d.ts +4 -4
- package/dist/server/plugins/scorecards/database/scorecards-config-service.js +1 -1
- package/dist/server/plugins/search/ai-indexer/prepare-semantic-documents.d.ts +1 -1
- package/dist/server/plugins/search/engines/search-engine.d.ts +1 -1
- package/dist/server/plugins/search/llmstxt/index.d.ts +1 -1
- package/dist/server/plugins/sidebars/index.d.ts +1 -1
- package/dist/server/providers/database/base-service.d.ts +25 -0
- package/dist/server/providers/database/base-service.js +1 -0
- package/dist/server/providers/database/database-path-generator.d.ts +2 -2
- package/dist/server/providers/database/database-preconnect-service.js +1 -1
- package/dist/server/providers/database/databases/sqlite-db/schemas/cache-table.d.ts +1 -1
- package/dist/server/providers/database/databases/sqlite-db/schemas/entities-attributes-table.d.ts +1 -1
- package/dist/server/providers/database/databases/sqlite-db/schemas/entities-relations-table.d.ts +1 -1
- package/dist/server/providers/database/databases/sqlite-db/schemas/entities-table.d.ts +1 -1
- package/dist/server/providers/database/databases/sqlite-db/schemas/file-hashes-table.d.ts +1 -1
- package/dist/server/providers/database/databases/sqlite-db/schemas/kv-table.d.ts +1 -1
- package/dist/server/providers/database/databases/sqlite-db/schemas/scorecards-config-table.d.ts +1 -1
- package/dist/server/providers/database/databases/sqlite-db/schemas/scorecards-evaluation-runs-table.d.ts +1 -1
- package/dist/server/providers/database/databases/sqlite-db/schemas/scorecards-level-results-table.d.ts +1 -1
- package/dist/server/providers/database/databases/sqlite-db/schemas/scorecards-levels-rules-results-table.d.ts +1 -1
- package/dist/server/providers/database/databases/sqlite-db/schemas/scorecards-results-table.d.ts +1 -1
- package/dist/server/providers/database/databases/sqlite-db/schemas/scorecards-rule-results-table.d.ts +1 -1
- package/dist/server/providers/database/instance-cache-resolver.d.ts +19 -0
- package/dist/server/providers/database/instance-cache-resolver.js +1 -0
- package/dist/server/providers/database/pagination/constants.d.ts +2 -2
- package/dist/server/providers/database/utils/storage-limit-validator.d.ts +1 -1
- package/dist/server/ssr/render.js +1 -1
- package/dist/server/ssr/server-side-props/get-default-static-props.d.ts +9 -9
- package/dist/server/ssr/server-side-props/get-server-props-from-user-handler.d.ts +1 -1
- package/dist/server/ssr/server-side-props/prepare-context-variables.d.ts +1 -1
- package/dist/server/ssr/template.d.ts +1 -1
- package/dist/server/store.d.ts +2 -2
- package/dist/server/tools/notifiers/reporter.d.ts +12 -12
- package/dist/server/utils/envs/env-boolean-string.d.ts +3 -3
- package/dist/server/utils/is-realm-or-reef.d.ts +2 -0
- package/dist/server/utils/is-realm-or-reef.js +1 -0
- package/dist/server/utils/product.d.ts +1 -1
- package/dist/server/utils/rbac.d.ts +33 -33
- package/dist/server/web-server/auth.d.ts +2 -2
- package/dist/server/web-server/dev-server.js +1 -1
- package/dist/server/web-server/middleware/catalogAuthMiddleware.d.ts +1 -1
- package/dist/server/web-server/routes/catalog/helpers/create-entity-relation-update-schema.d.ts +12 -12
- package/dist/server/web-server/routes/catalog/helpers/create-entity-schema.d.ts +1967 -1967
- package/dist/server/web-server/routes/catalog/helpers/create-entity-update-schema.d.ts +357 -357
- package/dist/server/web-server/routes/catalog/helpers/has-access-to-entity.d.ts +1 -1
- package/dist/server/web-server/routes/catalog/helpers/upsert-pages-stats.d.ts +1 -1
- package/dist/server/web-server/routes/catalog/parsers/relations/parse-entities-relations.d.ts +7 -7
- package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation-update-data.d.ts +7 -7
- package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation.d.ts +7 -7
- package/dist/server/web-server/routes/feedback.d.ts +1 -1
- package/dist/server/web-server/routes/helpers/process-redirects.d.ts +1 -1
- package/dist/server/web-server/utils/prepare-list-response.d.ts +1 -1
- package/dist/server/web-server/utils.d.ts +2 -2
- package/dist/utils/should-forward-prop.d.ts +9 -0
- package/dist/utils/should-forward-prop.js +1 -0
- package/package.json +12 -11
- package/dist/server/plugins/catalog-entities/utils/has-options-changed.d.ts +0 -2
- package/dist/server/plugins/catalog-entities/utils/has-options-changed.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{PLAN_GATES_DEFAULTS as
|
|
1
|
+
import{PLAN_GATES_DEFAULTS as g}from"../../../constants/entitlements.js";import{EntitlementsProvider as m}from"../../../entitlements/entitlements-provider.js";import{BaseService as S}from"../../../providers/database/base-service.js";import{InstanceCacheResolver as f}from"../../../providers/database/instance-cache-resolver.js";import{StorageLimitValidator as h}from"../../../providers/database/utils/storage-limit-validator.js";import{KvRepository as p}from"../repositories/kv-repository.js";import{encodeKvKey as E}from"../mappers/create-kv-db-record.js";import{kvKeyValidator as i,kvListOptionsValidator as B,kvListSelectorValidator as w,kvSetOptionsValidator as d}from"../schemas/kv-schemas.js";const k=100*1024*1024;class l extends S{static#n=new f(async t=>new l(await p.create(t),t));#t;constructor(t,e){super(e,{repository:t,createRepository:p.create}),this.#t=new h}static async getInstance(t){return l.#n.get(t)}async get(t){const e=i.parse(t);return this.runRead(r=>r.get(e))}async getMany(t){if(t.length===0)return[];const e=t.map(r=>i.parse(r));return this.runRead(r=>r.getMany(e))}async list(t,e){const r=w.parse(t),s=B.parse(e??{});return this.runRead(n=>n.list(r,s))}async set(t,e,r){const s=i.parse(t),n=d.parse(r??{});this.#e(e);const a=JSON.stringify(e);return this.#r(a),await this.#s(s,a),this.runWrite(o=>o.set(s,e,n))}async delete(t){const e=i.parse(t);await this.runWrite(r=>r.delete(e))}async clearExpired(){await this.runWrite(t=>t.clearExpired())}async transaction(t){return await this.syncRepositoryIfNeeded(),this.getRepository().transaction(async e=>t({get:async s=>{const n=i.parse(s);return e.get(n)},getMany:async s=>{const n=s.map(a=>i.parse(a));return e.getMany(n)},set:async(s,n,a)=>{const o=i.parse(s),c=d.parse(a??{});this.#e(n);const y=JSON.stringify(n);return this.#r(y),await this.#s(o,y,{skipSync:!0}),e.set(o,n,c)},delete:async s=>{const n=i.parse(s);return e.delete(n)}}))}#e(t){try{JSON.stringify(t)}catch(e){const r=e instanceof Error?e.message:"Unknown error";throw new Error(`Value is not JSON serializable: ${r}`)}}#r(t){const r=Buffer.byteLength(t,"utf8");if(r>1048576){const s=(r/1024).toFixed(2);throw new Error(`Value size (${s} KB) exceeds the maximum allowed size of 1 MB (1024 KB)`)}}async#s(t,e,r){const s=E(t),n=await this.runRead(async c=>{const y=await c.getTotalStoredEntryBytes(),u=await c.getStoredEntrySizeByEncodedKey(s);return{currentTotalStoredEntryBytes:y,existingEntryBytes:u}},{onRepositoryMissing:()=>null,skipSync:r?.skipSync??!1});if(!n)return;const a=Math.max(0,n.currentTotalStoredEntryBytes-k),o=Buffer.byteLength(s,"utf8")+Buffer.byteLength(e,"utf8");this.#t.validate({storageLimitGb:this.#a(),currentTotalBytes:a,existingEntryBytes:n.existingEntryBytes,incomingEntryBytes:o,errorMessagePrefix:"KV storage limit"})}#a(){const t=m.instance().entitlements?.kvStorageLimit;return typeof t=="number"&&t>0?t:g.pro.kvStorageLimit}}export{l as KvService};
|
|
@@ -8,16 +8,17 @@ import type { Filter } from '../../../providers/database/pagination/types.js';
|
|
|
8
8
|
import type { ScorecardsStatus } from '../entities/types.js';
|
|
9
9
|
import type { GetEntityByIdParams } from '../types/params.js';
|
|
10
10
|
import type { BulkSyncResult } from './types.js';
|
|
11
|
+
import { BaseService } from '../../../providers/database/base-service.js';
|
|
11
12
|
import { type EntityDtoSchema, type EntityRelationDtoSchema } from '../schemas/dto-schemas.js';
|
|
12
13
|
import { CatalogEntitiesRepository } from './repositories/catalog-entities-repository.js';
|
|
13
14
|
import { type ListResponseResult } from '../../../web-server/utils/prepare-list-response.js';
|
|
14
|
-
export declare class CatalogEntitiesService {
|
|
15
|
+
export declare class CatalogEntitiesService extends BaseService<CatalogEntitiesRepository> {
|
|
15
16
|
#private;
|
|
16
17
|
constructor(catalogEntitiesRepository: CatalogEntitiesRepository, options?: ServiceInstanceOptions);
|
|
17
18
|
static getInstance(options: ServiceInstanceOptions): Promise<CatalogEntitiesService>;
|
|
18
19
|
sync(): Promise<void>;
|
|
19
20
|
transaction<T>(...args: Parameters<TransactionsManager['transaction']>): Promise<T>;
|
|
20
|
-
getEntities({ paginationParams, rbacTeams, excludedTypes, excludedEntities
|
|
21
|
+
getEntities({ paginationParams, rbacTeams, excludedTypes, excludedEntities }: {
|
|
21
22
|
paginationParams: PaginationParams;
|
|
22
23
|
rbacTeams?: string[];
|
|
23
24
|
excludedTypes?: string[];
|
|
@@ -32,13 +33,13 @@ export declare class CatalogEntitiesService {
|
|
|
32
33
|
getCatalogFilters(params: CatalogFiltersParams): Promise<Record<string, import("./repositories/types.js").FilterOption[]>>;
|
|
33
34
|
getEntityRelationById(id: string): Promise<EntityRelationReadModelSchema | null>;
|
|
34
35
|
getEntitiesRelations(paginationParams?: PaginationParams): Promise<ListResponseResult<EntityRelationReadModelSchema>>;
|
|
35
|
-
getEntitiesWithRelations({ paginationParams, rbacTeams, excludedTypes, excludedEntities
|
|
36
|
+
getEntitiesWithRelations({ paginationParams, rbacTeams, excludedTypes, excludedEntities }: {
|
|
36
37
|
paginationParams: PaginationParams;
|
|
37
38
|
rbacTeams?: string[];
|
|
38
39
|
excludedTypes?: string[];
|
|
39
40
|
excludedEntities?: string[];
|
|
40
41
|
}): Promise<BffCatalogEntityList>;
|
|
41
|
-
getEntityWithRelationsByKey({ entityKey, filter, rbacTeams, excludedTypes, excludedEntities
|
|
42
|
+
getEntityWithRelationsByKey({ entityKey, filter, rbacTeams, excludedTypes, excludedEntities }: {
|
|
42
43
|
entityKey: string;
|
|
43
44
|
filter?: {
|
|
44
45
|
revision?: string | null;
|
|
@@ -48,7 +49,7 @@ export declare class CatalogEntitiesService {
|
|
|
48
49
|
excludedTypes?: string[];
|
|
49
50
|
excludedEntities?: string[];
|
|
50
51
|
}): Promise<BffCatalogEntity | null>;
|
|
51
|
-
getRelatedEntities({ entityKey, paginationParams, rbacTeams, excludedTypes, excludedEntities
|
|
52
|
+
getRelatedEntities({ entityKey, paginationParams, rbacTeams, excludedTypes, excludedEntities }: {
|
|
52
53
|
entityKey: string;
|
|
53
54
|
paginationParams: PaginationParams;
|
|
54
55
|
rbacTeams?: string[];
|
|
@@ -75,7 +76,7 @@ export declare class CatalogEntitiesService {
|
|
|
75
76
|
createEntitiesRelations(entities: EntityRelationDtoSchema[]): Promise<BulkSyncResult<EntityRelationReadModelSchema>>;
|
|
76
77
|
updateEntityRelation(incomingRelationData: Partial<EntityRelationDtoSchema>, relationToBeUpdated: EntityRelationReadModelSchema): Promise<EntityRelationReadModelSchema | null>;
|
|
77
78
|
deleteEntityRelation(id: string): Promise<string | null>;
|
|
78
|
-
softDeleteEntitiesWithRelations({ filter, revision, fileHash
|
|
79
|
+
softDeleteEntitiesWithRelations({ filter, revision, fileHash }: {
|
|
79
80
|
filter: Filter;
|
|
80
81
|
revision: string;
|
|
81
82
|
fileHash: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{promiseMapLimit as
|
|
1
|
+
import{promiseMapLimit as d}from"../../../utils/async/promise-map-limit.js";import{envConfig as u}from"../../../config/env-config.js";import{BaseService as p}from"../../../providers/database/base-service.js";import{InstanceCacheResolver as W}from"../../../providers/database/instance-cache-resolver.js";import{CatalogEntitiesRepository as l}from"./repositories/catalog-entities-repository.js";import{prepareListResponse as y}from"../../../web-server/utils/prepare-list-response.js";import{ENTITY_RELATION_FROM_DATABASE as E}from"./mappers/field-transformations.js";const R=15;class c extends p{static#e=new W(async t=>new c(await l.create(t),t));#t={};constructor(t,e){super(e,{repository:t,createRepository:l.create})}static async getInstance(t){return c.#e.get(t)}async sync(){await this.syncRepositoryIfNeeded()}async transaction(...t){return this.getRepository().transactionsManager.transaction(...t)}async getEntities({paginationParams:t,rbacTeams:e,excludedTypes:i,excludedEntities:n}){return this.runRead(async s=>{const{items:r,total:a,hasMore:o}=await s.entitiesRead.getEntities({paginationParams:t,rbacTeams:e,excludedTypes:i,excludedEntities:n});return y({data:r,params:t,totalCount:a,hasMore:o})})}async getEntityById(t,e){return this.runRead(async i=>await i.entitiesRead.getEntityById(t,e)??null)}async getEntityKeysAndVersionsBySourceFile(t){return this.runRead(e=>e.entitiesRead.getEntityKeysAndVersionsBySourceFile(t))}async getEntitiesCountByTypes(){return this.runRead(t=>t.entitiesRead.getEntitiesCountByTypes())}async getCatalogFilters(t){return this.runRead(e=>e.filters.getCatalogFilters(t))}async getEntityRelationById(t){return this.runRead(async e=>await e.relationsRead.getEntityRelationById(t)??null)}async getEntitiesRelations(t={}){return this.runRead(async e=>{const{items:i,total:n,hasMore:s}=await e.relationsRead.getEntitiesRelations(t);return y({data:i,params:t,totalCount:n,nameTransformationsFromDatabase:E,hasMore:s})})}async getEntitiesWithRelations({paginationParams:t,rbacTeams:e,excludedTypes:i,excludedEntities:n}){return this.runRead(async s=>{const{items:r,total:a,hasMore:o}=await s.bffEntitiesRead.getEntitiesWithRelations({paginationParams:t,rbacTeams:e,excludedTypes:i,excludedEntities:n});return y({data:r,params:t,totalCount:a,hasMore:o})})}async getEntityWithRelationsByKey({entityKey:t,filter:e,rbacTeams:i,excludedTypes:n,excludedEntities:s}){return this.runRead(r=>r.bffEntitiesRead.getEntityWithRelationsByKey({entityKey:t,filter:e,rbacTeams:i,excludedTypes:n,excludedEntities:s}))}async getRelatedEntities({entityKey:t,paginationParams:e,rbacTeams:i,excludedTypes:n,excludedEntities:s}){return this.runRead(async r=>{const{items:a,total:o,hasMore:h}=await r.relationsRead.getRelatedEntities({key:t,paginationParams:e,rbacTeams:i,excludedTypes:n,excludedEntities:s});return y({data:a,params:e,totalCount:o,nameTransformationsFromDatabase:E,hasMore:h})})}async listEntityRevisions(t,e){return this.runRead(i=>i.revisions.listEntityRevisions(t,e))}async getOutdatedEntities(t){return this.runRead(e=>e.entitiesRead.getOutdatedEntities(t))}async getEntitiesCount(t,e,i){return this.runRead(n=>n.entitiesRead.getEntitiesCount(t,e,i))}async createEntity(t){if(u.isDevelopMode&&t.source==="remote")throw new Error("API based entity creation is not supported in the develop mode");return t.isRootEntity&&t.sourceFile&&(this.#t[t.sourceFile]={key:t.entity.key,version:t.entity.version??void 0}),this.runWrite(e=>e.entitiesWrite.createEntity(t))}async createEntities(t,e){if(u.isDevelopMode&&e==="remote")throw new Error("API based entity creation is not supported in the develop mode");return await d(t,R,async i=>this.runWrite(n=>n.entitiesWrite.createEntity({entity:i,source:e})).then(n=>({status:"ok",resource:n})).catch(n=>({key:i.key,status:"error",error:n})))}getEntitySources(){return this.#t}async createEntityRelations(t){await this.runWrite(e=>e.relationsWrite.createEntityRelations(t))}async updateEntity(t,e){if(u.isDevelopMode&&e.source==="remote")throw new Error("Entity update is not supported in the develop mode");return this.runWrite(i=>i.transactionsManager.transaction(()=>i.entitiesWrite.updateEntity(t,e)))}async deleteEntity(t){if(u.isDevelopMode&&t.source==="remote")throw new Error("Entity deletion is not supported in the develop mode");return this.runWrite(e=>e.entitiesWrite.deleteEntity(t))}async deleteEntities(t){await this.runWrite(async e=>{await e.entitiesWrite.deleteEntities(t)})}async createEntityRelation(t){return this.runWrite(e=>e.relationsWrite.createEntityRelation(t))}async createEntitiesRelations(t){return await d(t,R,async e=>this.runWrite(i=>i.relationsWrite.createEntityRelation(e)).then(i=>({status:"ok",resource:i})).catch(i=>({key:e.sourceKey,status:"error",error:i})))}async updateEntityRelation(t,e){const i={...e,...t,type:t.type??e.type};return this.runWrite(n=>n.relationsWrite.createEntityRelation(i))}async deleteEntityRelation(t){return this.runWrite(e=>e.relationsWrite.deleteEntityRelation(t))}async softDeleteEntitiesWithRelations({filter:t,revision:e,fileHash:i}){return this.runWrite(n=>n.entitiesWrite.softDeleteEntitiesWithRelations({filter:t,revision:e,fileHash:i}))}async updateEntityScorecardsStatus(t,e){return this.runWrite(i=>i.entitiesWrite.updateEntityScorecardsStatus(t,e))}async updateEntityScorecardsStatusIfCalculating(t,e){return this.runWrite(i=>i.entitiesWrite.updateEntityScorecardsStatusIfCalculating(t,e))}async setEntitiesAsOutdated(t){await this.runWrite(async e=>{await e.entitiesWrite.setEntitiesAsOutdated(t)})}}export{c as CatalogEntitiesService};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { DatabaseEntityAttributesDto } from '../../../../providers/database/databases/sqlite-db/schemas/entities-attributes-table.js';
|
|
2
|
-
export declare function createEntityAttributesDbRecord({ rbacTeams, entityKey, organizationId, projectId
|
|
2
|
+
export declare function createEntityAttributesDbRecord({ rbacTeams, entityKey, organizationId, projectId }: {
|
|
3
3
|
rbacTeams: string[];
|
|
4
4
|
entityKey: string;
|
|
5
5
|
organizationId: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { EntityBaseFileSchema } from '@redocly/config';
|
|
2
2
|
import type { DatabaseEntityDto } from '../../../../providers/database/databases/sqlite-db/schemas/entities-table.js';
|
|
3
|
-
export declare function createEntityDbRecord({ entity, organizationId, projectId, source, sourceFile, fileHash
|
|
3
|
+
export declare function createEntityDbRecord({ entity, organizationId, projectId, source, sourceFile, fileHash }: {
|
|
4
4
|
entity: EntityBaseFileSchema & {
|
|
5
5
|
id?: string;
|
|
6
6
|
createdAt?: string;
|
|
@@ -10,6 +10,6 @@ type CreateEntityRelationDbRecordFromFileSchemaParams = {
|
|
|
10
10
|
organizationId: string;
|
|
11
11
|
projectId: string;
|
|
12
12
|
};
|
|
13
|
-
export declare function createEntityRelationDbRecordFromFileSchema({ relation, sourceFile, fileHash, sourceKey, sourceVersion, sourceRevision, organizationId, projectId
|
|
13
|
+
export declare function createEntityRelationDbRecordFromFileSchema({ relation, sourceFile, fileHash, sourceKey, sourceVersion, sourceRevision, organizationId, projectId }: CreateEntityRelationDbRecordFromFileSchemaParams): DatabaseEntityRelationDto;
|
|
14
14
|
export {};
|
|
15
15
|
//# sourceMappingURL=create-entity-relation-db-record-from-file-schema.d.ts.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export declare const ENTITY_RELATION_TO_DATABASE: {
|
|
2
|
-
readonly relation_type:
|
|
2
|
+
readonly relation_type: 'source_to_target_relation';
|
|
3
3
|
};
|
|
4
4
|
export declare const ENTITY_RELATION_FROM_DATABASE: {
|
|
5
|
-
readonly source_to_target_relation:
|
|
5
|
+
readonly source_to_target_relation: 'relationType';
|
|
6
6
|
};
|
|
7
7
|
//# sourceMappingURL=field-transformations.d.ts.map
|
|
@@ -3,17 +3,17 @@ export declare const INTERNAL_CATALOG_PUBLISH_CACHE_NAMESPACE = "catalog-publish
|
|
|
3
3
|
export declare const INTERNAL_CATALOG_PUBLISH_KEY_PREFIX = "catalog-entities::publisher";
|
|
4
4
|
export declare class RemotePublishLockService {
|
|
5
5
|
#private;
|
|
6
|
-
static getInternalCacheValue({ remoteConnection, key
|
|
6
|
+
static getInternalCacheValue({ remoteConnection, key }: {
|
|
7
7
|
remoteConnection: DatabaseConnection;
|
|
8
8
|
key: string;
|
|
9
9
|
}): Promise<string | null>;
|
|
10
|
-
static upsertInternalCacheValue({ remoteConnection, key, value, ttl
|
|
10
|
+
static upsertInternalCacheValue({ remoteConnection, key, value, ttl }: {
|
|
11
11
|
remoteConnection: DatabaseConnection;
|
|
12
12
|
key: string;
|
|
13
13
|
value: string;
|
|
14
14
|
ttl?: number | null;
|
|
15
15
|
}): Promise<void>;
|
|
16
|
-
static runUnderRemotePublishLock<T>({ runId, remoteConnection, run
|
|
16
|
+
static runUnderRemotePublishLock<T>({ runId, remoteConnection, run }: {
|
|
17
17
|
runId: string;
|
|
18
18
|
remoteConnection: DatabaseConnection;
|
|
19
19
|
run: () => Promise<T>;
|
|
@@ -5,13 +5,13 @@ import type { ListResult } from '../types.js';
|
|
|
5
5
|
export declare class BffEntitiesReadRepository {
|
|
6
6
|
#private;
|
|
7
7
|
constructor(db: DatabaseClient);
|
|
8
|
-
getEntitiesWithRelations({ paginationParams, rbacTeams, excludedEntities, excludedTypes
|
|
8
|
+
getEntitiesWithRelations({ paginationParams, rbacTeams, excludedEntities, excludedTypes }: {
|
|
9
9
|
paginationParams: PaginationParams;
|
|
10
10
|
rbacTeams?: string[];
|
|
11
11
|
excludedEntities?: string[];
|
|
12
12
|
excludedTypes?: string[];
|
|
13
13
|
}): Promise<ListResult<BffCatalogEntity>>;
|
|
14
|
-
getEntityWithRelationsByKey({ entityKey, filter, rbacTeams, excludedTypes, excludedEntities
|
|
14
|
+
getEntityWithRelationsByKey({ entityKey, filter, rbacTeams, excludedTypes, excludedEntities }: {
|
|
15
15
|
entityKey: string;
|
|
16
16
|
filter?: {
|
|
17
17
|
revision?: string | null;
|
package/dist/server/plugins/catalog-entities/database/repositories/catalog-entities-repository.d.ts
CHANGED
|
@@ -8,7 +8,6 @@ import { EntitiesWriteRepository } from './entities/entities-write-repository.js
|
|
|
8
8
|
import { RelationsWriteRepository } from './relations/relations-write-repository.js';
|
|
9
9
|
import { FiltersRepository } from './common/filters-repository.js';
|
|
10
10
|
export declare class CatalogEntitiesRepository extends BaseRepository {
|
|
11
|
-
#private;
|
|
12
11
|
readonly entitiesRead: EntitiesReadRepository;
|
|
13
12
|
readonly entitiesWrite: EntitiesWriteRepository;
|
|
14
13
|
readonly relationsRead: RelationsReadRepository;
|
|
@@ -19,8 +18,6 @@ export declare class CatalogEntitiesRepository extends BaseRepository {
|
|
|
19
18
|
get transactionsManager(): import("../../../../providers/database/transactions-manager.js").TransactionsManager;
|
|
20
19
|
constructor(dbConnection: DatabaseConnection);
|
|
21
20
|
sync(): Promise<void>;
|
|
22
|
-
static
|
|
23
|
-
static recreateInstance(options: RepositoryInstanceOptions): Promise<CatalogEntitiesRepository>;
|
|
24
|
-
static resetInstance(): Promise<void>;
|
|
21
|
+
static create(options: RepositoryInstanceOptions): Promise<CatalogEntitiesRepository>;
|
|
25
22
|
}
|
|
26
23
|
//# sourceMappingURL=catalog-entities-repository.d.ts.map
|
package/dist/server/plugins/catalog-entities/database/repositories/catalog-entities-repository.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{logger as
|
|
1
|
+
import{logger as o}from"../../../../tools/notifiers/logger.js";import{telemetryTraceStep as i}from"../../../../telemetry/helpers/trace-step.js";import{BaseRepository as a}from"../../../../providers/database/base-repository.js";import{createDatabaseRepositoryInstance as n}from"../../../../providers/database/instance-cache-resolver.js";import{RelationsReadRepository as c}from"./relations/relations-read-repository.js";import{RevisionRepository as p}from"./common/revision-repository.js";import{BffEntitiesReadRepository as l}from"./bffEntities/bff-entities-read-repository.js";import{EntitiesReadRepository as m}from"./entities/entities-read-repository.js";import{EntitiesWriteRepository as y}from"./entities/entities-write-repository.js";import{RelationsWriteRepository as R}from"./relations/relations-write-repository.js";import{FiltersRepository as f}from"./common/filters-repository.js";class r extends a{entitiesRead;entitiesWrite;relationsRead;relationsWrite;bffEntitiesRead;filters;revisions;get transactionsManager(){return this.databaseClient.transactionsManager}constructor(t){super(t),this.revisions=new p(t.client),this.bffEntitiesRead=new l(t.client),this.relationsRead=new c(t.client),this.entitiesRead=new m(t.client),this.entitiesWrite=new y(t.client,this.organizationId,this.projectId),this.relationsWrite=new R(t.client,this.organizationId,this.projectId),this.filters=new f(t.client)}async sync(){return i("catalog_entities.repository.sync",async()=>{await this.databaseClient.sync()})}static async create(t){return await i("catalog_entities.repository.get_instance",async s=>{try{return await n(t,"catalog entities",r)}catch(e){throw o.error("Error creating db connection for catalog entities repository",e),s?.error(e),e}})}}export{r as CatalogEntitiesRepository};
|
package/dist/server/plugins/catalog-entities/database/repositories/common/filters-repository.d.ts
CHANGED
|
@@ -3,6 +3,6 @@ import type { CatalogFiltersParams, FilterOption } from '../types.js';
|
|
|
3
3
|
export declare class FiltersRepository {
|
|
4
4
|
#private;
|
|
5
5
|
constructor(db: DatabaseClient);
|
|
6
|
-
getCatalogFilters({ entitiesTypes, emptyFilters, rbacTeams, excludedTypes, excludedEntities
|
|
6
|
+
getCatalogFilters({ entitiesTypes, emptyFilters, rbacTeams, excludedTypes, excludedEntities }: CatalogFiltersParams): Promise<Record<string, FilterOption[]>>;
|
|
7
7
|
}
|
|
8
8
|
//# sourceMappingURL=filters-repository.d.ts.map
|
package/dist/server/plugins/catalog-entities/database/repositories/common/revision-repository.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { EntityRevisionSummary } from '../../../schemas/read-model-schemas.
|
|
|
3
3
|
export declare class RevisionRepository {
|
|
4
4
|
#private;
|
|
5
5
|
constructor(db: DatabaseClient);
|
|
6
|
-
getCurrentRevisionInfo({ key, version, revision
|
|
6
|
+
getCurrentRevisionInfo({ key, version, revision }: {
|
|
7
7
|
key: string;
|
|
8
8
|
version: string | null;
|
|
9
9
|
revision: string | null;
|
|
@@ -7,7 +7,7 @@ import type { GetEntityByIdParams } from '../../../types/params';
|
|
|
7
7
|
export declare class EntitiesReadRepository {
|
|
8
8
|
#private;
|
|
9
9
|
constructor(db: DatabaseClient);
|
|
10
|
-
getEntities({ paginationParams, rbacTeams, excludedTypes, excludedEntities
|
|
10
|
+
getEntities({ paginationParams, rbacTeams, excludedTypes, excludedEntities }: {
|
|
11
11
|
paginationParams: PaginationParams;
|
|
12
12
|
rbacTeams?: string[];
|
|
13
13
|
excludedTypes?: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{and as a,count as h,eq as l,isNotNull as R,or as A,sql as u}from"drizzle-orm";import{applyPagination as
|
|
1
|
+
import{and as a,count as h,eq as l,isNotNull as R,or as A,sql as u}from"drizzle-orm";import{applyPagination as b}from"../../../../../providers/database/pagination/index.js";import{getEffectivePaginationLimit as D}from"../../../../../providers/database/pagination/limit.js";import{entitiesTable as t}from"../../../../../providers/database/databases/sqlite-db/schemas/entities-table.js";import{entitiesAttributesTable as m}from"../../../../../providers/database/databases/sqlite-db/schemas/entities-attributes-table.js";import{VERSION_NOT_SPECIFIED as L}from"@redocly/theme/core/constants";import{applyFilter as B}from"../../../../../providers/database/pagination/filter.js";import{getFirstRunRow as O}from"../../../../../providers/database/utils/get-first-row.js";import{createEntityReadModel as f}from"../../mappers/create-entity-read-model.js";import{createEntityFieldsForSelect as w,FIELDS_TO_SELECT_FOR_ENTITY as p}from"../utils.js";import{buildRbacFilter as g}from"../utils/build-rbac-filter.js";import{buildEntitiesExclusionFilter as F}from"../utils/build-entities-exclusion-filter.js";class Y{#t;constructor(e){this.#t=e}async getEntities({paginationParams:e,rbacTeams:i,excludedTypes:n,excludedEntities:o}){const s=F(n,o,"entities"),r=this.#t.client.select(w("entities")).from(t).leftJoin(m,l(t.key,m.entityKey)).where(a(g(i,"entities_attributes"),s)),c=this.#t.client.select(p).from(r.as("combined_entities")),S=this.#t.client.select(p).from(r.as("combined_entities")).$dynamic(),T=b(S,{...e,limit:void 0,skip:void 0,after:void 0,before:void 0}),C=this.#t.client.$count(T),_=c.$dynamic(),y=D(e),$=b(_,{...e,limit:y+1}),[k,I]=await Promise.all([$.all(),C]),E=k,N=E.length>y;return{items:E.slice(0,y).map(d=>f(d)).filter(d=>d!==null),hasMore:N,total:I}}async getEntityById(e,i){const{rbacTeams:n,excludedTypes:o,excludedEntities:s}=i||{},r=F(o,s,"entities"),c=await this.#t.client.select(w("entities")).from(t).leftJoin(m,l(t.key,m.entityKey)).where(a(l(t.id,e),g(n,"entities_attributes"),r)).get();return c?f(c):null}async getEntityKeysAndVersionsBySourceFile(e){const i=await this.#t.client.selectDistinct({keyVersion:u`${t.key} || ':' || COALESCE(${t.version}, ${L})`.as("keyVersion")}).from(t).where(a(l(t.sourceFile,e),l(t.source,"file"),R(t.key))).all();return new Set(i.map(n=>n.keyVersion))}async getEntitiesCountByTypes(){return this.#t.client.select({type:t.type,count:h()}).from(t).where(a(l(t.isCurrent,!0),l(t.isDeleted,!1))).groupBy(t.type)}async getOutdatedEntities(e){const i=this.#t.client.select(p).from(t).$dynamic(),{whereCondition:n}=B(i,e),o=A(u`scorecards_status = 'OUTDATED'`,u`scorecards_status IS NULL`),s=n?a(n,o):o;return(await i.where(s).all()).map(c=>f(c)).filter(c=>c!==null)}async getEntitiesCount(e,i,n){const o=await this.#t.client.select({count:h()}).from(t).where(l(t.source,e));let s=Number(o[0]?.count??0);if(i?.length){const r=await this.#e(e,i);s+=i.length-r}return n!==void 0&&(s-=n),{total:s}}async#e(e,i){const n=u.join(i.map(r=>u`(${r.key}, ${r.version}, ${r.revision})`),u`, `),o=await this.#t.client.run(u`SELECT count(*) AS count FROM entities WHERE source = ${e} AND (key, version, revision) IN (VALUES ${n})`),s=O(o);return Number(s?.count??0)}}export{Y as EntitiesReadRepository};
|
|
@@ -7,10 +7,10 @@ import type { ScorecardsStatus } from '../../../entities/types';
|
|
|
7
7
|
export declare class EntitiesWriteRepository {
|
|
8
8
|
#private;
|
|
9
9
|
constructor(db: DatabaseClient, organizationId: string, projectId: string);
|
|
10
|
-
createEntity({ entity, source, fileHash, sourceFile, isRootEntity, isDeleted, rbacTeams, errorOnSkip, revision
|
|
10
|
+
createEntity({ entity, source, fileHash, sourceFile, isRootEntity, isDeleted, rbacTeams, errorOnSkip, revision }: CreateEntityParams): Promise<EntityReadModelSchema | null>;
|
|
11
11
|
updateEntity(incomingEntity: Partial<EntityDtoSchema>, entityToBeUpdated: EntityReadModelSchema): Promise<EntityReadModelSchema | null>;
|
|
12
12
|
setEntitiesAsOutdated(filter: Filter): Promise<void>;
|
|
13
|
-
softDeleteEntitiesWithRelations({ filter, revision, fileHash
|
|
13
|
+
softDeleteEntitiesWithRelations({ filter, revision, fileHash }: {
|
|
14
14
|
filter: Filter;
|
|
15
15
|
revision: string;
|
|
16
16
|
fileHash: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{and as
|
|
1
|
+
import{and as E,eq as c,isNull as R,or as T,sql as N}from"drizzle-orm";import{VERSION_NOT_SPECIFIED as I}from"@redocly/theme/core/constants";import{sha1 as V}from"../../../../../utils/crypto/sha1.js";import{envConfig as F}from"../../../../../config/env-config.js";import{entitiesTable as i}from"../../../../../providers/database/databases/sqlite-db/schemas/entities-table.js";import{convertFilterToWhereCondition as K}from"../../../../../providers/database/pagination/filter.js";import{entitiesRelationsTable as a}from"../../../../../providers/database/databases/sqlite-db/schemas/entities-relations-table.js";import{promiseMapLimit as m}from"../../../../../utils/async/promise-map-limit.js";import{RevisionRepository as x}from"../common/revision-repository.js";import{VersionRepository as z}from"../common/version-repository.js";import{EntityAttributesWriteRepository as H}from"../entityAttributes/entity-attributes-write-repository.js";import{createEntityDbRecord as O}from"../../mappers/create-entity-db-record.js";import{createEntityReadModel as k}from"../../mappers/create-entity-read-model.js";import{createEntityRelationDbRecordFromFileSchema as P}from"../../mappers/create-entity-relation-db-record-from-file-schema.js";import{createEntityRelationDbRecordFromDto as j}from"../../mappers/create-entity-relation-db-record-from-dto.js";import{EntitiesReadRepository as G}from"./entities-read-repository.js";import{RelationsReadRepository as M}from"../relations/relations-read-repository.js";import{RelationsWriteRepository as $}from"../relations/relations-write-repository.js";const v=15;class ce{#e;#t;#n;#o;#i;#s;#a;#u;#r;constructor(e,s,r){this.#e=e,this.#i=s,this.#s=r,this.#t=new x(e),this.#n=new z(e),this.#o=new H(e),this.#a=new G(e),this.#u=new M(e),this.#r=new $(e,s,r)}async createEntity({entity:e,source:s,fileHash:r,sourceFile:o,isRootEntity:t,isDeleted:n,rbacTeams:u,errorOnSkip:h=!1,revision:f}){const{relations:l=[],...y}=e,d=V(JSON.stringify(y)),p=e.version??I,C=f??new Date().toISOString(),W=await this.#t.shouldSkipRevisionCreation(e.key,p,d,t,n);if(Array.isArray(u)&&await this.#o.upsertEntityAttributes({entityKey:e.key,rbacTeams:u,organizationId:this.#i,projectId:this.#s}),W){if(h)throw new Error("Entity validation failed: entity already exists");return null}const{shouldSetNewCurrentRevision:g,hasCurrentRevision:L}=await this.#t.getCurrentRevisionInfo({key:e.key,version:p,revision:C}),w=O({entity:{...e,revision:C,hash:d,isCurrent:g,isDefaultVersion:g,isDeleted:n,version:p},organizationId:this.#i,projectId:this.#s,source:s,sourceFile:o??null,fileHash:r??null}),{key:D,..._}=w;if(g&&L&&(await this.#t.markAllRevisionsAsNotCurrent(D),await this.#n.markAllVersionsAsNotDefault(D)),F.isDevelopMode&&!F.REDOCLY_INTERNAL_DEV)return await this.#l(w,l);const A=await this.#e.client.insert(i).values(w).onConflictDoUpdate({target:[i.key,i.source,i.revision,i.version],set:_}).returning();return A.length?(l&&await this.#r.createEntityRelations(l.map(S=>({...S,sourceKey:e.key,targetKey:S.key}))),k(A[0])):null}async updateEntity(e,s){const{shouldSetNewCurrentRevision:r,hasCurrentRevision:o}=await this.#t.getCurrentRevisionInfo({key:s.key,version:e.version??s.version??I,revision:s.revision});r&&o&&(await this.#t.markAllRevisionsAsNotCurrent(s.key),await this.#n.markAllVersionsAsNotDefault(s.key));const t=O({entity:{...s,...e,hash:V(JSON.stringify({...s,...e})),isCurrent:r,isDefaultVersion:r,createdAt:s.createdAt??void 0},organizationId:this.#i,projectId:this.#s,source:"remote",sourceFile:null,fileHash:null}),{key:n,source:u,scorecardsStatus:h,...f}=t,l=await this.#e.client.insert(i).values(t).onConflictDoUpdate({target:[i.key,i.source,i.revision,i.version],set:{...f,scorecardsStatus:N`CASE WHEN ${i.scorecardsStatus} = 'CALCULATING' THEN 'CANCELLED' ELSE 'OUTDATED' END`}}).returning();return l.length?k(l[0]):null}async setEntitiesAsOutdated(e){const s=K(e);await this.#e.client.update(i).set({scorecardsStatus:"OUTDATED"}).where(s)}async#l(e,s){const{key:r,source:o,version:t,isDefaultVersion:n,...u}=e,l=await this.#e.client.select({id:i.id}).from(i).where(E(c(i.key,r),t?c(i.version,t):R(i.version))).limit(1).get()!=null?await this.#e.client.update(i).set(u).where(E(c(i.key,r),t?c(i.version,t):R(i.version))).returning():await this.#e.client.insert(i).values(e).onConflictDoUpdate({target:[i.key,i.source,i.revision,i.version],set:u}).returning(),y=s?.map(d=>{const p=P({relation:d,sourceFile:e.sourceFile??"",fileHash:e.fileHash??"",sourceKey:e.key,sourceVersion:e.version??null,sourceRevision:e.revision??null,organizationId:this.#i,projectId:this.#s});return this.#e.client.insert(a).values(p).onConflictDoUpdate({target:[a.sourceKey,a.targetKey,a.sourceVersion,a.targetVersion,a.sourceRevision,a.targetRevision,a.sourceToTargetRelation],set:p}).run()})??[];return await m(y,v,async d=>d),k(l[0])}async softDeleteEntitiesWithRelations({filter:e,revision:s,fileHash:r}){const t={op:"AND",conditions:[e,{field:"is_deleted",operator:"equal",value:!1}]};for(;;){const n=await this.#a.getEntities({paginationParams:{filter:t,limit:500}});if(n.items.length===0)break;const u=await this.#c({entities:n.items,revision:s,fileHash:r});await this.#d(u,s)}}async deleteEntity(e){return await this.#r.deleteEntityRelationsOnEntityRemoval(e),await this.#e.client.delete(i).where(c(i.id,e.id)),await this.#t.ensureDefaultAndCurrentRevisionForKey(e.key),e.id}async deleteEntities(e){const s=K(e);if(!s)return!1;const r=await this.#e.client.delete(i).where(s).returning({key:i.key,source:i.source,isCurrent:i.isCurrent,isDefaultVersion:i.isDefaultVersion,version:i.version});if(r.length===0)return!0;const o=r.reduce((t,n)=>((n.isCurrent||n.isDefaultVersion)&&t.add(n.key),t),new Set);if(o.size===0)return!0;await m(Array.from(o),v,async t=>this.#t.ensureDefaultAndCurrentRevisionForKey(t));for(const t of r)await this.#e.client.delete(a).where(T(E(c(a.sourceKey,t.key),...t.version?[c(a.sourceVersion,t.version)]:[R(a.sourceVersion)]),E(c(a.targetKey,t.key),...t.version?[c(a.targetVersion,t.version)]:[R(a.targetVersion)])));return!0}async updateEntityScorecardsStatus(e,s){return(await this.#e.client.update(i).set({scorecardsStatus:s}).where(c(i.id,e)).returning()).length>0}async updateEntityScorecardsStatusIfCalculating(e,s){return(await this.#e.client.update(i).set({scorecardsStatus:s}).where(N`${i.id} = ${e} AND ${i.scorecardsStatus} = 'CALCULATING'`).returning()).length>0}async#c({entities:e,revision:s,fileHash:r}){return(await m(e,v,async t=>{const n={type:t.type,key:t.key,title:t.title,summary:t.summary??void 0,tags:t.tags??void 0,metadata:t.metadata??void 0,git:t.git??void 0,contact:t.contact??void 0,links:t.links??void 0,version:t.version??void 0};return this.createEntity({entity:n,sourceFile:t.sourceFile??"",fileHash:r,isDeleted:!0,errorOnSkip:!1,source:t.source,revision:s})})).filter(t=>t!==null)}async#d(e,s){if(e.length===0)return!0;const r=await m(e,v,async o=>(await this.#u.getRelationsForEntity(o.key,o.version,s)).map(n=>{if(!n)return null;const u=n.direction,h=n.sourceToTargetRelation,f=n.targetKey,l=u==="outgoing"?o.key:f,y=u==="outgoing"?f:o.key,d=u==="outgoing"?h:h.startsWith("reverse:")?h.slice(8):h;return!d||!l||!y?null:j({type:d,sourceKey:l,targetKey:y,sourceVersion:o.version,targetVersion:o.version,sourceRevision:s,targetRevision:s,isDeleted:!0},this.#i,this.#s)}).filter(n=>n!==null));return await m(r.flat(),v,async o=>this.#r.upsertEntityRelation(o)),!0}}export{ce as EntitiesWriteRepository};
|
|
@@ -2,7 +2,7 @@ import type { DatabaseClient } from '../../../../../providers/database/client.js
|
|
|
2
2
|
export declare class EntityAttributesWriteRepository {
|
|
3
3
|
#private;
|
|
4
4
|
constructor(db: DatabaseClient);
|
|
5
|
-
upsertEntityAttributes({ entityKey, rbacTeams, organizationId, projectId
|
|
5
|
+
upsertEntityAttributes({ entityKey, rbacTeams, organizationId, projectId }: {
|
|
6
6
|
entityKey: string;
|
|
7
7
|
rbacTeams: string[];
|
|
8
8
|
organizationId: string;
|
|
@@ -10,10 +10,10 @@ export declare class RelationsReadRepository {
|
|
|
10
10
|
targetKey: string;
|
|
11
11
|
targetRevision: string;
|
|
12
12
|
sourceToTargetRelation: string;
|
|
13
|
-
direction:
|
|
13
|
+
direction: 'outgoing' | 'incoming';
|
|
14
14
|
priority: number;
|
|
15
15
|
}[]>;
|
|
16
|
-
getRelatedEntities({ key, paginationParams, rbacTeams, excludedTypes, excludedEntities
|
|
16
|
+
getRelatedEntities({ key, paginationParams, rbacTeams, excludedTypes, excludedEntities }: {
|
|
17
17
|
key: string;
|
|
18
18
|
paginationParams: PaginationParams;
|
|
19
19
|
rbacTeams?: string[];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const createEntityFieldsForSelect: (tableAlias?: string, idAlias?: string) => {
|
|
2
|
-
id: import("drizzle-orm").SQL<unknown> | import("drizzle-orm").SQL
|
|
2
|
+
id: import("drizzle-orm").SQL.Aliased<unknown> | import("drizzle-orm").SQL<unknown>;
|
|
3
3
|
organizationId: import("drizzle-orm").SQL<unknown>;
|
|
4
4
|
projectId: import("drizzle-orm").SQL<unknown>;
|
|
5
5
|
key: import("drizzle-orm").SQL<unknown>;
|
|
@@ -25,7 +25,7 @@ export declare const createEntityFieldsForSelect: (tableAlias?: string, idAlias?
|
|
|
25
25
|
scorecardsStatus: import("drizzle-orm").SQL<unknown>;
|
|
26
26
|
};
|
|
27
27
|
export declare const createEntityRelationFieldsForSelect: (tableAlias?: string, idAlias?: string) => {
|
|
28
|
-
id: import("drizzle-orm").SQL<unknown> | import("drizzle-orm").SQL
|
|
28
|
+
id: import("drizzle-orm").SQL.Aliased<unknown> | import("drizzle-orm").SQL<unknown>;
|
|
29
29
|
organizationId: import("drizzle-orm").SQL<unknown>;
|
|
30
30
|
projectId: import("drizzle-orm").SQL<unknown>;
|
|
31
31
|
sourceKey: import("drizzle-orm").SQL<unknown>;
|
|
@@ -91,7 +91,7 @@ export declare const createQualifiedEntityFieldsForSelectWithAliases: (tableAlia
|
|
|
91
91
|
isDeleted: import("drizzle-orm").SQL.Aliased<unknown>;
|
|
92
92
|
};
|
|
93
93
|
export declare const FIELDS_TO_SELECT_FOR_ENTITY: {
|
|
94
|
-
id: import("drizzle-orm").SQL<unknown> | import("drizzle-orm").SQL
|
|
94
|
+
id: import("drizzle-orm").SQL.Aliased<unknown> | import("drizzle-orm").SQL<unknown>;
|
|
95
95
|
organizationId: import("drizzle-orm").SQL<unknown>;
|
|
96
96
|
projectId: import("drizzle-orm").SQL<unknown>;
|
|
97
97
|
key: import("drizzle-orm").SQL<unknown>;
|
|
@@ -117,7 +117,7 @@ export declare const FIELDS_TO_SELECT_FOR_ENTITY: {
|
|
|
117
117
|
scorecardsStatus: import("drizzle-orm").SQL<unknown>;
|
|
118
118
|
};
|
|
119
119
|
export declare const FIELDS_TO_SELECT_FOR_ENTITY_RELATION: {
|
|
120
|
-
id: import("drizzle-orm").SQL<unknown> | import("drizzle-orm").SQL
|
|
120
|
+
id: import("drizzle-orm").SQL.Aliased<unknown> | import("drizzle-orm").SQL<unknown>;
|
|
121
121
|
organizationId: import("drizzle-orm").SQL<unknown>;
|
|
122
122
|
projectId: import("drizzle-orm").SQL<unknown>;
|
|
123
123
|
sourceKey: import("drizzle-orm").SQL<unknown>;
|
package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/base.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ import type { BaseApiEntitiesExtractorParams, SpecType } from '../../../types/ex
|
|
|
7
7
|
import type { EntityDtoSchema } from '../../../schemas/dto-schemas.js';
|
|
8
8
|
export declare abstract class BaseApiEntitiesExtractor<BundledApiDefinition extends Pick<FileInfo, 'realRelativePath' | 'relativePath' | 'isVirtual' | 'hash'>> implements BaseEntitiesExtractor {
|
|
9
9
|
#private;
|
|
10
|
-
protected type:
|
|
10
|
+
protected type: 'api-description';
|
|
11
11
|
protected specType: SpecType;
|
|
12
12
|
protected fileType: FileType;
|
|
13
13
|
protected actions: AfterRoutesCreatedActions;
|
|
@@ -26,7 +26,7 @@ export declare abstract class BaseApiEntitiesExtractor<BundledApiDefinition exte
|
|
|
26
26
|
* @param customKey - Optional custom key from x-redocly-catalog-key
|
|
27
27
|
* @param extensionPattern - Optional regex to strip file extension (default: any extension)
|
|
28
28
|
*/
|
|
29
|
-
protected resolveEntityKey({ realRelativePath, customKey, extensionPattern
|
|
29
|
+
protected resolveEntityKey({ realRelativePath, customKey, extensionPattern }: {
|
|
30
30
|
realRelativePath: string;
|
|
31
31
|
customKey?: string | null;
|
|
32
32
|
extensionPattern?: RegExp;
|
package/dist/server/plugins/catalog-entities/extensions/extractors/fs-entities-extractor.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import type { CatalogEntitiesService } from '../../database/catalog-entities-ser
|
|
|
4
4
|
import type { EntitiesCatalogConfig } from '@redocly/config';
|
|
5
5
|
export declare class FsEntitiesExtractor {
|
|
6
6
|
#private;
|
|
7
|
-
constructor({ fileHashManager, context, catalogEntitiesService, catalogConfig, shouldCalculateEntities
|
|
7
|
+
constructor({ fileHashManager, context, catalogEntitiesService, catalogConfig, shouldCalculateEntities }: {
|
|
8
8
|
fileHashManager: HashManager;
|
|
9
9
|
context: LifecycleContext;
|
|
10
10
|
catalogEntitiesService: CatalogEntitiesService;
|