@opensaas/stack-core 0.30.0 → 0.31.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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +410 -0
- package/dist/access/access-filter.d.ts.map +1 -1
- package/dist/access/access-filter.js +14 -1
- package/dist/access/access-filter.js.map +1 -1
- package/dist/access/access-filter.test.js +50 -0
- package/dist/access/access-filter.test.js.map +1 -1
- package/dist/access/field-access.js +6 -6
- package/dist/access/field-access.js.map +1 -1
- package/dist/access/multi-column-read-write.test.js +46 -12
- package/dist/access/multi-column-read-write.test.js.map +1 -1
- package/dist/access/relationship-count.d.ts +60 -0
- package/dist/access/relationship-count.d.ts.map +1 -0
- package/dist/access/relationship-count.js +233 -0
- package/dist/access/relationship-count.js.map +1 -0
- package/dist/access/relationship-count.test.d.ts +2 -0
- package/dist/access/relationship-count.test.d.ts.map +1 -0
- package/dist/access/relationship-count.test.js +185 -0
- package/dist/access/relationship-count.test.js.map +1 -0
- package/dist/access/relationship-label-filter.d.ts +45 -0
- package/dist/access/relationship-label-filter.d.ts.map +1 -0
- package/dist/access/relationship-label-filter.js +93 -0
- package/dist/access/relationship-label-filter.js.map +1 -0
- package/dist/access/relationship-label-filter.test.d.ts +2 -0
- package/dist/access/relationship-label-filter.test.d.ts.map +1 -0
- package/dist/access/relationship-label-filter.test.js +126 -0
- package/dist/access/relationship-label-filter.test.js.map +1 -0
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/nav-count.d.ts +34 -0
- package/dist/config/nav-count.d.ts.map +1 -0
- package/dist/config/nav-count.js +71 -0
- package/dist/config/nav-count.js.map +1 -0
- package/dist/config/types.d.ts +305 -4
- package/dist/config/types.d.ts.map +1 -1
- package/dist/context/hook-pipeline.d.ts.map +1 -1
- package/dist/context/hook-pipeline.js +11 -1
- package/dist/context/hook-pipeline.js.map +1 -1
- package/dist/context/index.d.ts +28 -0
- package/dist/context/index.d.ts.map +1 -1
- package/dist/context/index.js +205 -0
- package/dist/context/index.js.map +1 -1
- package/dist/context/nested-operations.d.ts.map +1 -1
- package/dist/context/nested-operations.js +7 -1
- package/dist/context/nested-operations.js.map +1 -1
- package/dist/extend.d.ts +1 -0
- package/dist/extend.d.ts.map +1 -1
- package/dist/fields/index.d.ts +1 -1
- package/dist/fields/index.d.ts.map +1 -1
- package/dist/fields/index.js +166 -0
- package/dist/fields/index.js.map +1 -1
- package/dist/filter/collect.d.ts +32 -0
- package/dist/filter/collect.d.ts.map +1 -0
- package/dist/filter/collect.js +60 -0
- package/dist/filter/collect.js.map +1 -0
- package/dist/filter/filter.test.d.ts +2 -0
- package/dist/filter/filter.test.d.ts.map +1 -0
- package/dist/filter/filter.test.js +348 -0
- package/dist/filter/filter.test.js.map +1 -0
- package/dist/filter/index.d.ts +7 -0
- package/dist/filter/index.d.ts.map +1 -0
- package/dist/filter/index.js +16 -0
- package/dist/filter/index.js.map +1 -0
- package/dist/filter/map.d.ts +18 -0
- package/dist/filter/map.d.ts.map +1 -0
- package/dist/filter/map.js +60 -0
- package/dist/filter/map.js.map +1 -0
- package/dist/filter/parse.d.ts +33 -0
- package/dist/filter/parse.d.ts.map +1 -0
- package/dist/filter/parse.js +103 -0
- package/dist/filter/parse.js.map +1 -0
- package/dist/filter/serialize.d.ts +25 -0
- package/dist/filter/serialize.d.ts.map +1 -0
- package/dist/filter/serialize.js +68 -0
- package/dist/filter/serialize.js.map +1 -0
- package/dist/filter/serialize.test.d.ts +2 -0
- package/dist/filter/serialize.test.d.ts.map +1 -0
- package/dist/filter/serialize.test.js +83 -0
- package/dist/filter/serialize.test.js.map +1 -0
- package/dist/filter/types.d.ts +122 -0
- package/dist/filter/types.d.ts.map +1 -0
- package/dist/filter/types.js +24 -0
- package/dist/filter/types.js.map +1 -0
- package/dist/hooks/index.d.ts +30 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +79 -59
- package/dist/hooks/index.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +1 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +4 -0
- package/dist/internal.js.map +1 -1
- package/package.json +1 -1
- package/src/access/access-filter.test.ts +79 -0
- package/src/access/access-filter.ts +15 -4
- package/src/access/field-access.ts +6 -6
- package/src/access/multi-column-read-write.test.ts +68 -19
- package/src/access/relationship-count.test.ts +269 -0
- package/src/access/relationship-count.ts +311 -0
- package/src/access/relationship-label-filter.test.ts +177 -0
- package/src/access/relationship-label-filter.ts +140 -0
- package/src/config/index.ts +6 -0
- package/src/config/nav-count.ts +85 -0
- package/src/config/types.ts +319 -1
- package/src/context/hook-pipeline.ts +19 -0
- package/src/context/index.ts +285 -3
- package/src/context/nested-operations.ts +22 -0
- package/src/extend.ts +9 -0
- package/src/fields/index.ts +168 -0
- package/src/filter/collect.ts +72 -0
- package/src/filter/filter.test.ts +400 -0
- package/src/filter/index.ts +25 -0
- package/src/filter/map.ts +68 -0
- package/src/filter/parse.ts +106 -0
- package/src/filter/serialize.test.ts +115 -0
- package/src/filter/serialize.ts +75 -0
- package/src/filter/types.ts +120 -0
- package/src/hooks/index.ts +87 -57
- package/src/index.ts +54 -0
- package/src/internal.ts +5 -0
- package/tests/context.test.ts +690 -0
- package/tests/multi-column-validation-ordering.test.ts +305 -0
- package/tests/nav-count.test.ts +189 -0
- package/tsconfig.tsbuildinfo +1 -1
package/dist/hooks/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
export { config, list } from './config/index.js';
|
|
2
|
-
export type { OpenSaasConfig, OutputConfig, ListConfig, DatabaseConfig, FieldConfig, OperationAccess, } from './config/index.js';
|
|
2
|
+
export type { OpenSaasConfig, OutputConfig, ListConfig, DatabaseConfig, FieldConfig, OperationAccess, BulkAction, BulkActionContext, BulkActionResult, BulkActionVariant, } from './config/index.js';
|
|
3
3
|
export type { AccessControl, FieldAccess, Session, AccessContext, PrismaFilter, } from './access/index.js';
|
|
4
4
|
export { getContext } from './context/index.js';
|
|
5
5
|
export type { StackContext, TransactionOptions, TransactionIsolationLevel, } from './context/index.js';
|
|
6
6
|
export { getDbKey, getUrlKey, getListKeyFromUrl } from './lib/case-utils.js';
|
|
7
7
|
export { getLabelFieldName, getItemLabel } from './config/label.js';
|
|
8
|
+
export { resolveNavCounts, isListQueryStaticallyDenied } from './config/nav-count.js';
|
|
8
9
|
export { ValidationError } from './hooks/index.js';
|
|
9
10
|
export { validateFieldConfig, validateConfigFields } from './validation/field-config.js';
|
|
10
11
|
export type { FieldConfigValidationError } from './validation/field-config.js';
|
|
@@ -12,4 +13,8 @@ export { defineFragment, runQuery, runQueryOne } from './query/index.js';
|
|
|
12
13
|
export type { ResultOf, RelationSelector, QueryArgs } from './query/index.js';
|
|
13
14
|
export { getRelationshipOptions } from './query/relationship-options.js';
|
|
14
15
|
export type { RelationshipOption, RelationshipOptionsArgs } from './query/relationship-options.js';
|
|
16
|
+
export { parseFilterQuery, serializeFilterQuery, buildFilterWhere, collectFilterSpecs, buildListFilterWhere, collectFilterSuggestions, RELATIONSHIP_COUNT_FILTER_KEY, } from './filter/index.js';
|
|
17
|
+
export type { FilterOperator, FilterToken, FilterCondition, FilterSpec, FilterValueSource, FilterFieldSuggestion, RelationshipCountFilterMarker, } from './filter/index.js';
|
|
18
|
+
export { buildRelationshipCountSelect, resolveRelationshipCountFilters, isToManyRelationshipField, } from './access/relationship-count.js';
|
|
19
|
+
export { resolveRelationshipLabelFilters, isToOneRelationshipField, } from './access/relationship-label-filter.js';
|
|
15
20
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AAKhD,YAAY,EACV,cAAc,EACd,YAAY,EACZ,UAAU,EACV,cAAc,EACd,WAAW,EACX,eAAe,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AAKhD,YAAY,EACV,cAAc,EACd,YAAY,EACZ,UAAU,EACV,cAAc,EACd,WAAW,EACX,eAAe,EAIf,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,mBAAmB,CAAA;AAG1B,YAAY,EACV,aAAa,EACb,WAAW,EACX,OAAO,EACP,aAAa,EACb,YAAY,GACb,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAK5E,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAInE,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAA;AAGrF,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAMlD,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AACxF,YAAY,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAA;AAQ9E,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACxE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAK7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AACxE,YAAY,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AAOlG,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EACV,cAAc,EACd,WAAW,EACX,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACrB,6BAA6B,GAC9B,MAAM,mBAAmB,CAAA;AAM1B,OAAO,EACL,4BAA4B,EAC5B,+BAA+B,EAC/B,yBAAyB,GAC1B,MAAM,gCAAgC,CAAA;AAMvC,OAAO,EACL,+BAA+B,EAC/B,wBAAwB,GACzB,MAAM,uCAAuC,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -17,6 +17,9 @@ export { getDbKey, getUrlKey, getListKeyFromUrl } from './lib/case-utils.js';
|
|
|
17
17
|
// (projection) and reads it off a row (render). Used by the admin UI for
|
|
18
18
|
// relationship cells, dropdown options, and page headings.
|
|
19
19
|
export { getLabelFieldName, getItemLabel } from './config/label.js';
|
|
20
|
+
// Access-scoped nav counts — resolves per-list record counts (opt-in via
|
|
21
|
+
// `ui.navCount`) through the secured context for the admin chrome (issue #735).
|
|
22
|
+
export { resolveNavCounts, isListQueryStaticallyDenied } from './config/nav-count.js';
|
|
20
23
|
// Validation error surfaced by write operations
|
|
21
24
|
export { ValidationError } from './hooks/index.js';
|
|
22
25
|
// Field self-containment validation — checks each field implements the
|
|
@@ -35,4 +38,20 @@ export { defineFragment, runQuery, runQueryOne } from './query/index.js';
|
|
|
35
38
|
// relationship editors. Backs the `relationshipOptions` context.serverAction
|
|
36
39
|
// op; also callable directly wherever a full context is already in hand.
|
|
37
40
|
export { getRelationshipOptions } from './query/relationship-options.js';
|
|
41
|
+
// Filter engine (ADR-0017) — the admin UI's Filter builder. The pure seam
|
|
42
|
+
// (`parseFilterQuery`, `buildFilterWhere`) plus config-aware helpers that
|
|
43
|
+
// collect each field's Filter spec and compose a list's server-side `where`.
|
|
44
|
+
// The produced fragment is ANDed with the access filter through the secured
|
|
45
|
+
// context, so the filter can only ever narrow visibility.
|
|
46
|
+
export { parseFilterQuery, serializeFilterQuery, buildFilterWhere, collectFilterSpecs, buildListFilterWhere, collectFilterSuggestions, RELATIONSHIP_COUNT_FILTER_KEY, } from './filter/index.js';
|
|
47
|
+
// Access-scoped to-many relationship counts for the admin list view (#732):
|
|
48
|
+
// build the filtered `_count` select for count cells/sort, and resolve the
|
|
49
|
+
// count Filter spec's markers into `{ id: { in } }` — all through the secured
|
|
50
|
+
// context, so counts never include related rows the session cannot read.
|
|
51
|
+
export { buildRelationshipCountSelect, resolveRelationshipCountFilters, isToManyRelationshipField, } from './access/relationship-count.js';
|
|
52
|
+
// Access-scoped to-one relationship label filters for the admin list view
|
|
53
|
+
// (#749): fold the related list's `query` access into a to-one relationship
|
|
54
|
+
// Filter spec's nested `is` clause so a session can never use a relationship
|
|
55
|
+
// filter token to distinguish rows by a related field it cannot itself read.
|
|
56
|
+
export { resolveRelationshipLabelFilters, isToOneRelationshipField, } from './access/relationship-label-filter.js';
|
|
38
57
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,8CAA8C;AAC9C,EAAE;AACF,kEAAkE;AAClE,gEAAgE;AAChE,gEAAgE;AAChE,6DAA6D;AAC7D,yEAAyE;AACzE,kEAAkE;AAElE,kBAAkB;AAClB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,8CAA8C;AAC9C,EAAE;AACF,kEAAkE;AAClE,gEAAgE;AAChE,gEAAgE;AAChE,6DAA6D;AAC7D,yEAAyE;AACzE,kEAAkE;AAElE,kBAAkB;AAClB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AA8BhD,kBAAkB;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAO/C,0EAA0E;AAC1E,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAE5E,0EAA0E;AAC1E,yEAAyE;AACzE,2DAA2D;AAC3D,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEnE,yEAAyE;AACzE,gFAAgF;AAChF,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAA;AAErF,gDAAgD;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAElD,uEAAuE;AACvE,4EAA4E;AAC5E,6EAA6E;AAC7E,oEAAoE;AACpE,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAGxF,qEAAqE;AACrE,wEAAwE;AACxE,4EAA4E;AAC5E,6EAA6E;AAC7E,+EAA+E;AAC/E,gEAAgE;AAChE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAGxE,qEAAqE;AACrE,6EAA6E;AAC7E,yEAAyE;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AAGxE,0EAA0E;AAC1E,0EAA0E;AAC1E,6EAA6E;AAC7E,4EAA4E;AAC5E,0DAA0D;AAC1D,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,mBAAmB,CAAA;AAW1B,4EAA4E;AAC5E,2EAA2E;AAC3E,8EAA8E;AAC9E,yEAAyE;AACzE,OAAO,EACL,4BAA4B,EAC5B,+BAA+B,EAC/B,yBAAyB,GAC1B,MAAM,gCAAgC,CAAA;AAEvC,0EAA0E;AAC1E,4EAA4E;AAC5E,6EAA6E;AAC7E,6EAA6E;AAC7E,OAAO,EACL,+BAA+B,EAC/B,wBAAwB,GACzB,MAAM,uCAAuC,CAAA"}
|
package/dist/internal.d.ts
CHANGED
|
@@ -4,5 +4,6 @@ export type { Fragment, FieldSelection } from './query/index.js';
|
|
|
4
4
|
export { hashPassword, comparePassword, isHashedPassword, HashedPassword, } from './utils/password.js';
|
|
5
5
|
export { pascalToCamel, pascalToKebab, kebabToPascal, kebabToCamel } from './lib/case-utils.js';
|
|
6
6
|
export { validateWithZod, generateZodSchema } from './validation/schema.js';
|
|
7
|
+
export { checkFieldAccess } from './access/index.js';
|
|
7
8
|
export type { DatabaseConfig, SessionConfig, ThemeConfig, ThemePreset, ThemeColors, ThemeFonts, ThemeShadows, FileMetadata, ImageMetadata, ImageTransformationResult, } from './config/index.js';
|
|
8
9
|
//# sourceMappingURL=internal.d.ts.map
|
package/dist/internal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAWA,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,mBAAmB,CAAA;AAG1B,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAGhE,OAAO,EACL,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,cAAc,GACf,MAAM,qBAAqB,CAAA;AAG5B,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAG/F,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAWA,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,mBAAmB,CAAA;AAG1B,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAGhE,OAAO,EACL,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,cAAc,GACf,MAAM,qBAAqB,CAAA;AAG5B,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAG/F,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAK3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAGpD,YAAY,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,WAAW,EACX,WAAW,EACX,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,yBAAyB,GAC1B,MAAM,mBAAmB,CAAA"}
|
package/dist/internal.js
CHANGED
|
@@ -13,4 +13,8 @@ export { hashPassword, comparePassword, isHashedPassword, HashedPassword, } from
|
|
|
13
13
|
export { pascalToCamel, pascalToKebab, kebabToPascal, kebabToCamel } from './lib/case-utils.js';
|
|
14
14
|
// Zod schema helpers used internally for validation
|
|
15
15
|
export { validateWithZod, generateZodSchema } from './validation/schema.js';
|
|
16
|
+
// Canonical field-level access evaluator, reused by @opensaas/stack-ui to decide
|
|
17
|
+
// whether a Relationship-table cell may show an inline-edit affordance (#737).
|
|
18
|
+
// This is the single field-access evaluator — the UI must not re-implement it.
|
|
19
|
+
export { checkFieldAccess } from './access/index.js';
|
|
16
20
|
//# sourceMappingURL=internal.js.map
|
package/dist/internal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,gCAAgC;AAChC,EAAE;AACF,uEAAuE;AACvE,wEAAwE;AACxE,wEAAwE;AACxE,uEAAuE;AACvE,yDAAyD;AACzD,kEAAkE;AAgBlE,4FAA4F;AAC5F,OAAO,EACL,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,cAAc,GACf,MAAM,qBAAqB,CAAA;AAE5B,mDAAmD;AACnD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAE/F,oDAAoD;AACpD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA"}
|
|
1
|
+
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,gCAAgC;AAChC,EAAE;AACF,uEAAuE;AACvE,wEAAwE;AACxE,wEAAwE;AACxE,uEAAuE;AACvE,yDAAyD;AACzD,kEAAkE;AAgBlE,4FAA4F;AAC5F,OAAO,EACL,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,cAAc,GACf,MAAM,qBAAqB,CAAA;AAE5B,mDAAmD;AACnD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAE/F,oDAAoD;AACpD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE3E,iFAAiF;AACjF,+EAA+E;AAC/E,+EAA+E;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA"}
|
package/package.json
CHANGED
|
@@ -147,3 +147,82 @@ describe('mergeIncludeWithAccessControl — bare-true leaf on a cyclic graph', (
|
|
|
147
147
|
expect(includeDepth(merged)).toBeLessThanOrEqual(3)
|
|
148
148
|
})
|
|
149
149
|
})
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* A caller-supplied `take` on a to-many relation include must survive the
|
|
153
|
+
* access-controlled merge (issue #752). It only narrows the fetched rows and can
|
|
154
|
+
* never widen past the access `where`, so the merge re-attaches it on top of the
|
|
155
|
+
* per-relation access filter — powering the item view's bounded relationship
|
|
156
|
+
* tables without dropping row-level access.
|
|
157
|
+
*/
|
|
158
|
+
describe('mergeIncludeWithAccessControl — caller take on a to-many relation (issue #752)', () => {
|
|
159
|
+
// A one-list config whose `posts` to-many is query-scoped by an access filter.
|
|
160
|
+
function scopedConfig(): OpenSaasConfig {
|
|
161
|
+
return {
|
|
162
|
+
db: { provider: 'sqlite', url: 'file:./dev.db' },
|
|
163
|
+
lists: {
|
|
164
|
+
User: {
|
|
165
|
+
fields: { name: { type: 'text' } as FieldConfig, posts: rel('Post.author', true) },
|
|
166
|
+
access: { operation: { query: () => true } },
|
|
167
|
+
},
|
|
168
|
+
Post: {
|
|
169
|
+
fields: { title: { type: 'text' } as FieldConfig, author: rel('User.posts') },
|
|
170
|
+
// Scoped read access → the merge must fold this into the relation include.
|
|
171
|
+
access: { operation: { query: () => ({ published: { equals: true } }) } },
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- minimal config for unit test
|
|
175
|
+
} as any
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
it('preserves the take and AND-combines it with the access where', async () => {
|
|
179
|
+
const config = scopedConfig()
|
|
180
|
+
const accessControlledInclude = await buildIncludeWithAccessControl(
|
|
181
|
+
config.lists.User.fields,
|
|
182
|
+
{ session: null, context: makeContext() },
|
|
183
|
+
config,
|
|
184
|
+
0,
|
|
185
|
+
['User'],
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
const merged = mergeIncludeWithAccessControl(
|
|
189
|
+
{ posts: { take: 10 } },
|
|
190
|
+
accessControlledInclude,
|
|
191
|
+
config.lists.User.fields,
|
|
192
|
+
config,
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
// The bound rides on top of the access filter — neither is dropped. The
|
|
196
|
+
// access-controlled include also auto-nests Post's `author` back-relation.
|
|
197
|
+
expect(merged).toEqual({
|
|
198
|
+
posts: {
|
|
199
|
+
where: { published: { equals: true } },
|
|
200
|
+
include: { author: true },
|
|
201
|
+
take: 10,
|
|
202
|
+
},
|
|
203
|
+
})
|
|
204
|
+
})
|
|
205
|
+
|
|
206
|
+
it('drops a take for a relation whose query access is denied', async () => {
|
|
207
|
+
const config = scopedConfig()
|
|
208
|
+
// Deny Post reads entirely.
|
|
209
|
+
config.lists.Post.access = { operation: { query: () => false } }
|
|
210
|
+
const accessControlledInclude = await buildIncludeWithAccessControl(
|
|
211
|
+
config.lists.User.fields,
|
|
212
|
+
{ session: null, context: makeContext() },
|
|
213
|
+
config,
|
|
214
|
+
0,
|
|
215
|
+
['User'],
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
const merged = mergeIncludeWithAccessControl(
|
|
219
|
+
{ posts: { take: 10 } },
|
|
220
|
+
accessControlledInclude,
|
|
221
|
+
config.lists.User.fields,
|
|
222
|
+
config,
|
|
223
|
+
)
|
|
224
|
+
|
|
225
|
+
// A denied relation is dropped wholesale — the take cannot resurrect it.
|
|
226
|
+
expect(merged).toEqual({})
|
|
227
|
+
})
|
|
228
|
+
})
|
|
@@ -120,25 +120,33 @@ export async function buildIncludeWithAccessControl(
|
|
|
120
120
|
* (fetch with no extra constraints) or an object that scopes the fetch with a
|
|
121
121
|
* `where` filter and/or a nested `include`.
|
|
122
122
|
*/
|
|
123
|
-
type IncludeEntry = boolean | { where?: PrismaFilter; include?: IncludeObject }
|
|
123
|
+
type IncludeEntry = boolean | { where?: PrismaFilter; include?: IncludeObject; take?: number }
|
|
124
124
|
type IncludeObject = Record<string, IncludeEntry>
|
|
125
125
|
|
|
126
126
|
/** The structured (object) form of a relation include entry. */
|
|
127
|
-
type IncludeEntryObject = { where?: PrismaFilter; include?: IncludeObject }
|
|
127
|
+
type IncludeEntryObject = { where?: PrismaFilter; include?: IncludeObject; take?: number }
|
|
128
128
|
|
|
129
129
|
/**
|
|
130
130
|
* Narrow an unknown include value to the structured object form (vs bare `true`
|
|
131
131
|
* or any other primitive). Caller-supplied includes arrive untyped at the
|
|
132
132
|
* runtime boundary, so we validate the shape here rather than casting.
|
|
133
|
+
*
|
|
134
|
+
* A numeric `take` on a to-many relation include (a caller-supplied row bound,
|
|
135
|
+
* issue #752) is carried through: it only ever NARROWS the fetched rows and can
|
|
136
|
+
* never widen past the access `where`, so preserving it is access-neutral. The
|
|
137
|
+
* access-controlled include never sets `take` itself — it originates solely
|
|
138
|
+
* from the caller — so `mergeIncludeWithAccessControl` re-attaches it below.
|
|
133
139
|
*/
|
|
134
140
|
function asEntryObject(value: unknown): IncludeEntryObject | null {
|
|
135
141
|
if (value && typeof value === 'object') {
|
|
136
142
|
const obj = value as Record<string, unknown>
|
|
137
143
|
const where = obj.where
|
|
138
144
|
const include = obj.include
|
|
145
|
+
const take = obj.take
|
|
139
146
|
const entry: IncludeEntryObject = {}
|
|
140
147
|
if (where && typeof where === 'object') entry.where = where as PrismaFilter
|
|
141
148
|
if (include && typeof include === 'object') entry.include = include as IncludeObject
|
|
149
|
+
if (typeof take === 'number') entry.take = take
|
|
142
150
|
return entry
|
|
143
151
|
}
|
|
144
152
|
return null
|
|
@@ -260,11 +268,14 @@ export function mergeIncludeWithAccessControl(
|
|
|
260
268
|
mergedNested = accessEntry.include
|
|
261
269
|
}
|
|
262
270
|
|
|
263
|
-
const entry: { where?: PrismaFilter; include?: Record<string, unknown
|
|
271
|
+
const entry: { where?: PrismaFilter; include?: Record<string, unknown>; take?: number } = {}
|
|
264
272
|
if (mergedWhere) entry.where = mergedWhere
|
|
265
273
|
if (mergedNested && Object.keys(mergedNested).length > 0) entry.include = mergedNested
|
|
274
|
+
// Preserve a caller-supplied row bound on the relation (issue #752). It only
|
|
275
|
+
// narrows, never widens, so it rides on top of the access `where`/include.
|
|
276
|
+
if (callerEntry?.take !== undefined) entry.take = callerEntry.take
|
|
266
277
|
|
|
267
|
-
// A bare-`true` relation with no access filter
|
|
278
|
+
// A bare-`true` relation with no access filter, nested include, or row bound stays `true`.
|
|
268
279
|
merged[relationName] = Object.keys(entry).length > 0 ? entry : true
|
|
269
280
|
}
|
|
270
281
|
|
|
@@ -128,12 +128,12 @@ export async function filterWritableFields<T extends Record<string, unknown>>(
|
|
|
128
128
|
// Map each raw per-part column name contributed by a multi-column field
|
|
129
129
|
// (e.g. storage image()/file() in Keystone-parity mode) back to its OWNING
|
|
130
130
|
// declared field. These columns are injected into the write payload by the
|
|
131
|
-
// field's `splitColumns
|
|
132
|
-
// as their own entries in `fieldConfigs`, so without this map they
|
|
133
|
-
// the #564 undeclared-key reject below.
|
|
131
|
+
// field's `splitColumns`, AFTER validation (#789), and are intentionally NOT
|
|
132
|
+
// declared as their own entries in `fieldConfigs`, so without this map they
|
|
133
|
+
// would trip the #564 undeclared-key reject below.
|
|
134
134
|
//
|
|
135
135
|
// SECURITY (#568): a raw column must NOT be blanket-passed through. The hooks
|
|
136
|
-
// layer (`
|
|
136
|
+
// layer (`splitMultiColumnFields`) only gates the owning field when the
|
|
137
137
|
// LOGICAL key (e.g. `media`) is present, because it iterates declared fields,
|
|
138
138
|
// not data keys. A non-sudo caller who supplies the raw columns DIRECTLY
|
|
139
139
|
// (`data: { media_url, media_size }`) never produces that logical key, so that
|
|
@@ -184,8 +184,8 @@ export async function filterWritableFields<T extends Record<string, unknown>>(
|
|
|
184
184
|
// they must NOT be blanket-passed through either: gate each one by its
|
|
185
185
|
// OWNING field's write access (see the SECURITY note where the map is built).
|
|
186
186
|
// This is the real gate for callers who supply the raw columns directly,
|
|
187
|
-
// because the logical-key gate in `
|
|
188
|
-
//
|
|
187
|
+
// because the logical-key gate in `splitMultiColumnFields` never fires for
|
|
188
|
+
// them. Denied (non-sudo) throws — same fail-loud behaviour as a denied
|
|
189
189
|
// declared field (#568); allowed (or sudo, via `checkFieldAccess`) passes
|
|
190
190
|
// through, preserving the legitimate multi-column write path.
|
|
191
191
|
const splitColumnOwner = splitColumnOwners.get(fieldName)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it, expect } from 'vitest'
|
|
2
2
|
import { filterReadableFields } from './field-visibility.js'
|
|
3
|
-
import { executeFieldResolveInputHooks } from '../hooks/index.js'
|
|
3
|
+
import { executeFieldResolveInputHooks, splitMultiColumnFields } from '../hooks/index.js'
|
|
4
4
|
import type { FieldConfig } from '../config/types.js'
|
|
5
5
|
import type { AccessContext, FieldAccess } from './types.js'
|
|
6
6
|
|
|
@@ -10,6 +10,13 @@ import type { AccessContext, FieldAccess } from './types.js'
|
|
|
10
10
|
* field-agnostic: they assert that ANY field implementing
|
|
11
11
|
* getColumnNames/assembleColumns/splitColumns is assembled on read (raw columns
|
|
12
12
|
* stripped) and split on write.
|
|
13
|
+
*
|
|
14
|
+
* The write side is split across two phases (#789): `executeFieldResolveInputHooks`
|
|
15
|
+
* (Phase 1.5) resolves the field's value under its LOGICAL key only — no split —
|
|
16
|
+
* so that validation (Phase 2-3, not exercised by these field-agnostic unit
|
|
17
|
+
* tests; see the Hook Pipeline / Write Pipeline test suites) runs against the
|
|
18
|
+
* logical value first. `splitMultiColumnFields` (Phase 4) then replaces the
|
|
19
|
+
* logical key with its physical per-part columns, AFTER validation has passed.
|
|
13
20
|
*/
|
|
14
21
|
|
|
15
22
|
// A minimal multi-column field: two physical columns `m_url` and `m_size`
|
|
@@ -113,10 +120,10 @@ describe('multi-column read assembly (filterReadableFields)', () => {
|
|
|
113
120
|
})
|
|
114
121
|
})
|
|
115
122
|
|
|
116
|
-
describe('multi-column
|
|
123
|
+
describe('multi-column resolveInput (executeFieldResolveInputHooks) does NOT split (#789)', () => {
|
|
117
124
|
const fields = { media: multiColumnField() }
|
|
118
125
|
|
|
119
|
-
it('
|
|
126
|
+
it('resolves the field under its LOGICAL key and leaves it unsplit', async () => {
|
|
120
127
|
const inputData = { media: { url: 'https://x/y.jpg', size: 99 } }
|
|
121
128
|
const result = await executeFieldResolveInputHooks(
|
|
122
129
|
inputData,
|
|
@@ -126,33 +133,81 @@ describe('multi-column write split (executeFieldResolveInputHooks)', () => {
|
|
|
126
133
|
makeContext(),
|
|
127
134
|
'Post',
|
|
128
135
|
)
|
|
136
|
+
// Still under the logical key — no split, no per-part columns yet.
|
|
137
|
+
expect(result).toEqual({ media: { url: 'https://x/y.jpg', size: 99 } })
|
|
138
|
+
expect('m_url' in result).toBe(false)
|
|
139
|
+
expect('m_size' in result).toBe(false)
|
|
140
|
+
})
|
|
141
|
+
|
|
142
|
+
it('passes an unrecognised value through unsplit, under the logical key', async () => {
|
|
143
|
+
// The field's own resolveInput fallback (see fixture: "unknown → return as
|
|
144
|
+
// is and let validation catch it") must be able to hand this value to
|
|
145
|
+
// validation BEFORE any split happens.
|
|
146
|
+
const inputData = { media: 'not-a-valid-shape' }
|
|
147
|
+
const result = await executeFieldResolveInputHooks(
|
|
148
|
+
inputData,
|
|
149
|
+
{ ...inputData },
|
|
150
|
+
fields,
|
|
151
|
+
'update',
|
|
152
|
+
makeContext(),
|
|
153
|
+
'Post',
|
|
154
|
+
)
|
|
155
|
+
expect(result).toEqual({ media: 'not-a-valid-shape' })
|
|
156
|
+
})
|
|
157
|
+
|
|
158
|
+
it('does not touch the field when it is absent from the write', async () => {
|
|
159
|
+
const inputData = { title: 'no media in payload' }
|
|
160
|
+
const result = await executeFieldResolveInputHooks(
|
|
161
|
+
inputData,
|
|
162
|
+
{ ...inputData },
|
|
163
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- inline field configs
|
|
164
|
+
{ ...fields, title: { type: 'text' } as any },
|
|
165
|
+
'update',
|
|
166
|
+
makeContext(),
|
|
167
|
+
'Post',
|
|
168
|
+
)
|
|
169
|
+
expect(result).toEqual({ title: 'no media in payload' })
|
|
170
|
+
expect('media' in result).toBe(false)
|
|
171
|
+
})
|
|
172
|
+
})
|
|
173
|
+
|
|
174
|
+
describe('multi-column write split (splitMultiColumnFields, AFTER validation — #789)', () => {
|
|
175
|
+
const fields = { media: multiColumnField() }
|
|
176
|
+
|
|
177
|
+
it('splits the logical value into per-part columns and removes the logical key', async () => {
|
|
178
|
+
const inputData = { media: { url: 'https://x/y.jpg', size: 99 } }
|
|
179
|
+
const result = await splitMultiColumnFields(
|
|
180
|
+
inputData,
|
|
181
|
+
{ ...inputData },
|
|
182
|
+
fields,
|
|
183
|
+
'create',
|
|
184
|
+
makeContext(),
|
|
185
|
+
)
|
|
129
186
|
expect(result).toEqual({ m_url: 'https://x/y.jpg', m_size: 99 })
|
|
130
187
|
expect('media' in result).toBe(false)
|
|
131
188
|
})
|
|
132
189
|
|
|
133
190
|
it('splitting null clears all per-part columns', async () => {
|
|
134
191
|
const inputData = { media: null }
|
|
135
|
-
const result = await
|
|
192
|
+
const result = await splitMultiColumnFields(
|
|
136
193
|
inputData,
|
|
137
194
|
{ ...inputData },
|
|
138
195
|
fields,
|
|
139
196
|
'update',
|
|
140
197
|
makeContext(),
|
|
141
|
-
'Post',
|
|
142
198
|
)
|
|
143
199
|
expect(result).toEqual({ m_url: null, m_size: null })
|
|
144
200
|
})
|
|
145
201
|
|
|
146
202
|
it('does not touch the columns when the logical field is absent from the write', async () => {
|
|
147
203
|
const inputData = { title: 'no media in payload' }
|
|
148
|
-
const result = await
|
|
204
|
+
const result = await splitMultiColumnFields(
|
|
149
205
|
inputData,
|
|
150
206
|
{ ...inputData },
|
|
151
207
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- inline field configs
|
|
152
208
|
{ ...fields, title: { type: 'text' } as any },
|
|
153
209
|
'update',
|
|
154
210
|
makeContext(),
|
|
155
|
-
'Post',
|
|
156
211
|
)
|
|
157
212
|
expect(result).toEqual({ title: 'no media in payload' })
|
|
158
213
|
expect('m_url' in result).toBe(false)
|
|
@@ -163,13 +218,12 @@ describe('multi-column write split respects field-level write access', () => {
|
|
|
163
218
|
it('does NOT write any per-part columns when update access is denied', async () => {
|
|
164
219
|
const fields = { media: multiColumnField({ update: () => false }) }
|
|
165
220
|
const inputData = { media: { url: 'https://x/y.jpg', size: 99 } }
|
|
166
|
-
const result = await
|
|
221
|
+
const result = await splitMultiColumnFields(
|
|
167
222
|
inputData,
|
|
168
223
|
{ ...inputData },
|
|
169
224
|
fields,
|
|
170
225
|
'update',
|
|
171
226
|
makeContext(),
|
|
172
|
-
'Post',
|
|
173
227
|
)
|
|
174
228
|
// The logical key is dropped (it is not a real column) AND none of its
|
|
175
229
|
// per-part columns are written — identical to how filterWritableFields
|
|
@@ -183,13 +237,12 @@ describe('multi-column write split respects field-level write access', () => {
|
|
|
183
237
|
it('does NOT write any per-part columns when create access is denied', async () => {
|
|
184
238
|
const fields = { media: multiColumnField({ create: () => false }) }
|
|
185
239
|
const inputData = { media: { url: 'https://x/y.jpg', size: 99 } }
|
|
186
|
-
const result = await
|
|
240
|
+
const result = await splitMultiColumnFields(
|
|
187
241
|
inputData,
|
|
188
242
|
{ ...inputData },
|
|
189
243
|
fields,
|
|
190
244
|
'create',
|
|
191
245
|
makeContext(),
|
|
192
|
-
'Post',
|
|
193
246
|
)
|
|
194
247
|
expect(result).toEqual({})
|
|
195
248
|
expect('m_url' in result).toBe(false)
|
|
@@ -198,13 +251,12 @@ describe('multi-column write split respects field-level write access', () => {
|
|
|
198
251
|
it('still splits/writes the columns when write access is granted', async () => {
|
|
199
252
|
const fields = { media: multiColumnField({ update: () => true, create: () => true }) }
|
|
200
253
|
const inputData = { media: { url: 'https://x/y.jpg', size: 99 } }
|
|
201
|
-
const result = await
|
|
254
|
+
const result = await splitMultiColumnFields(
|
|
202
255
|
inputData,
|
|
203
256
|
{ ...inputData },
|
|
204
257
|
fields,
|
|
205
258
|
'update',
|
|
206
259
|
makeContext(),
|
|
207
|
-
'Post',
|
|
208
260
|
)
|
|
209
261
|
expect(result).toEqual({ m_url: 'https://x/y.jpg', m_size: 99 })
|
|
210
262
|
expect('media' in result).toBe(false)
|
|
@@ -214,13 +266,12 @@ describe('multi-column write split respects field-level write access', () => {
|
|
|
214
266
|
// A field that denies `update` must still be writable on `create`.
|
|
215
267
|
const fields = { media: multiColumnField({ update: () => false }) }
|
|
216
268
|
const inputData = { media: { url: 'https://x/y.jpg', size: 99 } }
|
|
217
|
-
const result = await
|
|
269
|
+
const result = await splitMultiColumnFields(
|
|
218
270
|
inputData,
|
|
219
271
|
{ ...inputData },
|
|
220
272
|
fields,
|
|
221
273
|
'create',
|
|
222
274
|
makeContext(),
|
|
223
|
-
'Post',
|
|
224
275
|
)
|
|
225
276
|
expect(result).toEqual({ m_url: 'https://x/y.jpg', m_size: 99 })
|
|
226
277
|
})
|
|
@@ -228,13 +279,12 @@ describe('multi-column write split respects field-level write access', () => {
|
|
|
228
279
|
it('sudo bypasses the field-access gate and still splits', async () => {
|
|
229
280
|
const fields = { media: multiColumnField({ update: () => false }) }
|
|
230
281
|
const inputData = { media: { url: 'https://x/y.jpg', size: 99 } }
|
|
231
|
-
const result = await
|
|
282
|
+
const result = await splitMultiColumnFields(
|
|
232
283
|
inputData,
|
|
233
284
|
{ ...inputData },
|
|
234
285
|
fields,
|
|
235
286
|
'update',
|
|
236
287
|
makeContext({ isSudo: true }),
|
|
237
|
-
'Post',
|
|
238
288
|
)
|
|
239
289
|
expect(result).toEqual({ m_url: 'https://x/y.jpg', m_size: 99 })
|
|
240
290
|
})
|
|
@@ -242,13 +292,12 @@ describe('multi-column write split respects field-level write access', () => {
|
|
|
242
292
|
it('a multi-column field WITHOUT field-level access splits exactly as before', async () => {
|
|
243
293
|
const fields = { media: multiColumnField() }
|
|
244
294
|
const inputData = { media: { url: 'https://x/y.jpg', size: 99 } }
|
|
245
|
-
const result = await
|
|
295
|
+
const result = await splitMultiColumnFields(
|
|
246
296
|
inputData,
|
|
247
297
|
{ ...inputData },
|
|
248
298
|
fields,
|
|
249
299
|
'update',
|
|
250
300
|
makeContext(),
|
|
251
|
-
'Post',
|
|
252
301
|
)
|
|
253
302
|
expect(result).toEqual({ m_url: 'https://x/y.jpg', m_size: 99 })
|
|
254
303
|
})
|