@backstage/plugin-catalog-backend 1.11.0-next.0 → 1.11.0

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 CHANGED
@@ -1,5 +1,33 @@
1
1
  # @backstage/plugin-catalog-backend
2
2
 
3
+ ## 1.11.0
4
+
5
+ ### Minor Changes
6
+
7
+ - f06f0e46ba88: Support placeholder resolvers in the CatalogPlugin, also moves `PlaceholderResolver` and related types from `@backstage/plugin-catalog-backend` to `@backstage/plugin-catalog-node`.
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies
12
+ - @backstage/errors@1.2.1
13
+ - @backstage/backend-common@0.19.1
14
+ - @backstage/plugin-catalog-node@1.4.0
15
+ - @backstage/backend-plugin-api@0.5.4
16
+ - @backstage/backend-tasks@0.5.4
17
+ - @backstage/catalog-client@1.4.3
18
+ - @backstage/catalog-model@1.4.1
19
+ - @backstage/config@1.0.8
20
+ - @backstage/integration@1.5.1
21
+ - @backstage/types@1.1.0
22
+ - @backstage/plugin-auth-node@0.2.16
23
+ - @backstage/plugin-catalog-common@1.0.15
24
+ - @backstage/plugin-events-node@0.2.8
25
+ - @backstage/plugin-permission-common@0.7.7
26
+ - @backstage/plugin-permission-node@0.7.10
27
+ - @backstage/plugin-scaffolder-common@1.3.2
28
+ - @backstage/plugin-search-backend-module-catalog@0.1.3
29
+ - @backstage/plugin-search-common@1.2.5
30
+
3
31
  ## 1.11.0-next.0
4
32
 
5
33
  ### Minor Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-catalog-backend",
3
- "version": "1.11.0-next.0",
3
+ "version": "1.11.0",
4
4
  "main": "../dist/alpha.cjs.js",
5
5
  "types": "../dist/alpha.d.ts"
6
6
  }
package/dist/alpha.cjs.js CHANGED
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var alpha = require('@backstage/plugin-catalog-common/alpha');
6
6
  var pluginPermissionNode = require('@backstage/plugin-permission-node');
7
- var CatalogBuilder = require('./cjs/CatalogBuilder-26406e82.cjs.js');
7
+ var CatalogBuilder = require('./cjs/CatalogBuilder-21da853f.cjs.js');
8
8
  var backendPluginApi = require('@backstage/backend-plugin-api');
9
9
  var alpha$1 = require('@backstage/plugin-catalog-node/alpha');
10
10
  var backendCommon = require('@backstage/backend-common');
@@ -1 +1 @@
1
- {"version":3,"file":"alpha.cjs.js","sources":["../src/permissions/conditionExports.ts","../src/service/CatalogPlugin.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { RESOURCE_TYPE_CATALOG_ENTITY } from '@backstage/plugin-catalog-common/alpha';\nimport { createConditionExports } from '@backstage/plugin-permission-node';\nimport { permissionRules } from './rules';\n\nconst { conditions, createConditionalDecision } = createConditionExports({\n pluginId: 'catalog',\n resourceType: RESOURCE_TYPE_CATALOG_ENTITY,\n rules: permissionRules,\n});\n\n/**\n * These conditions are used when creating conditional decisions for catalog\n * entities that are returned by authorization policies.\n *\n * @alpha\n */\nexport const catalogConditions = conditions;\n\n/**\n * `createCatalogConditionalDecision` can be used when authoring policies to\n * create conditional decisions. It requires a permission of type\n * `ResourcePermission<'catalog-entity'>` to be passed as the first parameter.\n * It's recommended that you use the provided `isResourcePermission` and\n * `isPermission` helper methods to narrow the type of the permission passed to\n * the handle method as shown below.\n *\n * ```\n * // MyAuthorizationPolicy.ts\n * ...\n * import { createCatalogPolicyDecision } from '@backstage/plugin-catalog-backend';\n * import { RESOURCE_TYPE_CATALOG_ENTITY } from '@backstage/plugin-catalog-common';\n *\n * class MyAuthorizationPolicy implements PermissionPolicy {\n * async handle(request, user) {\n * ...\n *\n * if (isResourcePermission(request.permission, RESOURCE_TYPE_CATALOG_ENTITY)) {\n * return createCatalogConditionalDecision(\n * request.permission,\n * { anyOf: [...insert conditions here...] }\n * );\n * }\n *\n * ...\n * }\n * ```\n *\n * @alpha\n */\nexport const createCatalogConditionalDecision = createConditionalDecision;\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n createBackendPlugin,\n coreServices,\n} from '@backstage/backend-plugin-api';\nimport { CatalogBuilder } from './CatalogBuilder';\nimport {\n CatalogProcessingExtensionPoint,\n catalogProcessingExtensionPoint,\n} from '@backstage/plugin-catalog-node/alpha';\nimport {\n CatalogProcessor,\n EntityProvider,\n} from '@backstage/plugin-catalog-node';\nimport { loggerToWinstonLogger } from '@backstage/backend-common';\nimport { PlaceholderResolver } from '../modules';\n\nclass CatalogExtensionPointImpl implements CatalogProcessingExtensionPoint {\n #processors = new Array<CatalogProcessor>();\n #entityProviders = new Array<EntityProvider>();\n #placeholderResolvers: Record<string, PlaceholderResolver> = {};\n\n addProcessor(\n ...processors: Array<CatalogProcessor | Array<CatalogProcessor>>\n ): void {\n this.#processors.push(...processors.flat());\n }\n\n addEntityProvider(\n ...providers: Array<EntityProvider | Array<EntityProvider>>\n ): void {\n this.#entityProviders.push(...providers.flat());\n }\n\n addPlaceholderResolver(key: string, resolver: PlaceholderResolver) {\n if (key in this.#placeholderResolvers)\n throw new Error(\n `A placeholder resolver for '${key}' has already been set up, please check your config.`,\n );\n this.#placeholderResolvers[key] = resolver;\n }\n\n get processors() {\n return this.#processors;\n }\n\n get entityProviders() {\n return this.#entityProviders;\n }\n\n get placeholderResolvers() {\n return this.#placeholderResolvers;\n }\n}\n\n/**\n * Catalog plugin\n * @alpha\n */\nexport const catalogPlugin = createBackendPlugin({\n pluginId: 'catalog',\n register(env) {\n const processingExtensions = new CatalogExtensionPointImpl();\n // plugins depending on this API will be initialized before this plugins init method is executed.\n env.registerExtensionPoint(\n catalogProcessingExtensionPoint,\n processingExtensions,\n );\n\n env.registerInit({\n deps: {\n logger: coreServices.logger,\n config: coreServices.config,\n reader: coreServices.urlReader,\n permissions: coreServices.permissions,\n database: coreServices.database,\n httpRouter: coreServices.httpRouter,\n lifecycle: coreServices.lifecycle,\n scheduler: coreServices.scheduler,\n },\n async init({\n logger,\n config,\n reader,\n database,\n permissions,\n httpRouter,\n lifecycle,\n scheduler,\n }) {\n const winstonLogger = loggerToWinstonLogger(logger);\n const builder = await CatalogBuilder.create({\n config,\n reader,\n permissions,\n database,\n scheduler,\n logger: winstonLogger,\n });\n builder.addProcessor(...processingExtensions.processors);\n builder.addEntityProvider(...processingExtensions.entityProviders);\n Object.entries(processingExtensions.placeholderResolvers).forEach(\n ([key, resolver]) => builder.setPlaceholderResolver(key, resolver),\n );\n\n const { processingEngine, router } = await builder.build();\n\n await processingEngine.start();\n lifecycle.addShutdownHook(() => processingEngine.stop());\n httpRouter.use(router);\n },\n });\n },\n});\n"],"names":["createConditionExports","RESOURCE_TYPE_CATALOG_ENTITY","permissionRules","createBackendPlugin","catalogProcessingExtensionPoint","coreServices","loggerToWinstonLogger","CatalogBuilder"],"mappings":"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"}
1
+ {"version":3,"file":"alpha.cjs.js","sources":["../src/permissions/conditionExports.ts","../src/service/CatalogPlugin.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { RESOURCE_TYPE_CATALOG_ENTITY } from '@backstage/plugin-catalog-common/alpha';\nimport { createConditionExports } from '@backstage/plugin-permission-node';\nimport { permissionRules } from './rules';\n\nconst { conditions, createConditionalDecision } = createConditionExports({\n pluginId: 'catalog',\n resourceType: RESOURCE_TYPE_CATALOG_ENTITY,\n rules: permissionRules,\n});\n\n/**\n * These conditions are used when creating conditional decisions for catalog\n * entities that are returned by authorization policies.\n *\n * @alpha\n */\nexport const catalogConditions = conditions;\n\n/**\n * `createCatalogConditionalDecision` can be used when authoring policies to\n * create conditional decisions. It requires a permission of type\n * `ResourcePermission<'catalog-entity'>` to be passed as the first parameter.\n * It's recommended that you use the provided `isResourcePermission` and\n * `isPermission` helper methods to narrow the type of the permission passed to\n * the handle method as shown below.\n *\n * ```\n * // MyAuthorizationPolicy.ts\n * ...\n * import { createCatalogPolicyDecision } from '@backstage/plugin-catalog-backend';\n * import { RESOURCE_TYPE_CATALOG_ENTITY } from '@backstage/plugin-catalog-common';\n *\n * class MyAuthorizationPolicy implements PermissionPolicy {\n * async handle(request, user) {\n * ...\n *\n * if (isResourcePermission(request.permission, RESOURCE_TYPE_CATALOG_ENTITY)) {\n * return createCatalogConditionalDecision(\n * request.permission,\n * { anyOf: [...insert conditions here...] }\n * );\n * }\n *\n * ...\n * }\n * ```\n *\n * @alpha\n */\nexport const createCatalogConditionalDecision = createConditionalDecision;\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n createBackendPlugin,\n coreServices,\n} from '@backstage/backend-plugin-api';\nimport { CatalogBuilder } from './CatalogBuilder';\nimport {\n CatalogProcessingExtensionPoint,\n catalogProcessingExtensionPoint,\n} from '@backstage/plugin-catalog-node/alpha';\nimport {\n CatalogProcessor,\n EntityProvider,\n} from '@backstage/plugin-catalog-node';\nimport { loggerToWinstonLogger } from '@backstage/backend-common';\nimport { PlaceholderResolver } from '../modules';\n\nclass CatalogExtensionPointImpl implements CatalogProcessingExtensionPoint {\n #processors = new Array<CatalogProcessor>();\n #entityProviders = new Array<EntityProvider>();\n #placeholderResolvers: Record<string, PlaceholderResolver> = {};\n\n addProcessor(\n ...processors: Array<CatalogProcessor | Array<CatalogProcessor>>\n ): void {\n this.#processors.push(...processors.flat());\n }\n\n addEntityProvider(\n ...providers: Array<EntityProvider | Array<EntityProvider>>\n ): void {\n this.#entityProviders.push(...providers.flat());\n }\n\n addPlaceholderResolver(key: string, resolver: PlaceholderResolver) {\n if (key in this.#placeholderResolvers)\n throw new Error(\n `A placeholder resolver for '${key}' has already been set up, please check your config.`,\n );\n this.#placeholderResolvers[key] = resolver;\n }\n\n get processors() {\n return this.#processors;\n }\n\n get entityProviders() {\n return this.#entityProviders;\n }\n\n get placeholderResolvers() {\n return this.#placeholderResolvers;\n }\n}\n\n/**\n * Catalog plugin\n * @alpha\n */\nexport const catalogPlugin = createBackendPlugin({\n pluginId: 'catalog',\n register(env) {\n const processingExtensions = new CatalogExtensionPointImpl();\n // plugins depending on this API will be initialized before this plugins init method is executed.\n env.registerExtensionPoint(\n catalogProcessingExtensionPoint,\n processingExtensions,\n );\n\n env.registerInit({\n deps: {\n logger: coreServices.logger,\n config: coreServices.config,\n reader: coreServices.urlReader,\n permissions: coreServices.permissions,\n database: coreServices.database,\n httpRouter: coreServices.httpRouter,\n lifecycle: coreServices.lifecycle,\n scheduler: coreServices.scheduler,\n },\n async init({\n logger,\n config,\n reader,\n database,\n permissions,\n httpRouter,\n lifecycle,\n scheduler,\n }) {\n const winstonLogger = loggerToWinstonLogger(logger);\n const builder = await CatalogBuilder.create({\n config,\n reader,\n permissions,\n database,\n scheduler,\n logger: winstonLogger,\n });\n builder.addProcessor(...processingExtensions.processors);\n builder.addEntityProvider(...processingExtensions.entityProviders);\n Object.entries(processingExtensions.placeholderResolvers).forEach(\n ([key, resolver]) => builder.setPlaceholderResolver(key, resolver),\n );\n\n const { processingEngine, router } = await builder.build();\n\n await processingEngine.start();\n lifecycle.addShutdownHook(() => processingEngine.stop());\n httpRouter.use(router);\n },\n });\n },\n});\n"],"names":["createConditionExports","RESOURCE_TYPE_CATALOG_ENTITY","permissionRules","createBackendPlugin","catalogProcessingExtensionPoint","coreServices","loggerToWinstonLogger","CatalogBuilder"],"mappings":"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"}
package/dist/alpha.d.ts CHANGED
@@ -68,7 +68,7 @@ declare const catalogConditions: _backstage_plugin_permission_node.Conditions<{
68
68
  *
69
69
  * @alpha
70
70
  */
71
- declare const createCatalogConditionalDecision: (permission: _backstage_plugin_permission_common.ResourcePermission<"catalog-entity">, conditions: _backstage_plugin_permission_common.PermissionCriteria<_backstage_plugin_permission_common.PermissionCondition<"catalog-entity">>) => _backstage_plugin_permission_common.ConditionalPolicyDecision;
71
+ declare const createCatalogConditionalDecision: (permission: _backstage_plugin_permission_common.ResourcePermission<"catalog-entity">, conditions: _backstage_plugin_permission_common.PermissionCriteria<_backstage_plugin_permission_common.PermissionCondition<"catalog-entity", _backstage_plugin_permission_common.PermissionRuleParams>>) => _backstage_plugin_permission_common.ConditionalPolicyDecision;
72
72
 
73
73
  /**
74
74
  * Convenience type for {@link @backstage/plugin-permission-node#PermissionRule}
@@ -134,9 +134,23 @@ async function findCodeOwnerByTarget(reader, targetUrl, scmIntegration) {
134
134
  return owner;
135
135
  }
136
136
 
137
+ var __defProp$b = Object.defineProperty;
138
+ var __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
139
+ var __publicField$b = (obj, key, value) => {
140
+ __defNormalProp$b(obj, typeof key !== "symbol" ? key + "" : key, value);
141
+ return value;
142
+ };
137
143
  const ALLOWED_KINDS = ["API", "Component", "Domain", "Resource", "System"];
138
144
  const ALLOWED_LOCATION_TYPES = ["url"];
139
145
  class CodeOwnersProcessor {
146
+ constructor(options) {
147
+ __publicField$b(this, "integrations");
148
+ __publicField$b(this, "logger");
149
+ __publicField$b(this, "reader");
150
+ this.integrations = options.integrations;
151
+ this.logger = options.logger;
152
+ this.reader = options.reader;
153
+ }
140
154
  static fromConfig(config, options) {
141
155
  const integrations = integration.ScmIntegrations.fromConfig(config);
142
156
  return new CodeOwnersProcessor({
@@ -144,11 +158,6 @@ class CodeOwnersProcessor {
144
158
  integrations
145
159
  });
146
160
  }
147
- constructor(options) {
148
- this.integrations = options.integrations;
149
- this.logger = options.logger;
150
- this.reader = options.reader;
151
- }
152
161
  getProcessorName() {
153
162
  return "CodeOwnersProcessor";
154
163
  }
@@ -225,9 +234,15 @@ class AnnotateLocationEntityProcessor {
225
234
  }
226
235
  }
227
236
 
237
+ var __defProp$a = Object.defineProperty;
238
+ var __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
239
+ var __publicField$a = (obj, key, value) => {
240
+ __defNormalProp$a(obj, typeof key !== "symbol" ? key + "" : key, value);
241
+ return value;
242
+ };
228
243
  class BuiltinKindsEntityProcessor {
229
244
  constructor() {
230
- this.validators = [
245
+ __publicField$a(this, "validators", [
231
246
  catalogModel.apiEntityV1alpha1Validator,
232
247
  catalogModel.componentEntityV1alpha1Validator,
233
248
  catalogModel.resourceEntityV1alpha1Validator,
@@ -236,7 +251,7 @@ class BuiltinKindsEntityProcessor {
236
251
  catalogModel.userEntityV1alpha1Validator,
237
252
  catalogModel.systemEntityV1alpha1Validator,
238
253
  catalogModel.domainEntityV1alpha1Validator
239
- ];
254
+ ]);
240
255
  }
241
256
  getProcessorName() {
242
257
  return "BuiltinKindsEntityProcessor";
@@ -861,9 +876,16 @@ class ConfigLocationEntityProvider {
861
876
  }
862
877
  }
863
878
 
879
+ var __defProp$9 = Object.defineProperty;
880
+ var __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
881
+ var __publicField$9 = (obj, key, value) => {
882
+ __defNormalProp$9(obj, typeof key !== "symbol" ? key + "" : key, value);
883
+ return value;
884
+ };
864
885
  class DefaultLocationStore {
865
886
  constructor(db) {
866
887
  this.db = db;
888
+ __publicField$9(this, "_connection");
867
889
  }
868
890
  getProviderName() {
869
891
  return "DefaultLocationStore";
@@ -952,8 +974,17 @@ class DefaultLocationStore {
952
974
  }
953
975
  }
954
976
 
977
+ var __defProp$8 = Object.defineProperty;
978
+ var __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
979
+ var __publicField$8 = (obj, key, value) => {
980
+ __defNormalProp$8(obj, typeof key !== "symbol" ? key + "" : key, value);
981
+ return value;
982
+ };
955
983
  class RepoLocationAnalyzer {
956
984
  constructor(logger, scmIntegrations, analyzers) {
985
+ __publicField$8(this, "logger");
986
+ __publicField$8(this, "scmIntegrations");
987
+ __publicField$8(this, "analyzers");
957
988
  this.logger = logger;
958
989
  this.scmIntegrations = scmIntegrations;
959
990
  this.analyzers = analyzers;
@@ -1510,9 +1541,27 @@ function startTaskPipeline(options) {
1510
1541
  };
1511
1542
  }
1512
1543
 
1544
+ var __defProp$7 = Object.defineProperty;
1545
+ var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1546
+ var __publicField$7 = (obj, key, value) => {
1547
+ __defNormalProp$7(obj, typeof key !== "symbol" ? key + "" : key, value);
1548
+ return value;
1549
+ };
1513
1550
  const CACHE_TTL = 5;
1514
1551
  class DefaultCatalogProcessingEngine {
1515
1552
  constructor(options) {
1553
+ __publicField$7(this, "config");
1554
+ __publicField$7(this, "scheduler");
1555
+ __publicField$7(this, "logger");
1556
+ __publicField$7(this, "processingDatabase");
1557
+ __publicField$7(this, "orchestrator");
1558
+ __publicField$7(this, "stitcher");
1559
+ __publicField$7(this, "createHash");
1560
+ __publicField$7(this, "pollingIntervalMs");
1561
+ __publicField$7(this, "orphanCleanupIntervalMs");
1562
+ __publicField$7(this, "onProcessingError");
1563
+ __publicField$7(this, "tracker");
1564
+ __publicField$7(this, "stopFunc");
1516
1565
  var _a, _b, _c;
1517
1566
  this.config = options.config;
1518
1567
  this.scheduler = options.scheduler;
@@ -2030,6 +2079,12 @@ function decodeCursor(encodedCursor) {
2030
2079
  }
2031
2080
  }
2032
2081
 
2082
+ var __defProp$6 = Object.defineProperty;
2083
+ var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2084
+ var __publicField$6 = (obj, key, value) => {
2085
+ __defNormalProp$6(obj, typeof key !== "symbol" ? key + "" : key, value);
2086
+ return value;
2087
+ };
2033
2088
  const defaultSortField = {
2034
2089
  field: "metadata.uid",
2035
2090
  order: "asc"
@@ -2120,6 +2175,9 @@ function parseFilter(filter, query, db, negate = false, entityIdField = "entity_
2120
2175
  }
2121
2176
  class DefaultEntitiesCatalog {
2122
2177
  constructor(options) {
2178
+ __publicField$6(this, "database");
2179
+ __publicField$6(this, "logger");
2180
+ __publicField$6(this, "stitcher");
2123
2181
  this.database = options.database;
2124
2182
  this.logger = options.logger;
2125
2183
  this.stitcher = options.stitcher;
@@ -2487,15 +2545,21 @@ function sortFieldsFromRow(row) {
2487
2545
  return [row.value, row.entity_id];
2488
2546
  }
2489
2547
 
2548
+ var __defProp$5 = Object.defineProperty;
2549
+ var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2550
+ var __publicField$5 = (obj, key, value) => {
2551
+ __defNormalProp$5(obj, typeof key !== "symbol" ? key + "" : key, value);
2552
+ return value;
2553
+ };
2490
2554
  class ProcessorOutputCollector {
2491
2555
  constructor(logger, parentEntity) {
2492
2556
  this.logger = logger;
2493
2557
  this.parentEntity = parentEntity;
2494
- this.errors = new Array();
2495
- this.relations = new Array();
2496
- this.deferredEntities = new Array();
2497
- this.refreshKeys = new Array();
2498
- this.done = false;
2558
+ __publicField$5(this, "errors", new Array());
2559
+ __publicField$5(this, "relations", new Array());
2560
+ __publicField$5(this, "deferredEntities", new Array());
2561
+ __publicField$5(this, "refreshKeys", new Array());
2562
+ __publicField$5(this, "done", false);
2499
2563
  }
2500
2564
  generic() {
2501
2565
  return (i) => this.receive(this.logger, i);
@@ -2573,9 +2637,16 @@ class ProcessorOutputCollector {
2573
2637
  }
2574
2638
  }
2575
2639
 
2640
+ var __defProp$4 = Object.defineProperty;
2641
+ var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2642
+ var __publicField$4 = (obj, key, value) => {
2643
+ __defNormalProp$4(obj, typeof key !== "symbol" ? key + "" : key, value);
2644
+ return value;
2645
+ };
2576
2646
  class SingleProcessorSubCache {
2577
2647
  constructor(existingState) {
2578
2648
  this.existingState = existingState;
2649
+ __publicField$4(this, "newState");
2579
2650
  }
2580
2651
  async get(key) {
2581
2652
  var _a;
@@ -2595,7 +2666,8 @@ class SingleProcessorSubCache {
2595
2666
  class SingleProcessorCache {
2596
2667
  constructor(existingState) {
2597
2668
  this.existingState = existingState;
2598
- this.subCaches = /* @__PURE__ */ new Map();
2669
+ __publicField$4(this, "newState");
2670
+ __publicField$4(this, "subCaches", /* @__PURE__ */ new Map());
2599
2671
  }
2600
2672
  async get(key) {
2601
2673
  var _a;
@@ -2635,7 +2707,7 @@ class SingleProcessorCache {
2635
2707
  class ProcessorCacheManager {
2636
2708
  constructor(existingState) {
2637
2709
  this.existingState = existingState;
2638
- this.caches = /* @__PURE__ */ new Map();
2710
+ __publicField$4(this, "caches", /* @__PURE__ */ new Map());
2639
2711
  }
2640
2712
  forProcessor(processor, key) {
2641
2713
  const name = processor.getProcessorName();
@@ -3640,8 +3712,15 @@ async function createRouter(options) {
3640
3712
  return router;
3641
3713
  }
3642
3714
 
3715
+ var __defProp$3 = Object.defineProperty;
3716
+ var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3717
+ var __publicField$3 = (obj, key, value) => {
3718
+ __defNormalProp$3(obj, typeof key !== "symbol" ? key + "" : key, value);
3719
+ return value;
3720
+ };
3643
3721
  class DefaultRefreshService {
3644
3722
  constructor(options) {
3723
+ __publicField$3(this, "database");
3645
3724
  this.database = options.database;
3646
3725
  }
3647
3726
  async refresh(options) {
@@ -3686,7 +3765,13 @@ class AuthorizedRefreshService {
3686
3765
  }
3687
3766
  }
3688
3767
 
3689
- const _DefaultCatalogRulesEnforcer = class {
3768
+ var __defProp$2 = Object.defineProperty;
3769
+ var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3770
+ var __publicField$2 = (obj, key, value) => {
3771
+ __defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value);
3772
+ return value;
3773
+ };
3774
+ const _DefaultCatalogRulesEnforcer = class _DefaultCatalogRulesEnforcer {
3690
3775
  constructor(rules) {
3691
3776
  this.rules = rules;
3692
3777
  }
@@ -3820,17 +3905,17 @@ const _DefaultCatalogRulesEnforcer = class {
3820
3905
  return false;
3821
3906
  }
3822
3907
  };
3823
- let DefaultCatalogRulesEnforcer = _DefaultCatalogRulesEnforcer;
3824
3908
  /**
3825
3909
  * Default rules used by the catalog.
3826
3910
  *
3827
3911
  * Denies any location from specifying user or group entities.
3828
3912
  */
3829
- DefaultCatalogRulesEnforcer.defaultRules = [
3913
+ __publicField$2(_DefaultCatalogRulesEnforcer, "defaultRules", [
3830
3914
  {
3831
3915
  allow: ["Component", "API", "Location"].map((kind) => ({ kind }))
3832
3916
  }
3833
- ];
3917
+ ]);
3918
+ let DefaultCatalogRulesEnforcer = _DefaultCatalogRulesEnforcer;
3834
3919
  function resolveTarget(type, target) {
3835
3920
  if (type !== "file") {
3836
3921
  return target;
@@ -3838,10 +3923,16 @@ function resolveTarget(type, target) {
3838
3923
  return path__default["default"].resolve(target);
3839
3924
  }
3840
3925
 
3926
+ var __defProp$1 = Object.defineProperty;
3927
+ var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3928
+ var __publicField$1 = (obj, key, value) => {
3929
+ __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
3930
+ return value;
3931
+ };
3841
3932
  class Connection {
3842
3933
  constructor(config) {
3843
3934
  this.config = config;
3844
- this.validateEntityEnvelope = catalogModel.entityEnvelopeSchemaValidator();
3935
+ __publicField$1(this, "validateEntityEnvelope", catalogModel.entityEnvelopeSchemaValidator());
3845
3936
  }
3846
3937
  async applyMutation(mutation) {
3847
3938
  const db = this.config.providerDatabase;
@@ -4280,10 +4371,10 @@ class AuthorizedLocationService {
4280
4371
  }
4281
4372
 
4282
4373
  async function deleteWithEagerPruningOfChildren(options) {
4283
- const { tx, entityRefs, sourceKey } = options;
4374
+ const { knex, entityRefs, sourceKey } = options;
4284
4375
  let removedCount = 0;
4285
4376
  for (const refs of lodash__default["default"].chunk(entityRefs, 1e3)) {
4286
- removedCount += await tx.delete().from("refresh_state").whereIn(
4377
+ removedCount += await knex.delete().from("refresh_state").whereIn(
4287
4378
  "entity_ref",
4288
4379
  (orphans) => orphans.withRecursive(
4289
4380
  "descendants",
@@ -4331,7 +4422,7 @@ async function deleteWithEagerPruningOfChildren(options) {
4331
4422
  "descendants.entity_ref"
4332
4423
  ).whereNull("retained.entity_ref")
4333
4424
  );
4334
- await tx("refresh_state_references").where("source_key", "=", sourceKey).whereIn("target_entity_ref", refs).delete();
4425
+ await knex("refresh_state_references").where("source_key", "=", sourceKey).whereIn("target_entity_ref", refs).delete();
4335
4426
  }
4336
4427
  return removedCount;
4337
4428
  }
@@ -4373,7 +4464,7 @@ class DefaultProviderDatabase {
4373
4464
  const { toAdd, toUpsert, toRemove } = await this.createDelta(tx, options);
4374
4465
  if (toRemove.length) {
4375
4466
  const removedCount = await deleteWithEagerPruningOfChildren({
4376
- tx,
4467
+ knex: tx,
4377
4468
  entityRefs: toRemove,
4378
4469
  sourceKey: options.sourceKey
4379
4470
  });
@@ -4589,14 +4680,34 @@ class DefaultCatalogDatabase {
4589
4680
  }
4590
4681
  }
4591
4682
 
4683
+ var __defProp = Object.defineProperty;
4684
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4685
+ var __publicField = (obj, key, value) => {
4686
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4687
+ return value;
4688
+ };
4592
4689
  class CatalogBuilder {
4593
4690
  constructor(env) {
4594
- this.processingInterval = createRandomProcessingInterval({
4691
+ __publicField(this, "env");
4692
+ __publicField(this, "entityPolicies");
4693
+ __publicField(this, "entityPoliciesReplace");
4694
+ __publicField(this, "placeholderResolvers");
4695
+ __publicField(this, "fieldFormatValidators");
4696
+ __publicField(this, "entityProviders");
4697
+ __publicField(this, "processors");
4698
+ __publicField(this, "locationAnalyzers");
4699
+ __publicField(this, "processorsReplace");
4700
+ __publicField(this, "parser");
4701
+ __publicField(this, "onProcessingError");
4702
+ __publicField(this, "processingInterval", createRandomProcessingInterval({
4595
4703
  minSeconds: 100,
4596
4704
  maxSeconds: 150
4597
- });
4598
- this.locationAnalyzer = void 0;
4599
- this.legacySingleProcessorValidation = false;
4705
+ }));
4706
+ __publicField(this, "locationAnalyzer");
4707
+ __publicField(this, "permissionRules");
4708
+ __publicField(this, "allowedLocationType");
4709
+ __publicField(this, "legacySingleProcessorValidation", false);
4710
+ __publicField(this, "eventBroker");
4600
4711
  this.env = env;
4601
4712
  this.entityPolicies = [];
4602
4713
  this.entityPoliciesReplace = false;
@@ -5102,4 +5213,4 @@ exports.createCatalogPermissionRule = createCatalogPermissionRule;
5102
5213
  exports.createRandomProcessingInterval = createRandomProcessingInterval;
5103
5214
  exports.parseEntityYaml = parseEntityYaml;
5104
5215
  exports.permissionRules = permissionRules;
5105
- //# sourceMappingURL=CatalogBuilder-26406e82.cjs.js.map
5216
+ //# sourceMappingURL=CatalogBuilder-21da853f.cjs.js.map