@opensaas/stack-core 0.30.0 → 0.31.1

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.
Files changed (127) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +412 -0
  3. package/dist/access/access-filter.d.ts.map +1 -1
  4. package/dist/access/access-filter.js +14 -1
  5. package/dist/access/access-filter.js.map +1 -1
  6. package/dist/access/access-filter.test.js +50 -0
  7. package/dist/access/access-filter.test.js.map +1 -1
  8. package/dist/access/field-access.js +6 -6
  9. package/dist/access/field-access.js.map +1 -1
  10. package/dist/access/multi-column-read-write.test.js +46 -12
  11. package/dist/access/multi-column-read-write.test.js.map +1 -1
  12. package/dist/access/relationship-count.d.ts +60 -0
  13. package/dist/access/relationship-count.d.ts.map +1 -0
  14. package/dist/access/relationship-count.js +233 -0
  15. package/dist/access/relationship-count.js.map +1 -0
  16. package/dist/access/relationship-count.test.d.ts +2 -0
  17. package/dist/access/relationship-count.test.d.ts.map +1 -0
  18. package/dist/access/relationship-count.test.js +185 -0
  19. package/dist/access/relationship-count.test.js.map +1 -0
  20. package/dist/access/relationship-label-filter.d.ts +45 -0
  21. package/dist/access/relationship-label-filter.d.ts.map +1 -0
  22. package/dist/access/relationship-label-filter.js +93 -0
  23. package/dist/access/relationship-label-filter.js.map +1 -0
  24. package/dist/access/relationship-label-filter.test.d.ts +2 -0
  25. package/dist/access/relationship-label-filter.test.d.ts.map +1 -0
  26. package/dist/access/relationship-label-filter.test.js +126 -0
  27. package/dist/access/relationship-label-filter.test.js.map +1 -0
  28. package/dist/config/index.d.ts +1 -1
  29. package/dist/config/index.d.ts.map +1 -1
  30. package/dist/config/nav-count.d.ts +34 -0
  31. package/dist/config/nav-count.d.ts.map +1 -0
  32. package/dist/config/nav-count.js +71 -0
  33. package/dist/config/nav-count.js.map +1 -0
  34. package/dist/config/types.d.ts +305 -4
  35. package/dist/config/types.d.ts.map +1 -1
  36. package/dist/context/hook-pipeline.d.ts.map +1 -1
  37. package/dist/context/hook-pipeline.js +11 -1
  38. package/dist/context/hook-pipeline.js.map +1 -1
  39. package/dist/context/index.d.ts +28 -0
  40. package/dist/context/index.d.ts.map +1 -1
  41. package/dist/context/index.js +205 -0
  42. package/dist/context/index.js.map +1 -1
  43. package/dist/context/nested-operations.d.ts.map +1 -1
  44. package/dist/context/nested-operations.js +7 -1
  45. package/dist/context/nested-operations.js.map +1 -1
  46. package/dist/extend.d.ts +1 -0
  47. package/dist/extend.d.ts.map +1 -1
  48. package/dist/fields/index.d.ts +1 -1
  49. package/dist/fields/index.d.ts.map +1 -1
  50. package/dist/fields/index.js +166 -0
  51. package/dist/fields/index.js.map +1 -1
  52. package/dist/filter/collect.d.ts +32 -0
  53. package/dist/filter/collect.d.ts.map +1 -0
  54. package/dist/filter/collect.js +60 -0
  55. package/dist/filter/collect.js.map +1 -0
  56. package/dist/filter/filter.test.d.ts +2 -0
  57. package/dist/filter/filter.test.d.ts.map +1 -0
  58. package/dist/filter/filter.test.js +348 -0
  59. package/dist/filter/filter.test.js.map +1 -0
  60. package/dist/filter/index.d.ts +7 -0
  61. package/dist/filter/index.d.ts.map +1 -0
  62. package/dist/filter/index.js +16 -0
  63. package/dist/filter/index.js.map +1 -0
  64. package/dist/filter/map.d.ts +18 -0
  65. package/dist/filter/map.d.ts.map +1 -0
  66. package/dist/filter/map.js +60 -0
  67. package/dist/filter/map.js.map +1 -0
  68. package/dist/filter/parse.d.ts +33 -0
  69. package/dist/filter/parse.d.ts.map +1 -0
  70. package/dist/filter/parse.js +103 -0
  71. package/dist/filter/parse.js.map +1 -0
  72. package/dist/filter/serialize.d.ts +25 -0
  73. package/dist/filter/serialize.d.ts.map +1 -0
  74. package/dist/filter/serialize.js +68 -0
  75. package/dist/filter/serialize.js.map +1 -0
  76. package/dist/filter/serialize.test.d.ts +2 -0
  77. package/dist/filter/serialize.test.d.ts.map +1 -0
  78. package/dist/filter/serialize.test.js +83 -0
  79. package/dist/filter/serialize.test.js.map +1 -0
  80. package/dist/filter/types.d.ts +122 -0
  81. package/dist/filter/types.d.ts.map +1 -0
  82. package/dist/filter/types.js +24 -0
  83. package/dist/filter/types.js.map +1 -0
  84. package/dist/hooks/index.d.ts +30 -0
  85. package/dist/hooks/index.d.ts.map +1 -1
  86. package/dist/hooks/index.js +79 -59
  87. package/dist/hooks/index.js.map +1 -1
  88. package/dist/index.d.ts +6 -1
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js +19 -0
  91. package/dist/index.js.map +1 -1
  92. package/dist/internal.d.ts +1 -0
  93. package/dist/internal.d.ts.map +1 -1
  94. package/dist/internal.js +4 -0
  95. package/dist/internal.js.map +1 -1
  96. package/package.json +1 -1
  97. package/src/access/access-filter.test.ts +79 -0
  98. package/src/access/access-filter.ts +15 -4
  99. package/src/access/field-access.ts +6 -6
  100. package/src/access/multi-column-read-write.test.ts +68 -19
  101. package/src/access/relationship-count.test.ts +269 -0
  102. package/src/access/relationship-count.ts +311 -0
  103. package/src/access/relationship-label-filter.test.ts +177 -0
  104. package/src/access/relationship-label-filter.ts +140 -0
  105. package/src/config/index.ts +6 -0
  106. package/src/config/nav-count.ts +85 -0
  107. package/src/config/types.ts +319 -1
  108. package/src/context/hook-pipeline.ts +19 -0
  109. package/src/context/index.ts +285 -3
  110. package/src/context/nested-operations.ts +22 -0
  111. package/src/extend.ts +9 -0
  112. package/src/fields/index.ts +168 -0
  113. package/src/filter/collect.ts +72 -0
  114. package/src/filter/filter.test.ts +400 -0
  115. package/src/filter/index.ts +25 -0
  116. package/src/filter/map.ts +68 -0
  117. package/src/filter/parse.ts +106 -0
  118. package/src/filter/serialize.test.ts +115 -0
  119. package/src/filter/serialize.ts +75 -0
  120. package/src/filter/types.ts +120 -0
  121. package/src/hooks/index.ts +87 -57
  122. package/src/index.ts +54 -0
  123. package/src/internal.ts +5 -0
  124. package/tests/context.test.ts +690 -0
  125. package/tests/multi-column-validation-ordering.test.ts +305 -0
  126. package/tests/nav-count.test.ts +189 -0
  127. package/tsconfig.tsbuildinfo +1 -1
@@ -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
@@ -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,GAChB,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;AAGnE,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"}
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;AAuBhD,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,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"}
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"}
@@ -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
@@ -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;AAG3E,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"}
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
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opensaas/stack-core",
3
- "version": "0.30.0",
3
+ "version": "0.31.1",
4
4
  "description": "Core stack for OpenSaas - schema definition, access control, and runtime utilities",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -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 and no nested include stays `true`.
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` AFTER resolveInput and are intentionally NOT declared
132
- // as their own entries in `fieldConfigs`, so without this map they would trip
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 (`executeFieldResolveInputHooks`) only gates the owning field when the
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 `executeFieldResolveInputHooks` never fires
188
- // for them. Denied (non-sudo) throws — same fail-loud behaviour as a denied
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 write split (executeFieldResolveInputHooks)', () => {
123
+ describe('multi-column resolveInput (executeFieldResolveInputHooks) does NOT split (#789)', () => {
117
124
  const fields = { media: multiColumnField() }
118
125
 
119
- it('splits the logical value into per-part columns and removes the logical key', async () => {
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 executeFieldResolveInputHooks(
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 executeFieldResolveInputHooks(
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 executeFieldResolveInputHooks(
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 executeFieldResolveInputHooks(
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 executeFieldResolveInputHooks(
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 executeFieldResolveInputHooks(
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 executeFieldResolveInputHooks(
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 executeFieldResolveInputHooks(
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
  })