@rebasepro/common 0.21.2-canary.g1ea48be → 0.22.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.
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { CollectionConfig } from "@rebasepro/types";
|
|
2
|
+
/**
|
|
3
|
+
* Refuse a `beforeQuery` hook on a collection Postgres does not serve.
|
|
4
|
+
*
|
|
5
|
+
* `beforeQuery` narrows a read *before it is compiled*, which means compiling
|
|
6
|
+
* a declarative filter into the query the engine is about to run. Only
|
|
7
|
+
* `@rebasepro/server-postgres` does that today. On any other engine the hook
|
|
8
|
+
* would look configured and do nothing — and for a hook whose whole purpose is
|
|
9
|
+
* to restrict which rows come back, "nothing" means every row served to
|
|
10
|
+
* everybody.
|
|
11
|
+
*
|
|
12
|
+
* So it is a boot failure, named. The alternative — declaring the hook only on
|
|
13
|
+
* `PostgresCollectionConfig`, the way `search` is — is not available:
|
|
14
|
+
* `callbacks` is one engine-agnostic type shared by every collection, and
|
|
15
|
+
* splitting it would fork `afterRead` and the five write hooks along with it.
|
|
16
|
+
*
|
|
17
|
+
* Lives here rather than in either driver because both have to run it: the
|
|
18
|
+
* Postgres schema planner sees every collection in a mixed app, and a
|
|
19
|
+
* Mongo-only app never boots a Postgres planner at all.
|
|
20
|
+
*
|
|
21
|
+
* Called with *every* collection, before an engine filters any out.
|
|
22
|
+
*/
|
|
23
|
+
export declare const assertBeforeQueryIsPostgresOnly: (collections: CollectionConfig[]) => void;
|
package/dist/index.es.js
CHANGED
|
@@ -4265,6 +4265,37 @@ var CollectionRegistry = class {
|
|
|
4265
4265
|
}
|
|
4266
4266
|
};
|
|
4267
4267
|
//#endregion
|
|
4268
|
+
//#region src/collections/engine-support.ts
|
|
4269
|
+
/**
|
|
4270
|
+
* Refuse a `beforeQuery` hook on a collection Postgres does not serve.
|
|
4271
|
+
*
|
|
4272
|
+
* `beforeQuery` narrows a read *before it is compiled*, which means compiling
|
|
4273
|
+
* a declarative filter into the query the engine is about to run. Only
|
|
4274
|
+
* `@rebasepro/server-postgres` does that today. On any other engine the hook
|
|
4275
|
+
* would look configured and do nothing — and for a hook whose whole purpose is
|
|
4276
|
+
* to restrict which rows come back, "nothing" means every row served to
|
|
4277
|
+
* everybody.
|
|
4278
|
+
*
|
|
4279
|
+
* So it is a boot failure, named. The alternative — declaring the hook only on
|
|
4280
|
+
* `PostgresCollectionConfig`, the way `search` is — is not available:
|
|
4281
|
+
* `callbacks` is one engine-agnostic type shared by every collection, and
|
|
4282
|
+
* splitting it would fork `afterRead` and the five write hooks along with it.
|
|
4283
|
+
*
|
|
4284
|
+
* Lives here rather than in either driver because both have to run it: the
|
|
4285
|
+
* Postgres schema planner sees every collection in a mixed app, and a
|
|
4286
|
+
* Mongo-only app never boots a Postgres planner at all.
|
|
4287
|
+
*
|
|
4288
|
+
* Called with *every* collection, before an engine filters any out.
|
|
4289
|
+
*/
|
|
4290
|
+
var assertBeforeQueryIsPostgresOnly = (collections) => {
|
|
4291
|
+
for (const collection of collections) {
|
|
4292
|
+
if (isPostgresCollectionConfig(collection)) continue;
|
|
4293
|
+
if (!collection.callbacks?.beforeQuery) continue;
|
|
4294
|
+
const engine = collection.engine ?? "non-postgres";
|
|
4295
|
+
throw new Error(`${collection.slug}.callbacks.beforeQuery: narrowing a read before it is compiled is a Postgres feature, and this collection is served by \`${engine}\`. Remove the hook — it would otherwise look configured while every read kept returning every row the engine allows. Redaction that works on every engine is \`afterRead\`.`);
|
|
4296
|
+
}
|
|
4297
|
+
};
|
|
4298
|
+
//#endregion
|
|
4268
4299
|
//#region src/collections/field-access.ts
|
|
4269
4300
|
/**
|
|
4270
4301
|
* The role that satisfies any non-empty list.
|
|
@@ -6995,6 +7026,6 @@ async function detectJunctionTables(executeSql) {
|
|
|
6995
7026
|
return junctionTables;
|
|
6996
7027
|
}
|
|
6997
7028
|
//#endregion
|
|
6998
|
-
export { ADMIN_ROLE, CALLBACK_REJECTED, COLLECTION_PATH_SEPARATOR, COMPOSITE_ID_SEPARATOR, CollectionRegistry, CursorError, CursorMismatchError, DEFAULT_FIND_ALL_MAX_ROWS, DEFAULT_MAX_PAGES, DEFAULT_ONE_OF_TYPE, DEFAULT_ONE_OF_VALUE, DEFAULT_PAGE_SIZE, DEFAULT_STRING_COLUMN_LENGTH, IncludeSpecError, JUNCTION_TABLES_SQL, MAX_LOGICAL_NESTING_DEPTH, OrderBySpecError, QueryBuilder, REBASE_INTERNAL_PREFIXES, REBASE_INTERNAL_SCHEMAS, REBASE_INTERNAL_TABLES, REBASE_USER_ROLE, RebasePaginationError, TENANT_INDEX_REASON, UnknownFilterOperatorError, aggregateAlias, and, applyDefaultValuesOnCreate, authSecretsMissingExclusion, buildCollectionFromTableMetadata, buildCompositeId, buildConditionContext, buildPropertyCallbacks, buildRebaseData, buildRoutedRebaseData, buildSdkData, buildTenantSecurityRule, callbackRefusal, canCreateEntity, canDeleteEntity, canEditEntity, canReadCollection, canReadField, canWriteField, checkOperation, classifyTable, collectAllPages, cond, createDataSourceRegistry, createPaginationHelpers, createRelationRef, createRelationRefWithData, cursorToStartAfter, decodeCursor, defaultUsersCollection, defineCollection, denormalizeInclude, deserializeFilter, deserializeInclude, deserializeLogicalCondition, deserializeOrderBy, deserializeOrderByList, detectJunctionTables, effectiveAccess, embedParentExpression, encodeCursor, enumToObjectEntries, evaluateCondition, evaluatePolicy, fieldKeyForColumn, findAnonymousGrants, findRelation, firstSqlRow, fullPathToCollectionSegments, getArrayResolvedProperties, getChildViewDeclaringProperties, getChildViewRelationPropertyKeys, getColumnName, getDeclaredPrimaryKeys, getDefaultValueFor, getDefaultValueFortype, getDefaultValuesFor, getEffectiveSecurityRules, getEntityChildViews, getEnumVarName, getGeneratedPolicyNames, getInjectedSecurityRules, getJunctionCollectionConfig, getJunctionConfigForRelation, getJunctionSecurityRules, getLabelOrConfigFrom, getPrimaryKeys, getReferenceFrom, getRelationFrom, getRelationTargetPath, getSubcollections, getTableName, getTableVarName, getTenantConfig, hasFieldAccessRules, includePaths, isAddressableId, isJunctionBackedRelation, isPropertyBuilder, isRebaseInternalTable, isRelationRequired, isRelationalCollection, mergeIncludeSpecs, normalizeDriverOrderBy, normalizeEmail, normalizeInclude, normalizeOrderBy, normalizeToEntityRelation, not, or, paginateFind, parseIdValues, parseOrderBySpecStrict, policyToPostgres, primaryOrderBy, reconcileCursorOrder, registerConditionOperations, relationDeclaringProperty, relationalCollections, requireCallbackClient, requireCallbackCollection, resolveArrayProperties, resolveCollectionRelations, resolveDataSource, resolveEnumValues, resolveFindWindow, resolveJunctionSpecs, resolvePrimaryKeys, resolveProperties, resolveProperty, resolvePropertyEnum, resolveRelation, resolveRelationProperty, resolveStorageFilenameString, resolveStoragePathString, resolveStorageSource, resolveStringColumnLength, resolveTenantWrite, restrictedFieldNames, revokeInternalTableAccess, revokeInternalTableSql, sanitizeData, securityRuleToConditions, segmentsToStrippedPath, serializeFilter, serializeInclude, serializeLogicalCondition, serializeOrderBy, sortCollectionsBySlug, sortProperties, sqlRows, sqlToPolicy, stripCollectionPath, tenantBypassRoles, tenantPolicyName, tenantScopeExpression, toCallbackError, toFilterTuples, topLevelIncludeNames, traverseValueProperty, traverseValuesProperties, updateDateAutoValues, updateUserAutoValues, wrapAsEntityData, wrapAsSdkData };
|
|
7029
|
+
export { ADMIN_ROLE, CALLBACK_REJECTED, COLLECTION_PATH_SEPARATOR, COMPOSITE_ID_SEPARATOR, CollectionRegistry, CursorError, CursorMismatchError, DEFAULT_FIND_ALL_MAX_ROWS, DEFAULT_MAX_PAGES, DEFAULT_ONE_OF_TYPE, DEFAULT_ONE_OF_VALUE, DEFAULT_PAGE_SIZE, DEFAULT_STRING_COLUMN_LENGTH, IncludeSpecError, JUNCTION_TABLES_SQL, MAX_LOGICAL_NESTING_DEPTH, OrderBySpecError, QueryBuilder, REBASE_INTERNAL_PREFIXES, REBASE_INTERNAL_SCHEMAS, REBASE_INTERNAL_TABLES, REBASE_USER_ROLE, RebasePaginationError, TENANT_INDEX_REASON, UnknownFilterOperatorError, aggregateAlias, and, applyDefaultValuesOnCreate, assertBeforeQueryIsPostgresOnly, authSecretsMissingExclusion, buildCollectionFromTableMetadata, buildCompositeId, buildConditionContext, buildPropertyCallbacks, buildRebaseData, buildRoutedRebaseData, buildSdkData, buildTenantSecurityRule, callbackRefusal, canCreateEntity, canDeleteEntity, canEditEntity, canReadCollection, canReadField, canWriteField, checkOperation, classifyTable, collectAllPages, cond, createDataSourceRegistry, createPaginationHelpers, createRelationRef, createRelationRefWithData, cursorToStartAfter, decodeCursor, defaultUsersCollection, defineCollection, denormalizeInclude, deserializeFilter, deserializeInclude, deserializeLogicalCondition, deserializeOrderBy, deserializeOrderByList, detectJunctionTables, effectiveAccess, embedParentExpression, encodeCursor, enumToObjectEntries, evaluateCondition, evaluatePolicy, fieldKeyForColumn, findAnonymousGrants, findRelation, firstSqlRow, fullPathToCollectionSegments, getArrayResolvedProperties, getChildViewDeclaringProperties, getChildViewRelationPropertyKeys, getColumnName, getDeclaredPrimaryKeys, getDefaultValueFor, getDefaultValueFortype, getDefaultValuesFor, getEffectiveSecurityRules, getEntityChildViews, getEnumVarName, getGeneratedPolicyNames, getInjectedSecurityRules, getJunctionCollectionConfig, getJunctionConfigForRelation, getJunctionSecurityRules, getLabelOrConfigFrom, getPrimaryKeys, getReferenceFrom, getRelationFrom, getRelationTargetPath, getSubcollections, getTableName, getTableVarName, getTenantConfig, hasFieldAccessRules, includePaths, isAddressableId, isJunctionBackedRelation, isPropertyBuilder, isRebaseInternalTable, isRelationRequired, isRelationalCollection, mergeIncludeSpecs, normalizeDriverOrderBy, normalizeEmail, normalizeInclude, normalizeOrderBy, normalizeToEntityRelation, not, or, paginateFind, parseIdValues, parseOrderBySpecStrict, policyToPostgres, primaryOrderBy, reconcileCursorOrder, registerConditionOperations, relationDeclaringProperty, relationalCollections, requireCallbackClient, requireCallbackCollection, resolveArrayProperties, resolveCollectionRelations, resolveDataSource, resolveEnumValues, resolveFindWindow, resolveJunctionSpecs, resolvePrimaryKeys, resolveProperties, resolveProperty, resolvePropertyEnum, resolveRelation, resolveRelationProperty, resolveStorageFilenameString, resolveStoragePathString, resolveStorageSource, resolveStringColumnLength, resolveTenantWrite, restrictedFieldNames, revokeInternalTableAccess, revokeInternalTableSql, sanitizeData, securityRuleToConditions, segmentsToStrippedPath, serializeFilter, serializeInclude, serializeLogicalCondition, serializeOrderBy, sortCollectionsBySlug, sortProperties, sqlRows, sqlToPolicy, stripCollectionPath, tenantBypassRoles, tenantPolicyName, tenantScopeExpression, toCallbackError, toFilterTuples, topLevelIncludeNames, traverseValueProperty, traverseValuesProperties, updateDateAutoValues, updateUserAutoValues, wrapAsEntityData, wrapAsSdkData };
|
|
6999
7030
|
|
|
7000
7031
|
//# sourceMappingURL=index.es.js.map
|