@zenstackhq/runtime 3.0.0-beta.3 → 3.0.0-beta.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.
@@ -31,3 +31,13 @@ attribute @@deny(_ operation: String @@@completionHint(["'create'", "'read'", "'
31
31
  * @param condition: a boolean expression that controls if the operation should be denied.
32
32
  */
33
33
  attribute @deny(_ operation: String @@@completionHint(["'create'", "'read'", "'update'", "'delete'", "'all'"]), _ condition: Boolean)
34
+
35
+ /**
36
+ * Checks if the current user can perform the given operation on the given field.
37
+ *
38
+ * @param field: The field to check access for
39
+ * @param operation: The operation to check access for. Can be "read", "create", "update", or "delete". If the operation is not provided,
40
+ * it defaults the operation of the containing policy rule.
41
+ */
42
+ function check(field: Any, operation: String?): Boolean {
43
+ } @@@expressionContext([AccessPolicy])
package/dist/schema.cjs CHANGED
@@ -90,6 +90,9 @@ var ExpressionUtils = {
90
90
  or: /* @__PURE__ */ __name((expr, ...expressions) => {
91
91
  return expressions.reduce((acc, exp) => ExpressionUtils.binary(acc, "||", exp), expr);
92
92
  }, "or"),
93
+ not: /* @__PURE__ */ __name((expr) => {
94
+ return ExpressionUtils.unary("!", expr);
95
+ }, "not"),
93
96
  is: /* @__PURE__ */ __name((value, kind) => {
94
97
  return !!value && typeof value === "object" && "kind" in value && value.kind === kind;
95
98
  }, "is"),
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/schema/index.ts","../src/schema/expression.ts"],"sourcesContent":["export type * from '@zenstackhq/sdk/schema';\nexport type { OperandExpression } from 'kysely';\nexport * from './expression';\n","import type {\n ArrayExpression,\n BinaryExpression,\n BinaryOperator,\n CallExpression,\n Expression,\n FieldExpression,\n LiteralExpression,\n MemberExpression,\n NullExpression,\n ThisExpression,\n UnaryExpression,\n UnaryOperator,\n} from '.';\n\nexport const ExpressionUtils = {\n literal: (value: string | number | boolean): LiteralExpression => {\n return {\n kind: 'literal',\n value,\n };\n },\n\n array: (items: Expression[]): ArrayExpression => {\n return {\n kind: 'array',\n items,\n };\n },\n\n call: (functionName: string, args?: Expression[]): CallExpression => {\n return {\n kind: 'call',\n function: functionName,\n args,\n };\n },\n\n binary: (left: Expression, op: BinaryOperator, right: Expression): BinaryExpression => {\n return {\n kind: 'binary',\n op,\n left,\n right,\n };\n },\n\n unary: (op: UnaryOperator, operand: Expression): UnaryExpression => {\n return {\n kind: 'unary',\n op,\n operand,\n };\n },\n\n field: (field: string): FieldExpression => {\n return {\n kind: 'field',\n field,\n };\n },\n\n member: (receiver: Expression, members: string[]): MemberExpression => {\n return {\n kind: 'member',\n receiver: receiver,\n members,\n };\n },\n\n _this: (): ThisExpression => {\n return {\n kind: 'this',\n };\n },\n\n _null: (): NullExpression => {\n return {\n kind: 'null',\n };\n },\n\n and: (expr: Expression, ...expressions: Expression[]) => {\n return expressions.reduce((acc, exp) => ExpressionUtils.binary(acc, '&&', exp), expr);\n },\n\n or: (expr: Expression, ...expressions: Expression[]) => {\n return expressions.reduce((acc, exp) => ExpressionUtils.binary(acc, '||', exp), expr);\n },\n\n is: (value: unknown, kind: Expression['kind']): value is Expression => {\n return !!value && typeof value === 'object' && 'kind' in value && value.kind === kind;\n },\n\n isLiteral: (value: unknown): value is LiteralExpression => ExpressionUtils.is(value, 'literal'),\n\n isArray: (value: unknown): value is ArrayExpression => ExpressionUtils.is(value, 'array'),\n\n isCall: (value: unknown): value is CallExpression => ExpressionUtils.is(value, 'call'),\n\n isNull: (value: unknown): value is NullExpression => ExpressionUtils.is(value, 'null'),\n\n isThis: (value: unknown): value is ThisExpression => ExpressionUtils.is(value, 'this'),\n\n isUnary: (value: unknown): value is UnaryExpression => ExpressionUtils.is(value, 'unary'),\n\n isBinary: (value: unknown): value is BinaryExpression => ExpressionUtils.is(value, 'binary'),\n\n isField: (value: unknown): value is FieldExpression => ExpressionUtils.is(value, 'field'),\n\n isMember: (value: unknown): value is MemberExpression => ExpressionUtils.is(value, 'member'),\n\n getLiteralValue: (expr: Expression): string | number | boolean | undefined => {\n return ExpressionUtils.isLiteral(expr) ? expr.value : undefined;\n },\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAEA;;;;;;;ACaO,IAAMA,kBAAkB;EAC3BC,SAAS,wBAACC,UAAAA;AACN,WAAO;MACHC,MAAM;MACND;IACJ;EACJ,GALS;EAOTE,OAAO,wBAACC,UAAAA;AACJ,WAAO;MACHF,MAAM;MACNE;IACJ;EACJ,GALO;EAOPC,MAAM,wBAACC,cAAsBC,SAAAA;AACzB,WAAO;MACHL,MAAM;MACNM,UAAUF;MACVC;IACJ;EACJ,GANM;EAQNE,QAAQ,wBAACC,MAAkBC,IAAoBC,UAAAA;AAC3C,WAAO;MACHV,MAAM;MACNS;MACAD;MACAE;IACJ;EACJ,GAPQ;EASRC,OAAO,wBAACF,IAAmBG,YAAAA;AACvB,WAAO;MACHZ,MAAM;MACNS;MACAG;IACJ;EACJ,GANO;EAQPC,OAAO,wBAACA,UAAAA;AACJ,WAAO;MACHb,MAAM;MACNa;IACJ;EACJ,GALO;EAOPC,QAAQ,wBAACC,UAAsBC,YAAAA;AAC3B,WAAO;MACHhB,MAAM;MACNe;MACAC;IACJ;EACJ,GANQ;EAQRC,OAAO,6BAAA;AACH,WAAO;MACHjB,MAAM;IACV;EACJ,GAJO;EAMPkB,OAAO,6BAAA;AACH,WAAO;MACHlB,MAAM;IACV;EACJ,GAJO;EAMPmB,KAAK,wBAACC,SAAqBC,gBAAAA;AACvB,WAAOA,YAAYC,OAAO,CAACC,KAAKC,QAAQ3B,gBAAgBU,OAAOgB,KAAK,MAAMC,GAAAA,GAAMJ,IAAAA;EACpF,GAFK;EAILK,IAAI,wBAACL,SAAqBC,gBAAAA;AACtB,WAAOA,YAAYC,OAAO,CAACC,KAAKC,QAAQ3B,gBAAgBU,OAAOgB,KAAK,MAAMC,GAAAA,GAAMJ,IAAAA;EACpF,GAFI;EAIJM,IAAI,wBAAC3B,OAAgBC,SAAAA;AACjB,WAAO,CAAC,CAACD,SAAS,OAAOA,UAAU,YAAY,UAAUA,SAASA,MAAMC,SAASA;EACrF,GAFI;EAIJ2B,WAAW,wBAAC5B,UAA+CF,gBAAgB6B,GAAG3B,OAAO,SAAA,GAA1E;EAEX6B,SAAS,wBAAC7B,UAA6CF,gBAAgB6B,GAAG3B,OAAO,OAAA,GAAxE;EAET8B,QAAQ,wBAAC9B,UAA4CF,gBAAgB6B,GAAG3B,OAAO,MAAA,GAAvE;EAER+B,QAAQ,wBAAC/B,UAA4CF,gBAAgB6B,GAAG3B,OAAO,MAAA,GAAvE;EAERgC,QAAQ,wBAAChC,UAA4CF,gBAAgB6B,GAAG3B,OAAO,MAAA,GAAvE;EAERiC,SAAS,wBAACjC,UAA6CF,gBAAgB6B,GAAG3B,OAAO,OAAA,GAAxE;EAETkC,UAAU,wBAAClC,UAA8CF,gBAAgB6B,GAAG3B,OAAO,QAAA,GAAzE;EAEVmC,SAAS,wBAACnC,UAA6CF,gBAAgB6B,GAAG3B,OAAO,OAAA,GAAxE;EAEToC,UAAU,wBAACpC,UAA8CF,gBAAgB6B,GAAG3B,OAAO,QAAA,GAAzE;EAEVqC,iBAAiB,wBAAChB,SAAAA;AACd,WAAOvB,gBAAgB8B,UAAUP,IAAAA,IAAQA,KAAKrB,QAAQsC;EAC1D,GAFiB;AAGrB;","names":["ExpressionUtils","literal","value","kind","array","items","call","functionName","args","function","binary","left","op","right","unary","operand","field","member","receiver","members","_this","_null","and","expr","expressions","reduce","acc","exp","or","is","isLiteral","isArray","isCall","isNull","isThis","isUnary","isBinary","isField","isMember","getLiteralValue","undefined"]}
1
+ {"version":3,"sources":["../src/schema/index.ts","../src/schema/expression.ts"],"sourcesContent":["export type * from '@zenstackhq/sdk/schema';\nexport type { OperandExpression } from 'kysely';\nexport * from './expression';\n","import type {\n ArrayExpression,\n BinaryExpression,\n BinaryOperator,\n CallExpression,\n Expression,\n FieldExpression,\n LiteralExpression,\n MemberExpression,\n NullExpression,\n ThisExpression,\n UnaryExpression,\n UnaryOperator,\n} from '.';\n\nexport const ExpressionUtils = {\n literal: (value: string | number | boolean): LiteralExpression => {\n return {\n kind: 'literal',\n value,\n };\n },\n\n array: (items: Expression[]): ArrayExpression => {\n return {\n kind: 'array',\n items,\n };\n },\n\n call: (functionName: string, args?: Expression[]): CallExpression => {\n return {\n kind: 'call',\n function: functionName,\n args,\n };\n },\n\n binary: (left: Expression, op: BinaryOperator, right: Expression): BinaryExpression => {\n return {\n kind: 'binary',\n op,\n left,\n right,\n };\n },\n\n unary: (op: UnaryOperator, operand: Expression): UnaryExpression => {\n return {\n kind: 'unary',\n op,\n operand,\n };\n },\n\n field: (field: string): FieldExpression => {\n return {\n kind: 'field',\n field,\n };\n },\n\n member: (receiver: Expression, members: string[]): MemberExpression => {\n return {\n kind: 'member',\n receiver: receiver,\n members,\n };\n },\n\n _this: (): ThisExpression => {\n return {\n kind: 'this',\n };\n },\n\n _null: (): NullExpression => {\n return {\n kind: 'null',\n };\n },\n\n and: (expr: Expression, ...expressions: Expression[]) => {\n return expressions.reduce((acc, exp) => ExpressionUtils.binary(acc, '&&', exp), expr);\n },\n\n or: (expr: Expression, ...expressions: Expression[]) => {\n return expressions.reduce((acc, exp) => ExpressionUtils.binary(acc, '||', exp), expr);\n },\n\n not: (expr: Expression) => {\n return ExpressionUtils.unary('!', expr);\n },\n\n is: (value: unknown, kind: Expression['kind']): value is Expression => {\n return !!value && typeof value === 'object' && 'kind' in value && value.kind === kind;\n },\n\n isLiteral: (value: unknown): value is LiteralExpression => ExpressionUtils.is(value, 'literal'),\n\n isArray: (value: unknown): value is ArrayExpression => ExpressionUtils.is(value, 'array'),\n\n isCall: (value: unknown): value is CallExpression => ExpressionUtils.is(value, 'call'),\n\n isNull: (value: unknown): value is NullExpression => ExpressionUtils.is(value, 'null'),\n\n isThis: (value: unknown): value is ThisExpression => ExpressionUtils.is(value, 'this'),\n\n isUnary: (value: unknown): value is UnaryExpression => ExpressionUtils.is(value, 'unary'),\n\n isBinary: (value: unknown): value is BinaryExpression => ExpressionUtils.is(value, 'binary'),\n\n isField: (value: unknown): value is FieldExpression => ExpressionUtils.is(value, 'field'),\n\n isMember: (value: unknown): value is MemberExpression => ExpressionUtils.is(value, 'member'),\n\n getLiteralValue: (expr: Expression): string | number | boolean | undefined => {\n return ExpressionUtils.isLiteral(expr) ? expr.value : undefined;\n },\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAEA;;;;;;;ACaO,IAAMA,kBAAkB;EAC3BC,SAAS,wBAACC,UAAAA;AACN,WAAO;MACHC,MAAM;MACND;IACJ;EACJ,GALS;EAOTE,OAAO,wBAACC,UAAAA;AACJ,WAAO;MACHF,MAAM;MACNE;IACJ;EACJ,GALO;EAOPC,MAAM,wBAACC,cAAsBC,SAAAA;AACzB,WAAO;MACHL,MAAM;MACNM,UAAUF;MACVC;IACJ;EACJ,GANM;EAQNE,QAAQ,wBAACC,MAAkBC,IAAoBC,UAAAA;AAC3C,WAAO;MACHV,MAAM;MACNS;MACAD;MACAE;IACJ;EACJ,GAPQ;EASRC,OAAO,wBAACF,IAAmBG,YAAAA;AACvB,WAAO;MACHZ,MAAM;MACNS;MACAG;IACJ;EACJ,GANO;EAQPC,OAAO,wBAACA,UAAAA;AACJ,WAAO;MACHb,MAAM;MACNa;IACJ;EACJ,GALO;EAOPC,QAAQ,wBAACC,UAAsBC,YAAAA;AAC3B,WAAO;MACHhB,MAAM;MACNe;MACAC;IACJ;EACJ,GANQ;EAQRC,OAAO,6BAAA;AACH,WAAO;MACHjB,MAAM;IACV;EACJ,GAJO;EAMPkB,OAAO,6BAAA;AACH,WAAO;MACHlB,MAAM;IACV;EACJ,GAJO;EAMPmB,KAAK,wBAACC,SAAqBC,gBAAAA;AACvB,WAAOA,YAAYC,OAAO,CAACC,KAAKC,QAAQ3B,gBAAgBU,OAAOgB,KAAK,MAAMC,GAAAA,GAAMJ,IAAAA;EACpF,GAFK;EAILK,IAAI,wBAACL,SAAqBC,gBAAAA;AACtB,WAAOA,YAAYC,OAAO,CAACC,KAAKC,QAAQ3B,gBAAgBU,OAAOgB,KAAK,MAAMC,GAAAA,GAAMJ,IAAAA;EACpF,GAFI;EAIJM,KAAK,wBAACN,SAAAA;AACF,WAAOvB,gBAAgBc,MAAM,KAAKS,IAAAA;EACtC,GAFK;EAILO,IAAI,wBAAC5B,OAAgBC,SAAAA;AACjB,WAAO,CAAC,CAACD,SAAS,OAAOA,UAAU,YAAY,UAAUA,SAASA,MAAMC,SAASA;EACrF,GAFI;EAIJ4B,WAAW,wBAAC7B,UAA+CF,gBAAgB8B,GAAG5B,OAAO,SAAA,GAA1E;EAEX8B,SAAS,wBAAC9B,UAA6CF,gBAAgB8B,GAAG5B,OAAO,OAAA,GAAxE;EAET+B,QAAQ,wBAAC/B,UAA4CF,gBAAgB8B,GAAG5B,OAAO,MAAA,GAAvE;EAERgC,QAAQ,wBAAChC,UAA4CF,gBAAgB8B,GAAG5B,OAAO,MAAA,GAAvE;EAERiC,QAAQ,wBAACjC,UAA4CF,gBAAgB8B,GAAG5B,OAAO,MAAA,GAAvE;EAERkC,SAAS,wBAAClC,UAA6CF,gBAAgB8B,GAAG5B,OAAO,OAAA,GAAxE;EAETmC,UAAU,wBAACnC,UAA8CF,gBAAgB8B,GAAG5B,OAAO,QAAA,GAAzE;EAEVoC,SAAS,wBAACpC,UAA6CF,gBAAgB8B,GAAG5B,OAAO,OAAA,GAAxE;EAETqC,UAAU,wBAACrC,UAA8CF,gBAAgB8B,GAAG5B,OAAO,QAAA,GAAzE;EAEVsC,iBAAiB,wBAACjB,SAAAA;AACd,WAAOvB,gBAAgB+B,UAAUR,IAAAA,IAAQA,KAAKrB,QAAQuC;EAC1D,GAFiB;AAGrB;","names":["ExpressionUtils","literal","value","kind","array","items","call","functionName","args","function","binary","left","op","right","unary","operand","field","member","receiver","members","_this","_null","and","expr","expressions","reduce","acc","exp","or","not","is","isLiteral","isArray","isCall","isNull","isThis","isUnary","isBinary","isField","isMember","getLiteralValue","undefined"]}
package/dist/schema.d.cts CHANGED
@@ -14,6 +14,7 @@ declare const ExpressionUtils: {
14
14
  _null: () => NullExpression;
15
15
  and: (expr: Expression, ...expressions: Expression[]) => Expression;
16
16
  or: (expr: Expression, ...expressions: Expression[]) => Expression;
17
+ not: (expr: Expression) => UnaryExpression;
17
18
  is: (value: unknown, kind: Expression["kind"]) => value is Expression;
18
19
  isLiteral: (value: unknown) => value is LiteralExpression;
19
20
  isArray: (value: unknown) => value is ArrayExpression;
package/dist/schema.d.ts CHANGED
@@ -14,6 +14,7 @@ declare const ExpressionUtils: {
14
14
  _null: () => NullExpression;
15
15
  and: (expr: Expression, ...expressions: Expression[]) => Expression;
16
16
  or: (expr: Expression, ...expressions: Expression[]) => Expression;
17
+ not: (expr: Expression) => UnaryExpression;
17
18
  is: (value: unknown, kind: Expression["kind"]) => value is Expression;
18
19
  isLiteral: (value: unknown) => value is LiteralExpression;
19
20
  isArray: (value: unknown) => value is ArrayExpression;
package/dist/schema.js CHANGED
@@ -66,6 +66,9 @@ var ExpressionUtils = {
66
66
  or: /* @__PURE__ */ __name((expr, ...expressions) => {
67
67
  return expressions.reduce((acc, exp) => ExpressionUtils.binary(acc, "||", exp), expr);
68
68
  }, "or"),
69
+ not: /* @__PURE__ */ __name((expr) => {
70
+ return ExpressionUtils.unary("!", expr);
71
+ }, "not"),
69
72
  is: /* @__PURE__ */ __name((value, kind) => {
70
73
  return !!value && typeof value === "object" && "kind" in value && value.kind === kind;
71
74
  }, "is"),
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/schema/expression.ts"],"sourcesContent":["import type {\n ArrayExpression,\n BinaryExpression,\n BinaryOperator,\n CallExpression,\n Expression,\n FieldExpression,\n LiteralExpression,\n MemberExpression,\n NullExpression,\n ThisExpression,\n UnaryExpression,\n UnaryOperator,\n} from '.';\n\nexport const ExpressionUtils = {\n literal: (value: string | number | boolean): LiteralExpression => {\n return {\n kind: 'literal',\n value,\n };\n },\n\n array: (items: Expression[]): ArrayExpression => {\n return {\n kind: 'array',\n items,\n };\n },\n\n call: (functionName: string, args?: Expression[]): CallExpression => {\n return {\n kind: 'call',\n function: functionName,\n args,\n };\n },\n\n binary: (left: Expression, op: BinaryOperator, right: Expression): BinaryExpression => {\n return {\n kind: 'binary',\n op,\n left,\n right,\n };\n },\n\n unary: (op: UnaryOperator, operand: Expression): UnaryExpression => {\n return {\n kind: 'unary',\n op,\n operand,\n };\n },\n\n field: (field: string): FieldExpression => {\n return {\n kind: 'field',\n field,\n };\n },\n\n member: (receiver: Expression, members: string[]): MemberExpression => {\n return {\n kind: 'member',\n receiver: receiver,\n members,\n };\n },\n\n _this: (): ThisExpression => {\n return {\n kind: 'this',\n };\n },\n\n _null: (): NullExpression => {\n return {\n kind: 'null',\n };\n },\n\n and: (expr: Expression, ...expressions: Expression[]) => {\n return expressions.reduce((acc, exp) => ExpressionUtils.binary(acc, '&&', exp), expr);\n },\n\n or: (expr: Expression, ...expressions: Expression[]) => {\n return expressions.reduce((acc, exp) => ExpressionUtils.binary(acc, '||', exp), expr);\n },\n\n is: (value: unknown, kind: Expression['kind']): value is Expression => {\n return !!value && typeof value === 'object' && 'kind' in value && value.kind === kind;\n },\n\n isLiteral: (value: unknown): value is LiteralExpression => ExpressionUtils.is(value, 'literal'),\n\n isArray: (value: unknown): value is ArrayExpression => ExpressionUtils.is(value, 'array'),\n\n isCall: (value: unknown): value is CallExpression => ExpressionUtils.is(value, 'call'),\n\n isNull: (value: unknown): value is NullExpression => ExpressionUtils.is(value, 'null'),\n\n isThis: (value: unknown): value is ThisExpression => ExpressionUtils.is(value, 'this'),\n\n isUnary: (value: unknown): value is UnaryExpression => ExpressionUtils.is(value, 'unary'),\n\n isBinary: (value: unknown): value is BinaryExpression => ExpressionUtils.is(value, 'binary'),\n\n isField: (value: unknown): value is FieldExpression => ExpressionUtils.is(value, 'field'),\n\n isMember: (value: unknown): value is MemberExpression => ExpressionUtils.is(value, 'member'),\n\n getLiteralValue: (expr: Expression): string | number | boolean | undefined => {\n return ExpressionUtils.isLiteral(expr) ? expr.value : undefined;\n },\n};\n"],"mappings":";;;;AAeO,IAAMA,kBAAkB;EAC3BC,SAAS,wBAACC,UAAAA;AACN,WAAO;MACHC,MAAM;MACND;IACJ;EACJ,GALS;EAOTE,OAAO,wBAACC,UAAAA;AACJ,WAAO;MACHF,MAAM;MACNE;IACJ;EACJ,GALO;EAOPC,MAAM,wBAACC,cAAsBC,SAAAA;AACzB,WAAO;MACHL,MAAM;MACNM,UAAUF;MACVC;IACJ;EACJ,GANM;EAQNE,QAAQ,wBAACC,MAAkBC,IAAoBC,UAAAA;AAC3C,WAAO;MACHV,MAAM;MACNS;MACAD;MACAE;IACJ;EACJ,GAPQ;EASRC,OAAO,wBAACF,IAAmBG,YAAAA;AACvB,WAAO;MACHZ,MAAM;MACNS;MACAG;IACJ;EACJ,GANO;EAQPC,OAAO,wBAACA,UAAAA;AACJ,WAAO;MACHb,MAAM;MACNa;IACJ;EACJ,GALO;EAOPC,QAAQ,wBAACC,UAAsBC,YAAAA;AAC3B,WAAO;MACHhB,MAAM;MACNe;MACAC;IACJ;EACJ,GANQ;EAQRC,OAAO,6BAAA;AACH,WAAO;MACHjB,MAAM;IACV;EACJ,GAJO;EAMPkB,OAAO,6BAAA;AACH,WAAO;MACHlB,MAAM;IACV;EACJ,GAJO;EAMPmB,KAAK,wBAACC,SAAqBC,gBAAAA;AACvB,WAAOA,YAAYC,OAAO,CAACC,KAAKC,QAAQ3B,gBAAgBU,OAAOgB,KAAK,MAAMC,GAAAA,GAAMJ,IAAAA;EACpF,GAFK;EAILK,IAAI,wBAACL,SAAqBC,gBAAAA;AACtB,WAAOA,YAAYC,OAAO,CAACC,KAAKC,QAAQ3B,gBAAgBU,OAAOgB,KAAK,MAAMC,GAAAA,GAAMJ,IAAAA;EACpF,GAFI;EAIJM,IAAI,wBAAC3B,OAAgBC,SAAAA;AACjB,WAAO,CAAC,CAACD,SAAS,OAAOA,UAAU,YAAY,UAAUA,SAASA,MAAMC,SAASA;EACrF,GAFI;EAIJ2B,WAAW,wBAAC5B,UAA+CF,gBAAgB6B,GAAG3B,OAAO,SAAA,GAA1E;EAEX6B,SAAS,wBAAC7B,UAA6CF,gBAAgB6B,GAAG3B,OAAO,OAAA,GAAxE;EAET8B,QAAQ,wBAAC9B,UAA4CF,gBAAgB6B,GAAG3B,OAAO,MAAA,GAAvE;EAER+B,QAAQ,wBAAC/B,UAA4CF,gBAAgB6B,GAAG3B,OAAO,MAAA,GAAvE;EAERgC,QAAQ,wBAAChC,UAA4CF,gBAAgB6B,GAAG3B,OAAO,MAAA,GAAvE;EAERiC,SAAS,wBAACjC,UAA6CF,gBAAgB6B,GAAG3B,OAAO,OAAA,GAAxE;EAETkC,UAAU,wBAAClC,UAA8CF,gBAAgB6B,GAAG3B,OAAO,QAAA,GAAzE;EAEVmC,SAAS,wBAACnC,UAA6CF,gBAAgB6B,GAAG3B,OAAO,OAAA,GAAxE;EAEToC,UAAU,wBAACpC,UAA8CF,gBAAgB6B,GAAG3B,OAAO,QAAA,GAAzE;EAEVqC,iBAAiB,wBAAChB,SAAAA;AACd,WAAOvB,gBAAgB8B,UAAUP,IAAAA,IAAQA,KAAKrB,QAAQsC;EAC1D,GAFiB;AAGrB;","names":["ExpressionUtils","literal","value","kind","array","items","call","functionName","args","function","binary","left","op","right","unary","operand","field","member","receiver","members","_this","_null","and","expr","expressions","reduce","acc","exp","or","is","isLiteral","isArray","isCall","isNull","isThis","isUnary","isBinary","isField","isMember","getLiteralValue","undefined"]}
1
+ {"version":3,"sources":["../src/schema/expression.ts"],"sourcesContent":["import type {\n ArrayExpression,\n BinaryExpression,\n BinaryOperator,\n CallExpression,\n Expression,\n FieldExpression,\n LiteralExpression,\n MemberExpression,\n NullExpression,\n ThisExpression,\n UnaryExpression,\n UnaryOperator,\n} from '.';\n\nexport const ExpressionUtils = {\n literal: (value: string | number | boolean): LiteralExpression => {\n return {\n kind: 'literal',\n value,\n };\n },\n\n array: (items: Expression[]): ArrayExpression => {\n return {\n kind: 'array',\n items,\n };\n },\n\n call: (functionName: string, args?: Expression[]): CallExpression => {\n return {\n kind: 'call',\n function: functionName,\n args,\n };\n },\n\n binary: (left: Expression, op: BinaryOperator, right: Expression): BinaryExpression => {\n return {\n kind: 'binary',\n op,\n left,\n right,\n };\n },\n\n unary: (op: UnaryOperator, operand: Expression): UnaryExpression => {\n return {\n kind: 'unary',\n op,\n operand,\n };\n },\n\n field: (field: string): FieldExpression => {\n return {\n kind: 'field',\n field,\n };\n },\n\n member: (receiver: Expression, members: string[]): MemberExpression => {\n return {\n kind: 'member',\n receiver: receiver,\n members,\n };\n },\n\n _this: (): ThisExpression => {\n return {\n kind: 'this',\n };\n },\n\n _null: (): NullExpression => {\n return {\n kind: 'null',\n };\n },\n\n and: (expr: Expression, ...expressions: Expression[]) => {\n return expressions.reduce((acc, exp) => ExpressionUtils.binary(acc, '&&', exp), expr);\n },\n\n or: (expr: Expression, ...expressions: Expression[]) => {\n return expressions.reduce((acc, exp) => ExpressionUtils.binary(acc, '||', exp), expr);\n },\n\n not: (expr: Expression) => {\n return ExpressionUtils.unary('!', expr);\n },\n\n is: (value: unknown, kind: Expression['kind']): value is Expression => {\n return !!value && typeof value === 'object' && 'kind' in value && value.kind === kind;\n },\n\n isLiteral: (value: unknown): value is LiteralExpression => ExpressionUtils.is(value, 'literal'),\n\n isArray: (value: unknown): value is ArrayExpression => ExpressionUtils.is(value, 'array'),\n\n isCall: (value: unknown): value is CallExpression => ExpressionUtils.is(value, 'call'),\n\n isNull: (value: unknown): value is NullExpression => ExpressionUtils.is(value, 'null'),\n\n isThis: (value: unknown): value is ThisExpression => ExpressionUtils.is(value, 'this'),\n\n isUnary: (value: unknown): value is UnaryExpression => ExpressionUtils.is(value, 'unary'),\n\n isBinary: (value: unknown): value is BinaryExpression => ExpressionUtils.is(value, 'binary'),\n\n isField: (value: unknown): value is FieldExpression => ExpressionUtils.is(value, 'field'),\n\n isMember: (value: unknown): value is MemberExpression => ExpressionUtils.is(value, 'member'),\n\n getLiteralValue: (expr: Expression): string | number | boolean | undefined => {\n return ExpressionUtils.isLiteral(expr) ? expr.value : undefined;\n },\n};\n"],"mappings":";;;;AAeO,IAAMA,kBAAkB;EAC3BC,SAAS,wBAACC,UAAAA;AACN,WAAO;MACHC,MAAM;MACND;IACJ;EACJ,GALS;EAOTE,OAAO,wBAACC,UAAAA;AACJ,WAAO;MACHF,MAAM;MACNE;IACJ;EACJ,GALO;EAOPC,MAAM,wBAACC,cAAsBC,SAAAA;AACzB,WAAO;MACHL,MAAM;MACNM,UAAUF;MACVC;IACJ;EACJ,GANM;EAQNE,QAAQ,wBAACC,MAAkBC,IAAoBC,UAAAA;AAC3C,WAAO;MACHV,MAAM;MACNS;MACAD;MACAE;IACJ;EACJ,GAPQ;EASRC,OAAO,wBAACF,IAAmBG,YAAAA;AACvB,WAAO;MACHZ,MAAM;MACNS;MACAG;IACJ;EACJ,GANO;EAQPC,OAAO,wBAACA,UAAAA;AACJ,WAAO;MACHb,MAAM;MACNa;IACJ;EACJ,GALO;EAOPC,QAAQ,wBAACC,UAAsBC,YAAAA;AAC3B,WAAO;MACHhB,MAAM;MACNe;MACAC;IACJ;EACJ,GANQ;EAQRC,OAAO,6BAAA;AACH,WAAO;MACHjB,MAAM;IACV;EACJ,GAJO;EAMPkB,OAAO,6BAAA;AACH,WAAO;MACHlB,MAAM;IACV;EACJ,GAJO;EAMPmB,KAAK,wBAACC,SAAqBC,gBAAAA;AACvB,WAAOA,YAAYC,OAAO,CAACC,KAAKC,QAAQ3B,gBAAgBU,OAAOgB,KAAK,MAAMC,GAAAA,GAAMJ,IAAAA;EACpF,GAFK;EAILK,IAAI,wBAACL,SAAqBC,gBAAAA;AACtB,WAAOA,YAAYC,OAAO,CAACC,KAAKC,QAAQ3B,gBAAgBU,OAAOgB,KAAK,MAAMC,GAAAA,GAAMJ,IAAAA;EACpF,GAFI;EAIJM,KAAK,wBAACN,SAAAA;AACF,WAAOvB,gBAAgBc,MAAM,KAAKS,IAAAA;EACtC,GAFK;EAILO,IAAI,wBAAC5B,OAAgBC,SAAAA;AACjB,WAAO,CAAC,CAACD,SAAS,OAAOA,UAAU,YAAY,UAAUA,SAASA,MAAMC,SAASA;EACrF,GAFI;EAIJ4B,WAAW,wBAAC7B,UAA+CF,gBAAgB8B,GAAG5B,OAAO,SAAA,GAA1E;EAEX8B,SAAS,wBAAC9B,UAA6CF,gBAAgB8B,GAAG5B,OAAO,OAAA,GAAxE;EAET+B,QAAQ,wBAAC/B,UAA4CF,gBAAgB8B,GAAG5B,OAAO,MAAA,GAAvE;EAERgC,QAAQ,wBAAChC,UAA4CF,gBAAgB8B,GAAG5B,OAAO,MAAA,GAAvE;EAERiC,QAAQ,wBAACjC,UAA4CF,gBAAgB8B,GAAG5B,OAAO,MAAA,GAAvE;EAERkC,SAAS,wBAAClC,UAA6CF,gBAAgB8B,GAAG5B,OAAO,OAAA,GAAxE;EAETmC,UAAU,wBAACnC,UAA8CF,gBAAgB8B,GAAG5B,OAAO,QAAA,GAAzE;EAEVoC,SAAS,wBAACpC,UAA6CF,gBAAgB8B,GAAG5B,OAAO,OAAA,GAAxE;EAETqC,UAAU,wBAACrC,UAA8CF,gBAAgB8B,GAAG5B,OAAO,QAAA,GAAzE;EAEVsC,iBAAiB,wBAACjB,SAAAA;AACd,WAAOvB,gBAAgB+B,UAAUR,IAAAA,IAAQA,KAAKrB,QAAQuC;EAC1D,GAFiB;AAGrB;","names":["ExpressionUtils","literal","value","kind","array","items","call","functionName","args","function","binary","left","op","right","unary","operand","field","member","receiver","members","_this","_null","and","expr","expressions","reduce","acc","exp","or","not","is","isLiteral","isArray","isCall","isNull","isThis","isUnary","isBinary","isField","isMember","getLiteralValue","undefined"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zenstackhq/runtime",
3
- "version": "3.0.0-beta.3",
3
+ "version": "3.0.0-beta.5",
4
4
  "description": "ZenStack Runtime",
5
5
  "type": "module",
6
6
  "keywords": [],
@@ -64,7 +64,8 @@
64
64
  "ts-pattern": "^5.7.1",
65
65
  "ulid": "^3.0.0",
66
66
  "uuid": "^11.0.5",
67
- "@zenstackhq/common-helpers": "3.0.0-beta.3"
67
+ "zod-validation-error": "^4.0.1",
68
+ "@zenstackhq/common-helpers": "3.0.0-beta.5"
68
69
  },
69
70
  "peerDependencies": {
70
71
  "better-sqlite3": "^12.2.0",
@@ -86,18 +87,20 @@
86
87
  "@types/toposort": "^2.0.7",
87
88
  "tsx": "^4.19.2",
88
89
  "zod": "~3.25.0",
89
- "@zenstackhq/eslint-config": "3.0.0-beta.3",
90
- "@zenstackhq/sdk": "3.0.0-beta.3",
91
- "@zenstackhq/language": "3.0.0-beta.3",
92
- "@zenstackhq/testtools": "3.0.0-beta.3",
93
- "@zenstackhq/vitest-config": "3.0.0-beta.3",
94
- "@zenstackhq/typescript-config": "3.0.0-beta.3"
90
+ "@zenstackhq/eslint-config": "3.0.0-beta.5",
91
+ "@zenstackhq/language": "3.0.0-beta.5",
92
+ "@zenstackhq/testtools": "3.0.0-beta.5",
93
+ "@zenstackhq/sdk": "3.0.0-beta.5",
94
+ "@zenstackhq/vitest-config": "3.0.0-beta.5",
95
+ "@zenstackhq/typescript-config": "3.0.0-beta.5"
95
96
  },
96
97
  "scripts": {
97
98
  "build": "tsc --project tsconfig.build.json --noEmit && tsup-node && pnpm test:generate",
98
99
  "watch": "tsup-node --watch",
99
100
  "lint": "eslint src --ext ts",
100
101
  "test": "vitest run && pnpm test:typecheck",
102
+ "test:sqlite": "TEST_DB_PROVIDER=sqlite vitest run",
103
+ "test:postgresql": "TEST_DB_PROVIDER=postgresql vitest run",
101
104
  "test:generate": "tsx test/scripts/generate.ts",
102
105
  "test:typecheck": "tsc --project tsconfig.test.json",
103
106
  "pack": "pnpm pack"