@baseplate-dev/project-builder-lib 0.6.3 → 0.6.5
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 +54 -0
- package/dist/compiler/admin-crud-action-compiler.js +1 -1
- package/dist/compiler/admin-crud-action-compiler.js.map +1 -1
- package/dist/compiler/admin-crud-column-compiler-spec.js +1 -1
- package/dist/compiler/admin-crud-column-compiler-spec.js.map +1 -1
- package/dist/compiler/admin-crud-input-spec.js +1 -1
- package/dist/compiler/admin-crud-input-spec.js.map +1 -1
- package/dist/compiler/app-compiler-spec.js +1 -1
- package/dist/compiler/app-compiler-spec.js.map +1 -1
- package/dist/compiler/index.d.ts +1 -0
- package/dist/compiler/index.d.ts.map +1 -1
- package/dist/compiler/index.js +1 -0
- package/dist/compiler/index.js.map +1 -1
- package/dist/compiler/model-transformer-compiler-spec.js +1 -1
- package/dist/compiler/model-transformer-compiler-spec.js.map +1 -1
- package/dist/compiler/root-compiler-spec.d.ts +25 -0
- package/dist/compiler/root-compiler-spec.d.ts.map +1 -0
- package/dist/compiler/root-compiler-spec.js +23 -0
- package/dist/compiler/root-compiler-spec.js.map +1 -0
- package/dist/constants/theme-colors.d.ts +0 -48
- package/dist/constants/theme-colors.d.ts.map +1 -1
- package/dist/constants/theme-colors.js +0 -32
- package/dist/constants/theme-colors.js.map +1 -1
- package/dist/definition/feature/feature-utils.d.ts +9 -3
- package/dist/definition/feature/feature-utils.d.ts.map +1 -1
- package/dist/definition/feature/feature-utils.js +30 -2
- package/dist/definition/feature/feature-utils.js.map +1 -1
- package/dist/definition/plugins/plugin-utils.d.ts +15 -0
- package/dist/definition/plugins/plugin-utils.d.ts.map +1 -1
- package/dist/definition/plugins/plugin-utils.js +50 -1
- package/dist/definition/plugins/plugin-utils.js.map +1 -1
- package/dist/definition/project-definition-container.d.ts.map +1 -1
- package/dist/definition/project-definition-container.js +3 -1
- package/dist/definition/project-definition-container.js.map +1 -1
- package/dist/{schema/models → expression-parsers}/authorizer/authorizer-expression-acorn-parser.d.ts +2 -0
- package/dist/expression-parsers/authorizer/authorizer-expression-acorn-parser.d.ts.map +1 -0
- package/dist/{schema/models → expression-parsers}/authorizer/authorizer-expression-acorn-parser.js +107 -52
- package/dist/expression-parsers/authorizer/authorizer-expression-acorn-parser.js.map +1 -0
- package/dist/{schema/models → expression-parsers}/authorizer/authorizer-expression-ast.d.ts +69 -1
- package/dist/expression-parsers/authorizer/authorizer-expression-ast.d.ts.map +1 -0
- package/dist/{schema/models → expression-parsers}/authorizer/authorizer-expression-ast.js +2 -0
- package/dist/expression-parsers/authorizer/authorizer-expression-ast.js.map +1 -0
- package/dist/{schema/models → expression-parsers}/authorizer/authorizer-expression-parser.d.ts +13 -14
- package/dist/expression-parsers/authorizer/authorizer-expression-parser.d.ts.map +1 -0
- package/dist/expression-parsers/authorizer/authorizer-expression-parser.js +292 -0
- package/dist/expression-parsers/authorizer/authorizer-expression-parser.js.map +1 -0
- package/dist/{schema/models → expression-parsers}/authorizer/authorizer-expression-validator.d.ts +37 -17
- package/dist/expression-parsers/authorizer/authorizer-expression-validator.d.ts.map +1 -0
- package/dist/expression-parsers/authorizer/authorizer-expression-validator.js +379 -0
- package/dist/expression-parsers/authorizer/authorizer-expression-validator.js.map +1 -0
- package/dist/expression-parsers/authorizer/authorizer-expression-visitor.d.ts +54 -0
- package/dist/expression-parsers/authorizer/authorizer-expression-visitor.d.ts.map +1 -0
- package/dist/expression-parsers/authorizer/authorizer-expression-visitor.js +52 -0
- package/dist/expression-parsers/authorizer/authorizer-expression-visitor.js.map +1 -0
- package/dist/expression-parsers/authorizer/index.d.ts +6 -0
- package/dist/expression-parsers/authorizer/index.d.ts.map +1 -0
- package/dist/expression-parsers/authorizer/index.js +6 -0
- package/dist/expression-parsers/authorizer/index.js.map +1 -0
- package/dist/expression-parsers/register-core-module.d.ts +6 -0
- package/dist/expression-parsers/register-core-module.d.ts.map +1 -0
- package/dist/expression-parsers/register-core-module.js +29 -0
- package/dist/expression-parsers/register-core-module.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +6 -0
- package/dist/migrations/index.js.map +1 -1
- package/dist/migrations/migration-029-admin-role-and-auto-assigned.d.ts +25 -0
- package/dist/migrations/migration-029-admin-role-and-auto-assigned.d.ts.map +1 -0
- package/dist/migrations/migration-029-admin-role-and-auto-assigned.js +72 -0
- package/dist/migrations/migration-029-admin-role-and-auto-assigned.js.map +1 -0
- package/dist/migrations/migration-030-remove-theme-hover-colors.d.ts +17 -0
- package/dist/migrations/migration-030-remove-theme-hover-colors.d.ts.map +1 -0
- package/dist/migrations/migration-030-remove-theme-hover-colors.js +41 -0
- package/dist/migrations/migration-030-remove-theme-hover-colors.js.map +1 -0
- package/dist/migrations/migration-031-uuid-default-generation.d.ts +24 -0
- package/dist/migrations/migration-031-uuid-default-generation.d.ts.map +1 -0
- package/dist/migrations/migration-031-uuid-default-generation.js +40 -0
- package/dist/migrations/migration-031-uuid-default-generation.js.map +1 -0
- package/dist/migrations/transform-json-path.d.ts.map +1 -1
- package/dist/migrations/transform-json-path.js +2 -3
- package/dist/migrations/transform-json-path.js.map +1 -1
- package/dist/parser/collect-definition-issues.d.ts.map +1 -1
- package/dist/parser/collect-definition-issues.js +10 -2
- package/dist/parser/collect-definition-issues.js.map +1 -1
- package/dist/parser/collect-expression-issues.d.ts +17 -9
- package/dist/parser/collect-expression-issues.d.ts.map +1 -1
- package/dist/parser/collect-expression-issues.js +21 -15
- package/dist/parser/collect-expression-issues.js.map +1 -1
- package/dist/parser/definition-issue-checkers/plugin-dependency-checker.d.ts +11 -0
- package/dist/parser/definition-issue-checkers/plugin-dependency-checker.d.ts.map +1 -0
- package/dist/parser/definition-issue-checkers/plugin-dependency-checker.js +41 -0
- package/dist/parser/definition-issue-checkers/plugin-dependency-checker.js.map +1 -0
- package/dist/parser/definition-issue-checkers/plugin-implementation-checker.d.ts +16 -0
- package/dist/parser/definition-issue-checkers/plugin-implementation-checker.d.ts.map +1 -0
- package/dist/parser/definition-issue-checkers/plugin-implementation-checker.js +69 -0
- package/dist/parser/definition-issue-checkers/plugin-implementation-checker.js.map +1 -0
- package/dist/parser/definition-issue-utils.d.ts +28 -1
- package/dist/parser/definition-issue-utils.d.ts.map +1 -1
- package/dist/parser/definition-issue-utils.js +59 -0
- package/dist/parser/definition-issue-utils.js.map +1 -1
- package/dist/parser/find-orphaned-union-items.d.ts +30 -0
- package/dist/parser/find-orphaned-union-items.d.ts.map +1 -0
- package/dist/parser/find-orphaned-union-items.js +47 -0
- package/dist/parser/find-orphaned-union-items.js.map +1 -0
- package/dist/parser/index.d.ts +3 -1
- package/dist/parser/index.d.ts.map +1 -1
- package/dist/parser/index.js +3 -1
- package/dist/parser/index.js.map +1 -1
- package/dist/parser/parser.d.ts.map +1 -1
- package/dist/parser/parser.js +3 -0
- package/dist/parser/parser.js.map +1 -1
- package/dist/parser/transform-data-with-schema.js +1 -1
- package/dist/parser/transform-data-with-schema.js.map +1 -1
- package/dist/plugins/imports/index.d.ts +1 -0
- package/dist/plugins/imports/index.d.ts.map +1 -1
- package/dist/plugins/imports/index.js +1 -0
- package/dist/plugins/imports/index.js.map +1 -1
- package/dist/plugins/imports/validate-plugin-dependencies.d.ts +42 -0
- package/dist/plugins/imports/validate-plugin-dependencies.d.ts.map +1 -0
- package/dist/plugins/imports/validate-plugin-dependencies.js +80 -0
- package/dist/plugins/imports/validate-plugin-dependencies.js.map +1 -0
- package/dist/plugins/metadata/types.d.ts +13 -0
- package/dist/plugins/metadata/types.d.ts.map +1 -1
- package/dist/plugins/metadata/types.js +15 -0
- package/dist/plugins/metadata/types.js.map +1 -1
- package/dist/plugins/spec/auth-config-spec.d.ts +1 -0
- package/dist/plugins/spec/auth-config-spec.d.ts.map +1 -1
- package/dist/plugins/spec/auth-config-spec.js.map +1 -1
- package/dist/references/definition-ref-builder.d.ts +2 -0
- package/dist/references/definition-ref-builder.d.ts.map +1 -1
- package/dist/references/definition-ref-registry.d.ts +2 -0
- package/dist/references/definition-ref-registry.d.ts.map +1 -1
- package/dist/references/definition-ref-registry.js.map +1 -1
- package/dist/references/expression-parser-ref.d.ts +51 -0
- package/dist/references/expression-parser-ref.d.ts.map +1 -0
- package/dist/references/expression-parser-ref.js +14 -0
- package/dist/references/expression-parser-ref.js.map +1 -0
- package/dist/references/expression-parser-spec.d.ts +29 -0
- package/dist/references/expression-parser-spec.d.ts.map +1 -0
- package/dist/references/expression-parser-spec.js +29 -0
- package/dist/references/expression-parser-spec.js.map +1 -0
- package/dist/references/expression-types.d.ts +20 -22
- package/dist/references/expression-types.d.ts.map +1 -1
- package/dist/references/expression-types.js +1 -2
- package/dist/references/expression-types.js.map +1 -1
- package/dist/references/extend-parser-context-with-refs.d.ts +7 -2
- package/dist/references/extend-parser-context-with-refs.d.ts.map +1 -1
- package/dist/references/extend-parser-context-with-refs.js +42 -12
- package/dist/references/extend-parser-context-with-refs.js.map +1 -1
- package/dist/references/extract-definition-refs.js +1 -1
- package/dist/references/extract-definition-refs.js.map +1 -1
- package/dist/references/fix-definition-refs.d.ts +22 -0
- package/dist/references/fix-definition-refs.d.ts.map +1 -0
- package/dist/references/fix-definition-refs.js +29 -0
- package/dist/references/fix-definition-refs.js.map +1 -0
- package/dist/references/fix-expression-renames.d.ts +20 -0
- package/dist/references/fix-expression-renames.d.ts.map +1 -0
- package/dist/references/fix-expression-renames.js +87 -0
- package/dist/references/fix-expression-renames.js.map +1 -0
- package/dist/references/index.d.ts +4 -0
- package/dist/references/index.d.ts.map +1 -1
- package/dist/references/index.js +4 -0
- package/dist/references/index.js.map +1 -1
- package/dist/references/parse-schema-with-references.d.ts +2 -1
- package/dist/references/parse-schema-with-references.d.ts.map +1 -1
- package/dist/references/parse-schema-with-references.js.map +1 -1
- package/dist/schema/apps/web/admin/sections/crud.d.ts.map +1 -1
- package/dist/schema/apps/web/admin/sections/crud.js +3 -2
- package/dist/schema/apps/web/admin/sections/crud.js.map +1 -1
- package/dist/schema/creator/definition-issue-checkers.d.ts +15 -0
- package/dist/schema/creator/definition-issue-checkers.d.ts.map +1 -1
- package/dist/schema/creator/definition-issue-checkers.js +33 -0
- package/dist/schema/creator/definition-issue-checkers.js.map +1 -1
- package/dist/schema/creator/schema-creator.js +1 -1
- package/dist/schema/creator/schema-creator.js.map +1 -1
- package/dist/schema/features/feature.js +1 -1
- package/dist/schema/features/feature.js.map +1 -1
- package/dist/schema/libraries/library.d.ts.map +1 -1
- package/dist/schema/libraries/library.js +1 -0
- package/dist/schema/libraries/library.js.map +1 -1
- package/dist/schema/models/authorizer/authorizer-expression-ref.d.ts +11 -0
- package/dist/schema/models/authorizer/authorizer-expression-ref.d.ts.map +1 -0
- package/dist/schema/models/authorizer/authorizer-expression-ref.js +10 -0
- package/dist/schema/models/authorizer/authorizer-expression-ref.js.map +1 -0
- package/dist/schema/models/authorizer/authorizer.js +2 -2
- package/dist/schema/models/authorizer/authorizer.js.map +1 -1
- package/dist/schema/models/authorizer/index.d.ts +1 -4
- package/dist/schema/models/authorizer/index.d.ts.map +1 -1
- package/dist/schema/models/authorizer/index.js +1 -4
- package/dist/schema/models/authorizer/index.js.map +1 -1
- package/dist/schema/models/enums.d.ts +12 -0
- package/dist/schema/models/enums.d.ts.map +1 -1
- package/dist/schema/models/enums.js +5 -2
- package/dist/schema/models/enums.js.map +1 -1
- package/dist/schema/models/graphql.js +3 -3
- package/dist/schema/models/graphql.js.map +1 -1
- package/dist/schema/models/models.d.ts +24 -36
- package/dist/schema/models/models.d.ts.map +1 -1
- package/dist/schema/models/models.js +7 -5
- package/dist/schema/models/models.js.map +1 -1
- package/dist/schema/plugins/definition.d.ts.map +1 -1
- package/dist/schema/plugins/definition.js +2 -0
- package/dist/schema/plugins/definition.js.map +1 -1
- package/dist/schema/project-definition.d.ts +14 -22
- package/dist/schema/project-definition.d.ts.map +1 -1
- package/dist/schema/project-definition.js +5 -1
- package/dist/schema/project-definition.js.map +1 -1
- package/dist/schema/settings/settings.d.ts +2 -10
- package/dist/schema/settings/settings.d.ts.map +1 -1
- package/dist/schema/settings/theme.d.ts +3 -15
- package/dist/schema/settings/theme.d.ts.map +1 -1
- package/dist/schema/utils/validation.d.ts.map +1 -1
- package/dist/schema/utils/validation.js +16 -3
- package/dist/schema/utils/validation.js.map +1 -1
- package/dist/specs/packages/library-type-spec.d.ts +4 -0
- package/dist/specs/packages/library-type-spec.d.ts.map +1 -1
- package/dist/specs/packages/library-type-spec.js +2 -2
- package/dist/specs/packages/library-type-spec.js.map +1 -1
- package/dist/testing/definition-helpers.test-helper.js +2 -2
- package/dist/testing/definition-helpers.test-helper.js.map +1 -1
- package/dist/testing/expression-stub-parser.test-helper.d.ts +2 -4
- package/dist/testing/expression-stub-parser.test-helper.d.ts.map +1 -1
- package/dist/testing/expression-stub-parser.test-helper.js +2 -10
- package/dist/testing/expression-stub-parser.test-helper.js.map +1 -1
- package/dist/testing/expression-warning-parser.test-helper.d.ts +2 -4
- package/dist/testing/expression-warning-parser.test-helper.d.ts.map +1 -1
- package/dist/testing/expression-warning-parser.test-helper.js +2 -8
- package/dist/testing/expression-warning-parser.test-helper.js.map +1 -1
- package/dist/testing/index.d.ts +1 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +1 -0
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/parser-context.test-helper.d.ts.map +1 -1
- package/dist/testing/parser-context.test-helper.js +2 -1
- package/dist/testing/parser-context.test-helper.js.map +1 -1
- package/dist/testing/plugin-store.test-helper.d.ts +11 -0
- package/dist/testing/plugin-store.test-helper.d.ts.map +1 -0
- package/dist/testing/plugin-store.test-helper.js +32 -0
- package/dist/testing/plugin-store.test-helper.js.map +1 -0
- package/dist/testing/project-definition-container.test-helper.d.ts.map +1 -1
- package/dist/testing/project-definition-container.test-helper.js +2 -1
- package/dist/testing/project-definition-container.test-helper.js.map +1 -1
- package/dist/tools/index.d.ts +2 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/sort-entity-arrays.d.ts +15 -0
- package/dist/tools/sort-entity-arrays.d.ts.map +1 -0
- package/dist/tools/sort-entity-arrays.js +31 -0
- package/dist/tools/sort-entity-arrays.js.map +1 -0
- package/dist/utils/color-conversions.d.ts +12 -0
- package/dist/utils/color-conversions.d.ts.map +1 -1
- package/dist/utils/color-conversions.js +17 -1
- package/dist/utils/color-conversions.js.map +1 -1
- package/dist/utils/color-names.d.ts.map +1 -1
- package/dist/utils/color-names.js +6 -5
- package/dist/utils/color-names.js.map +1 -1
- package/dist/utils/definition-diff/definition-diff.js +2 -2
- package/dist/utils/definition-diff/definition-diff.js.map +1 -1
- package/dist/utils/theme.d.ts +1 -0
- package/dist/utils/theme.d.ts.map +1 -1
- package/dist/utils/theme.js +18 -10
- package/dist/utils/theme.js.map +1 -1
- package/dist/web/components/definition-diff-alert.js +2 -2
- package/dist/web/components/definition-diff-alert.js.map +1 -1
- package/dist/web/components/feature-combobox-field.d.ts.map +1 -1
- package/dist/web/components/feature-combobox-field.js +5 -3
- package/dist/web/components/feature-combobox-field.js.map +1 -1
- package/dist/web/specs/admin-crud-action-web-spec.js +1 -1
- package/dist/web/specs/admin-crud-action-web-spec.js.map +1 -1
- package/dist/web/specs/admin-crud-column-web-spec.js +1 -1
- package/dist/web/specs/admin-crud-column-web-spec.js.map +1 -1
- package/dist/web/specs/admin-crud-input-web-spec.js +1 -1
- package/dist/web/specs/admin-crud-input-web-spec.js.map +1 -1
- package/dist/web/specs/model-transformer-web-spec.d.ts +19 -2
- package/dist/web/specs/model-transformer-web-spec.d.ts.map +1 -1
- package/dist/web/specs/model-transformer-web-spec.js +1 -1
- package/dist/web/specs/model-transformer-web-spec.js.map +1 -1
- package/package.json +8 -8
- package/dist/schema/models/authorizer/authorizer-expression-acorn-parser.d.ts.map +0 -1
- package/dist/schema/models/authorizer/authorizer-expression-acorn-parser.js.map +0 -1
- package/dist/schema/models/authorizer/authorizer-expression-ast.d.ts.map +0 -1
- package/dist/schema/models/authorizer/authorizer-expression-ast.js.map +0 -1
- package/dist/schema/models/authorizer/authorizer-expression-parser.d.ts.map +0 -1
- package/dist/schema/models/authorizer/authorizer-expression-parser.js +0 -145
- package/dist/schema/models/authorizer/authorizer-expression-parser.js.map +0 -1
- package/dist/schema/models/authorizer/authorizer-expression-validator.d.ts.map +0 -1
- package/dist/schema/models/authorizer/authorizer-expression-validator.js +0 -284
- package/dist/schema/models/authorizer/authorizer-expression-validator.js.map +0 -1
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { RefExpressionParser } from '#src/references/expression-types.js';
|
|
3
|
+
import { modelAuthorizerRoleEntityType } from '#src/schema/models/authorizer/types.js';
|
|
4
|
+
import { modelForeignRelationEntityType, modelLocalRelationEntityType, modelScalarFieldEntityType, } from '#src/schema/models/types.js';
|
|
5
|
+
import { parseAuthorizerExpression } from './authorizer-expression-acorn-parser.js';
|
|
6
|
+
import { AuthorizerExpressionParseError } from './authorizer-expression-ast.js';
|
|
7
|
+
import { buildModelExpressionContext, validateAuthorizerExpression, } from './authorizer-expression-validator.js';
|
|
8
|
+
import { visitAuthorizerExpression } from './authorizer-expression-visitor.js';
|
|
9
|
+
/**
|
|
10
|
+
* Expression parser for model authorizer role expressions.
|
|
11
|
+
*
|
|
12
|
+
* Parses expressions like:
|
|
13
|
+
* - `model.id === auth.userId` (ownership check)
|
|
14
|
+
* - `auth.hasRole('admin')` (global role check)
|
|
15
|
+
* - `model.id === auth.userId || auth.hasRole('admin')` (combined)
|
|
16
|
+
*
|
|
17
|
+
* Uses Acorn to parse JavaScript expressions and validates
|
|
18
|
+
* that only supported constructs are used.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* const schema = z.object({
|
|
23
|
+
* expression: ctx.withExpression(authorizerExpressionParser, { model: modelSlot }),
|
|
24
|
+
* });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export class AuthorizerExpressionParser extends RefExpressionParser {
|
|
28
|
+
name = 'authorizer-expression';
|
|
29
|
+
/**
|
|
30
|
+
* Creates a Zod schema for validating expression strings.
|
|
31
|
+
* Requires a non-empty string value.
|
|
32
|
+
*/
|
|
33
|
+
createSchema() {
|
|
34
|
+
return z.string().min(1, 'Expression is required');
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Parse the expression string into an AST.
|
|
38
|
+
*
|
|
39
|
+
* @param value - The expression string
|
|
40
|
+
* @returns Success with parsed expression info, or failure with error message
|
|
41
|
+
*/
|
|
42
|
+
parse(value) {
|
|
43
|
+
try {
|
|
44
|
+
return { success: true, value: parseAuthorizerExpression(value) };
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
if (error instanceof AuthorizerExpressionParseError) {
|
|
48
|
+
return { success: false, error: error.message };
|
|
49
|
+
}
|
|
50
|
+
throw error;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get validation warnings for the expression.
|
|
55
|
+
*
|
|
56
|
+
* Validates:
|
|
57
|
+
* - Syntax errors from parsing
|
|
58
|
+
* - Model field references exist
|
|
59
|
+
* - Auth field references are valid
|
|
60
|
+
* - Role names exist in project config (warning only)
|
|
61
|
+
*/
|
|
62
|
+
getWarnings(parseResult, context, resolvedSlots) {
|
|
63
|
+
// Get model context from resolved slots (throws if model not found)
|
|
64
|
+
const modelContext = this.getModelContext(context.definition, resolvedSlots);
|
|
65
|
+
// Validate the expression against model fields and roles
|
|
66
|
+
return validateAuthorizerExpression(parseResult.ast, modelContext, context.pluginStore, context.definition);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Get entity references from the expression with their positions.
|
|
70
|
+
*
|
|
71
|
+
* Walks the AST and resolves each name reference (field, relation, role)
|
|
72
|
+
* to its entity ID by navigating the model definition from the resolved slots.
|
|
73
|
+
* Returns positions marking exactly which text to replace when an entity is renamed.
|
|
74
|
+
*/
|
|
75
|
+
getReferencedEntities(_value, parseResult, definition, resolvedSlots) {
|
|
76
|
+
if (!parseResult.success) {
|
|
77
|
+
return [];
|
|
78
|
+
}
|
|
79
|
+
const model = this.getRawModel(definition, resolvedSlots);
|
|
80
|
+
const allModels = definition.models.filter((m) => typeof m.name === 'string');
|
|
81
|
+
// Build lookup maps
|
|
82
|
+
const fieldByName = new Map();
|
|
83
|
+
for (const field of model.model.fields) {
|
|
84
|
+
fieldByName.set(field.name, { id: field.id });
|
|
85
|
+
}
|
|
86
|
+
const relationByName = new Map();
|
|
87
|
+
// Local relations (defined on this model)
|
|
88
|
+
for (const relation of model.model.relations) {
|
|
89
|
+
relationByName.set(relation.name, {
|
|
90
|
+
id: relation.id,
|
|
91
|
+
modelRef: relation.modelRef,
|
|
92
|
+
entityType: modelLocalRelationEntityType,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
const modelById = new Map();
|
|
96
|
+
for (const m of allModels) {
|
|
97
|
+
modelById.set(m.id, m);
|
|
98
|
+
}
|
|
99
|
+
// Foreign relations (defined on other models pointing to this model via foreignRelationName)
|
|
100
|
+
for (const m of allModels) {
|
|
101
|
+
for (const relation of m.model.relations) {
|
|
102
|
+
if (relation.foreignRelationName && relation.modelRef === model.id) {
|
|
103
|
+
relationByName.set(relation.foreignRelationName, {
|
|
104
|
+
id: relation.foreignId,
|
|
105
|
+
// Foreign relation points back to the model that defines it
|
|
106
|
+
modelRef: m.id,
|
|
107
|
+
entityType: modelForeignRelationEntityType,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const deps = [];
|
|
113
|
+
const visitor = {
|
|
114
|
+
fieldComparison(node) {
|
|
115
|
+
for (const side of [node.left, node.right]) {
|
|
116
|
+
if (side.type === 'fieldRef' && side.source === 'model') {
|
|
117
|
+
const field = fieldByName.get(side.field);
|
|
118
|
+
if (field) {
|
|
119
|
+
deps.push({
|
|
120
|
+
entityType: modelScalarFieldEntityType,
|
|
121
|
+
entityId: field.id,
|
|
122
|
+
start: side.end - side.field.length,
|
|
123
|
+
end: side.end,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
hasRole() {
|
|
130
|
+
// Global auth roles are defined by plugins, not navigable from
|
|
131
|
+
// the raw model definition. Skip — auth role renames are rare
|
|
132
|
+
// and would require traversing plugin-specific config.
|
|
133
|
+
},
|
|
134
|
+
hasSomeRole() {
|
|
135
|
+
// Same as hasRole — skip global auth role references
|
|
136
|
+
},
|
|
137
|
+
nestedHasRole(node) {
|
|
138
|
+
const relation = relationByName.get(node.relationName);
|
|
139
|
+
if (relation) {
|
|
140
|
+
deps.push({
|
|
141
|
+
entityType: relation.entityType,
|
|
142
|
+
entityId: relation.id,
|
|
143
|
+
start: node.relationEnd - node.relationName.length,
|
|
144
|
+
end: node.relationEnd,
|
|
145
|
+
});
|
|
146
|
+
// Foreign authorizer role
|
|
147
|
+
const foreignModel = modelById.get(relation.modelRef);
|
|
148
|
+
if (foreignModel) {
|
|
149
|
+
const foreignRole = foreignModel.authorizer.roles.find((r) => r.name === node.role);
|
|
150
|
+
if (foreignRole) {
|
|
151
|
+
deps.push({
|
|
152
|
+
entityType: modelAuthorizerRoleEntityType,
|
|
153
|
+
entityId: foreignRole.id,
|
|
154
|
+
start: node.roleStart + 1,
|
|
155
|
+
end: node.roleEnd - 1,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
nestedHasSomeRole(node) {
|
|
162
|
+
const relation = relationByName.get(node.relationName);
|
|
163
|
+
if (relation) {
|
|
164
|
+
deps.push({
|
|
165
|
+
entityType: relation.entityType,
|
|
166
|
+
entityId: relation.id,
|
|
167
|
+
start: node.relationEnd - node.relationName.length,
|
|
168
|
+
end: node.relationEnd,
|
|
169
|
+
});
|
|
170
|
+
const foreignModel = modelById.get(relation.modelRef);
|
|
171
|
+
if (foreignModel) {
|
|
172
|
+
const foreignRoleByName = new Map(foreignModel.authorizer.roles.map((r) => [r.name, r]));
|
|
173
|
+
for (let i = 0; i < node.roles.length; i++) {
|
|
174
|
+
const foreignRole = foreignRoleByName.get(node.roles[i]);
|
|
175
|
+
if (foreignRole) {
|
|
176
|
+
deps.push({
|
|
177
|
+
entityType: modelAuthorizerRoleEntityType,
|
|
178
|
+
entityId: foreignRole.id,
|
|
179
|
+
start: node.rolesStart[i] + 1,
|
|
180
|
+
end: node.rolesEnd[i] - 1,
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
relationFilter(node) {
|
|
188
|
+
const relation = relationByName.get(node.relationName);
|
|
189
|
+
if (relation) {
|
|
190
|
+
deps.push({
|
|
191
|
+
entityType: relation.entityType,
|
|
192
|
+
entityId: relation.id,
|
|
193
|
+
start: node.relationEnd - node.relationName.length,
|
|
194
|
+
end: node.relationEnd,
|
|
195
|
+
});
|
|
196
|
+
// Foreign model fields referenced in conditions
|
|
197
|
+
const foreignModel = modelById.get(relation.modelRef);
|
|
198
|
+
const foreignFieldByName = new Map();
|
|
199
|
+
if (foreignModel) {
|
|
200
|
+
for (const f of foreignModel.model.fields) {
|
|
201
|
+
foreignFieldByName.set(f.name, { id: f.id });
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
for (const condition of node.conditions) {
|
|
205
|
+
// Condition key references a field on the foreign model
|
|
206
|
+
const foreignField = foreignFieldByName.get(condition.field);
|
|
207
|
+
if (foreignField) {
|
|
208
|
+
deps.push({
|
|
209
|
+
entityType: modelScalarFieldEntityType,
|
|
210
|
+
entityId: foreignField.id,
|
|
211
|
+
start: condition.fieldStart,
|
|
212
|
+
end: condition.fieldEnd,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
// Condition value may be a model field ref
|
|
216
|
+
if (condition.value.type === 'fieldRef' &&
|
|
217
|
+
condition.value.source === 'model') {
|
|
218
|
+
const field = fieldByName.get(condition.value.field);
|
|
219
|
+
if (field) {
|
|
220
|
+
deps.push({
|
|
221
|
+
entityType: modelScalarFieldEntityType,
|
|
222
|
+
entityId: field.id,
|
|
223
|
+
start: condition.value.end - condition.value.field.length,
|
|
224
|
+
end: condition.value.end,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
},
|
|
231
|
+
isAuthenticated() {
|
|
232
|
+
// No entity references
|
|
233
|
+
},
|
|
234
|
+
binaryLogical(_node, _ctx, visit) {
|
|
235
|
+
visit(_node.left);
|
|
236
|
+
visit(_node.right);
|
|
237
|
+
},
|
|
238
|
+
};
|
|
239
|
+
visitAuthorizerExpression(parseResult.value.ast, visitor);
|
|
240
|
+
return deps;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Navigate to the raw model object from the definition using resolved slots.
|
|
244
|
+
*
|
|
245
|
+
* Resolved slot paths point to the entity's ID field (e.g., `['models', 2, 'id']`),
|
|
246
|
+
* so we walk parent paths until we find an object with a string `name` property.
|
|
247
|
+
*/
|
|
248
|
+
getRawModel(definition, resolvedSlots) {
|
|
249
|
+
const modelPath = resolvedSlots.model;
|
|
250
|
+
// Walk progressively shorter paths to find the model object.
|
|
251
|
+
// Slot paths include the idPath suffix (e.g., ['models', 2, 'id']),
|
|
252
|
+
// so we try the full path first, then strip segments until we find
|
|
253
|
+
// an object with a name property.
|
|
254
|
+
for (let len = modelPath.length; len > 0; len--) {
|
|
255
|
+
let current = definition;
|
|
256
|
+
for (let i = 0; i < len; i++) {
|
|
257
|
+
if (current === null || current === undefined) {
|
|
258
|
+
break;
|
|
259
|
+
}
|
|
260
|
+
current = current[modelPath[i]];
|
|
261
|
+
}
|
|
262
|
+
if (current !== null &&
|
|
263
|
+
current !== undefined &&
|
|
264
|
+
typeof current === 'object' &&
|
|
265
|
+
'name' in current &&
|
|
266
|
+
typeof current.name === 'string') {
|
|
267
|
+
return current;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
throw new Error(`Could not resolve model at path ${modelPath.join('.')}`);
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Extract model context from the project definition using resolved slots.
|
|
274
|
+
*/
|
|
275
|
+
getModelContext(definition, resolvedSlots) {
|
|
276
|
+
const model = this.getRawModel(definition, resolvedSlots);
|
|
277
|
+
const allModels = definition.models.filter((m) => typeof m.name === 'string');
|
|
278
|
+
return buildModelExpressionContext({
|
|
279
|
+
id: model.id,
|
|
280
|
+
name: model.name,
|
|
281
|
+
fields: model.model.fields,
|
|
282
|
+
model: { relations: model.model.relations },
|
|
283
|
+
}, allModels.map((m) => ({
|
|
284
|
+
id: m.id,
|
|
285
|
+
name: m.name,
|
|
286
|
+
authorizer: m.authorizer,
|
|
287
|
+
fields: m.model.fields,
|
|
288
|
+
model: { relations: m.model.relations },
|
|
289
|
+
})));
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=authorizer-expression-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorizer-expression-parser.js","sourceRoot":"","sources":["../../../src/expression-parsers/authorizer/authorizer-expression-parser.ts"],"names":[],"mappings":"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"}
|
package/dist/{schema/models → expression-parsers}/authorizer/authorizer-expression-validator.d.ts
RENAMED
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import type { PluginSpecStore } from '#src/plugins/index.js';
|
|
10
10
|
import type { RefExpressionWarning } from '#src/references/expression-types.js';
|
|
11
|
-
import type { ModelConfig } from '../models.js';
|
|
12
11
|
import type { AuthorizerExpressionNode } from './authorizer-expression-ast.js';
|
|
13
12
|
/**
|
|
14
13
|
* Information about a model relation for nested authorizer validation.
|
|
@@ -20,6 +19,12 @@ export interface RelationValidationInfo {
|
|
|
20
19
|
foreignModelName: string;
|
|
21
20
|
/** Set of role names defined on the foreign model's authorizer */
|
|
22
21
|
foreignAuthorizerRoleNames: Set<string>;
|
|
22
|
+
/** Scalar field names on the foreign model (for relation filter condition validation) */
|
|
23
|
+
foreignScalarFieldNames?: Set<string>;
|
|
24
|
+
/** Field type map for the foreign model (for type-checking relation filter condition values) */
|
|
25
|
+
foreignFieldTypes?: Map<string, string>;
|
|
26
|
+
/** Whether this is a local relation (FK on this model) or foreign/reverse (FK on the other model) */
|
|
27
|
+
direction: 'local' | 'foreign';
|
|
23
28
|
}
|
|
24
29
|
/**
|
|
25
30
|
* Model information needed for validation.
|
|
@@ -55,20 +60,11 @@ export interface ModelValidationContext {
|
|
|
55
60
|
*/
|
|
56
61
|
export declare function validateAuthorizerExpression(ast: AuthorizerExpressionNode, modelContext: ModelValidationContext, pluginStore: PluginSpecStore, definition: unknown): RefExpressionWarning[];
|
|
57
62
|
/**
|
|
58
|
-
*
|
|
59
|
-
*
|
|
63
|
+
* Shape of a model for expression context building.
|
|
60
64
|
* Uses structural typing so both raw JSON shapes and typed `ModelConfig` objects
|
|
61
65
|
* can be passed directly.
|
|
62
|
-
*
|
|
63
|
-
* @param modelRelations - The relations on the current model
|
|
64
|
-
* @param allModels - All models in the project (for foreign model lookup)
|
|
65
|
-
* @returns Map of relation name → validation info
|
|
66
66
|
*/
|
|
67
|
-
|
|
68
|
-
name: string;
|
|
69
|
-
modelRef: string;
|
|
70
|
-
references: readonly unknown[];
|
|
71
|
-
}[], allModels: readonly {
|
|
67
|
+
interface ExpressionContextModel {
|
|
72
68
|
id?: string;
|
|
73
69
|
name: string;
|
|
74
70
|
authorizer?: {
|
|
@@ -76,12 +72,36 @@ export declare function buildRelationValidationInfo(modelRelations: readonly {
|
|
|
76
72
|
name: string;
|
|
77
73
|
}[];
|
|
78
74
|
};
|
|
79
|
-
|
|
75
|
+
/** Top-level fields (used by raw JSON shapes) */
|
|
76
|
+
fields?: readonly {
|
|
77
|
+
name: string;
|
|
78
|
+
type?: string;
|
|
79
|
+
}[];
|
|
80
|
+
model?: {
|
|
81
|
+
/** Nested fields (used by typed ModelConfig objects) */
|
|
82
|
+
fields?: readonly {
|
|
83
|
+
name: string;
|
|
84
|
+
type?: string;
|
|
85
|
+
}[];
|
|
86
|
+
relations?: readonly {
|
|
87
|
+
name: string;
|
|
88
|
+
modelRef: string;
|
|
89
|
+
foreignRelationName?: string;
|
|
90
|
+
references?: readonly unknown[];
|
|
91
|
+
}[];
|
|
92
|
+
};
|
|
93
|
+
}
|
|
80
94
|
/**
|
|
81
|
-
*
|
|
95
|
+
* Build complete model expression context from a model and all project models.
|
|
96
|
+
*
|
|
97
|
+
* This is the primary entry point for building validation and autocomplete context.
|
|
98
|
+
* It discovers both local relations (FK on this model) and foreign/reverse relations
|
|
99
|
+
* (FK on other models pointing to this model) for use with `hasRole()`, `exists()`, `all()`, etc.
|
|
82
100
|
*
|
|
83
|
-
* @param
|
|
84
|
-
* @
|
|
101
|
+
* @param model - The current model (structural typing: works with both typed ModelConfig and raw JSON)
|
|
102
|
+
* @param allModels - All models in the project
|
|
103
|
+
* @returns Complete model validation context including all relations
|
|
85
104
|
*/
|
|
86
|
-
export declare function
|
|
105
|
+
export declare function buildModelExpressionContext(model: ExpressionContextModel, allModels: readonly ExpressionContextModel[]): ModelValidationContext;
|
|
106
|
+
export {};
|
|
87
107
|
//# sourceMappingURL=authorizer-expression-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorizer-expression-validator.d.ts","sourceRoot":"","sources":["../../../src/expression-parsers/authorizer/authorizer-expression-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAKhF,OAAO,KAAK,EACV,wBAAwB,EAGzB,MAAM,gCAAgC,CAAC;AAKxC;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,iFAAiF;IACjF,cAAc,EAAE,MAAM,CAAC;IACvB,8CAA8C;IAC9C,gBAAgB,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,0BAA0B,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxC,yFAAyF;IACzF,uBAAuB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtC,gGAAgG;IAChG,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,qGAAqG;IACrG,SAAS,EAAE,OAAO,GAAG,SAAS,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,iEAAiE;IACjE,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,qFAAqF;IACrF,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;CACpD;AAyCD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,wBAAwB,EAC7B,YAAY,EAAE,sBAAsB,EACpC,WAAW,EAAE,eAAe,EAC5B,UAAU,EAAE,OAAO,GAClB,oBAAoB,EAAE,CA6SxB;AAED;;;;GAIG;AACH,UAAU,sBAAsB;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,SAAS;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC;IACrD,iDAAiD;IACjD,MAAM,CAAC,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACpD,KAAK,CAAC,EAAE;QACN,wDAAwD;QACxD,MAAM,CAAC,EAAE,SAAS;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QACpD,SAAS,CAAC,EAAE,SAAS;YACnB,IAAI,EAAE,MAAM,CAAC;YACb,QAAQ,EAAE,MAAM,CAAC;YACjB,mBAAmB,CAAC,EAAE,MAAM,CAAC;YAC7B,UAAU,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;SACjC,EAAE,CAAC;KACL,CAAC;CACH;AA2CD;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,sBAAsB,EAC7B,SAAS,EAAE,SAAS,sBAAsB,EAAE,GAC3C,sBAAsB,CAwExB"}
|