@zenstackhq/runtime 3.0.0-alpha.3 → 3.0.0-alpha.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Defines an access policy that allows a set of operations when the given condition is true.
3
+ *
4
+ * @param operation: comma-separated list of "create", "read", "update", "delete". Use "all" to denote all operations.
5
+ * @param condition: a boolean expression that controls if the operation should be allowed.
6
+ */
7
+ attribute @@allow(_ operation: String @@@completionHint(["'create'", "'read'", "'update'", "'delete'", "'all'"]), _ condition: Boolean)
8
+
9
+ /**
10
+ * Defines an access policy that allows the annotated field to be read or updated.
11
+ * You can pass a third argument as `true` to make it override the model-level policies.
12
+ *
13
+ * @param operation: comma-separated list of "create", "read", "update", "delete". Use "all" to denote all operations.
14
+ * @param condition: a boolean expression that controls if the operation should be allowed.
15
+ * @param override: a boolean value that controls if the field-level policy should override the model-level policy.
16
+ */
17
+ attribute @allow(_ operation: String @@@completionHint(["'create'", "'read'", "'update'", "'delete'", "'all'"]), _ condition: Boolean, _ override: Boolean?)
18
+
19
+ /**
20
+ * Defines an access policy that denies a set of operations when the given condition is true.
21
+ *
22
+ * @param operation: comma-separated list of "create", "read", "update", "delete". Use "all" to denote all operations.
23
+ * @param condition: a boolean expression that controls if the operation should be denied.
24
+ */
25
+ attribute @@deny(_ operation: String @@@completionHint(["'create'", "'read'", "'update'", "'delete'", "'all'"]), _ condition: Boolean)
26
+
27
+ /**
28
+ * Defines an access policy that denies the annotated field to be read or updated.
29
+ *
30
+ * @param operation: comma-separated list of "create", "read", "update", "delete". Use "all" to denote all operations.
31
+ * @param condition: a boolean expression that controls if the operation should be denied.
32
+ */
33
+ attribute @deny(_ operation: String @@@completionHint(["'create'", "'read'", "'update'", "'delete'", "'all'"]), _ condition: Boolean)
@@ -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: (\n left: Expression,\n op: BinaryOperator,\n right: Expression\n ): 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(\n (acc, exp) => ExpressionUtils.binary(acc, '&&', exp),\n expr\n );\n },\n\n or: (expr: Expression, ...expressions: Expression[]) => {\n return expressions.reduce(\n (acc, exp) => ExpressionUtils.binary(acc, '||', exp),\n expr\n );\n },\n\n is: (value: unknown, kind: Expression['kind']): value is Expression => {\n return (\n !!value &&\n typeof value === 'object' &&\n 'kind' in value &&\n value.kind === kind\n );\n },\n\n isLiteral: (value: unknown): value is LiteralExpression =>\n ExpressionUtils.is(value, 'literal'),\n\n isArray: (value: unknown): value is ArrayExpression =>\n ExpressionUtils.is(value, 'array'),\n\n isCall: (value: unknown): value is CallExpression =>\n ExpressionUtils.is(value, 'call'),\n\n isNull: (value: unknown): value is NullExpression =>\n ExpressionUtils.is(value, 'null'),\n\n isThis: (value: unknown): value is ThisExpression =>\n ExpressionUtils.is(value, 'this'),\n\n isUnary: (value: unknown): value is UnaryExpression =>\n ExpressionUtils.is(value, 'unary'),\n\n isBinary: (value: unknown): value is BinaryExpression =>\n ExpressionUtils.is(value, 'binary'),\n\n isField: (value: unknown): value is FieldExpression =>\n ExpressionUtils.is(value, 'field'),\n\n isMember: (value: unknown): value is MemberExpression =>\n ExpressionUtils.is(value, 'member'),\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,wBACJC,MACAC,IACAC,UAAAA;AAEA,WAAO;MACHV,MAAM;MACNS;MACAD;MACAE;IACJ;EACJ,GAXQ;EAaRC,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,OACf,CAACC,KAAKC,QAAQ3B,gBAAgBU,OAAOgB,KAAK,MAAMC,GAAAA,GAChDJ,IAAAA;EAER,GALK;EAOLK,IAAI,wBAACL,SAAqBC,gBAAAA;AACtB,WAAOA,YAAYC,OACf,CAACC,KAAKC,QAAQ3B,gBAAgBU,OAAOgB,KAAK,MAAMC,GAAAA,GAChDJ,IAAAA;EAER,GALI;EAOJM,IAAI,wBAAC3B,OAAgBC,SAAAA;AACjB,WACI,CAAC,CAACD,SACF,OAAOA,UAAU,YACjB,UAAUA,SACVA,MAAMC,SAASA;EAEvB,GAPI;EASJ2B,WAAW,wBAAC5B,UACRF,gBAAgB6B,GAAG3B,OAAO,SAAA,GADnB;EAGX6B,SAAS,wBAAC7B,UACNF,gBAAgB6B,GAAG3B,OAAO,OAAA,GADrB;EAGT8B,QAAQ,wBAAC9B,UACLF,gBAAgB6B,GAAG3B,OAAO,MAAA,GADtB;EAGR+B,QAAQ,wBAAC/B,UACLF,gBAAgB6B,GAAG3B,OAAO,MAAA,GADtB;EAGRgC,QAAQ,wBAAChC,UACLF,gBAAgB6B,GAAG3B,OAAO,MAAA,GADtB;EAGRiC,SAAS,wBAACjC,UACNF,gBAAgB6B,GAAG3B,OAAO,OAAA,GADrB;EAGTkC,UAAU,wBAAClC,UACPF,gBAAgB6B,GAAG3B,OAAO,QAAA,GADpB;EAGVmC,SAAS,wBAACnC,UACNF,gBAAgB6B,GAAG3B,OAAO,OAAA,GADrB;EAGToC,UAAU,wBAACpC,UACPF,gBAAgB6B,GAAG3B,OAAO,QAAA,GADpB;AAEd;","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"]}
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"],"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;AACd;","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"]}
@@ -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: (\n left: Expression,\n op: BinaryOperator,\n right: Expression\n ): 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(\n (acc, exp) => ExpressionUtils.binary(acc, '&&', exp),\n expr\n );\n },\n\n or: (expr: Expression, ...expressions: Expression[]) => {\n return expressions.reduce(\n (acc, exp) => ExpressionUtils.binary(acc, '||', exp),\n expr\n );\n },\n\n is: (value: unknown, kind: Expression['kind']): value is Expression => {\n return (\n !!value &&\n typeof value === 'object' &&\n 'kind' in value &&\n value.kind === kind\n );\n },\n\n isLiteral: (value: unknown): value is LiteralExpression =>\n ExpressionUtils.is(value, 'literal'),\n\n isArray: (value: unknown): value is ArrayExpression =>\n ExpressionUtils.is(value, 'array'),\n\n isCall: (value: unknown): value is CallExpression =>\n ExpressionUtils.is(value, 'call'),\n\n isNull: (value: unknown): value is NullExpression =>\n ExpressionUtils.is(value, 'null'),\n\n isThis: (value: unknown): value is ThisExpression =>\n ExpressionUtils.is(value, 'this'),\n\n isUnary: (value: unknown): value is UnaryExpression =>\n ExpressionUtils.is(value, 'unary'),\n\n isBinary: (value: unknown): value is BinaryExpression =>\n ExpressionUtils.is(value, 'binary'),\n\n isField: (value: unknown): value is FieldExpression =>\n ExpressionUtils.is(value, 'field'),\n\n isMember: (value: unknown): value is MemberExpression =>\n ExpressionUtils.is(value, 'member'),\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,wBACJC,MACAC,IACAC,UAAAA;AAEA,WAAO;MACHV,MAAM;MACNS;MACAD;MACAE;IACJ;EACJ,GAXQ;EAaRC,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,OACf,CAACC,KAAKC,QAAQ3B,gBAAgBU,OAAOgB,KAAK,MAAMC,GAAAA,GAChDJ,IAAAA;EAER,GALK;EAOLK,IAAI,wBAACL,SAAqBC,gBAAAA;AACtB,WAAOA,YAAYC,OACf,CAACC,KAAKC,QAAQ3B,gBAAgBU,OAAOgB,KAAK,MAAMC,GAAAA,GAChDJ,IAAAA;EAER,GALI;EAOJM,IAAI,wBAAC3B,OAAgBC,SAAAA;AACjB,WACI,CAAC,CAACD,SACF,OAAOA,UAAU,YACjB,UAAUA,SACVA,MAAMC,SAASA;EAEvB,GAPI;EASJ2B,WAAW,wBAAC5B,UACRF,gBAAgB6B,GAAG3B,OAAO,SAAA,GADnB;EAGX6B,SAAS,wBAAC7B,UACNF,gBAAgB6B,GAAG3B,OAAO,OAAA,GADrB;EAGT8B,QAAQ,wBAAC9B,UACLF,gBAAgB6B,GAAG3B,OAAO,MAAA,GADtB;EAGR+B,QAAQ,wBAAC/B,UACLF,gBAAgB6B,GAAG3B,OAAO,MAAA,GADtB;EAGRgC,QAAQ,wBAAChC,UACLF,gBAAgB6B,GAAG3B,OAAO,MAAA,GADtB;EAGRiC,SAAS,wBAACjC,UACNF,gBAAgB6B,GAAG3B,OAAO,OAAA,GADrB;EAGTkC,UAAU,wBAAClC,UACPF,gBAAgB6B,GAAG3B,OAAO,QAAA,GADpB;EAGVmC,SAAS,wBAACnC,UACNF,gBAAgB6B,GAAG3B,OAAO,OAAA,GADrB;EAGToC,UAAU,wBAACpC,UACPF,gBAAgB6B,GAAG3B,OAAO,QAAA,GADpB;AAEd;","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"]}
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"],"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;AACd;","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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zenstackhq/runtime",
3
- "version": "3.0.0-alpha.3",
3
+ "version": "3.0.0-alpha.30",
4
4
  "description": "ZenStack Runtime",
5
5
  "type": "module",
6
6
  "keywords": [],
@@ -20,16 +20,6 @@
20
20
  "default": "./dist/index.cjs"
21
21
  }
22
22
  },
23
- "./client": {
24
- "import": {
25
- "types": "./dist/client.d.ts",
26
- "default": "./dist/client.js"
27
- },
28
- "require": {
29
- "types": "./dist/client.d.cts",
30
- "default": "./dist/client.cjs"
31
- }
32
- },
33
23
  "./schema": {
34
24
  "import": {
35
25
  "types": "./dist/schema.d.ts",
@@ -40,6 +30,16 @@
40
30
  "default": "./dist/schema.cjs"
41
31
  }
42
32
  },
33
+ "./helpers": {
34
+ "import": {
35
+ "types": "./dist/helpers.d.ts",
36
+ "default": "./dist/helpers.js"
37
+ },
38
+ "require": {
39
+ "types": "./dist/helpers.d.cts",
40
+ "default": "./dist/helpers.cjs"
41
+ }
42
+ },
43
43
  "./plugins/policy": {
44
44
  "import": {
45
45
  "types": "./dist/plugins/policy.d.ts",
@@ -58,20 +58,19 @@
58
58
  "dependencies": {
59
59
  "@paralleldrive/cuid2": "^2.2.2",
60
60
  "decimal.js": "^10.4.3",
61
- "is-plain-object": "^5.0.0",
62
61
  "json-stable-stringify": "^1.3.0",
63
- "kysely": "^0.27.5",
64
62
  "nanoid": "^5.0.9",
65
- "tiny-invariant": "^1.3.3",
66
- "ts-pattern": "^5.6.0",
63
+ "toposort": "^2.0.2",
64
+ "ts-pattern": "^5.7.1",
67
65
  "ulid": "^3.0.0",
68
- "utility-types": "^3.11.0",
69
- "uuid": "^11.0.5"
66
+ "uuid": "^11.0.5",
67
+ "@zenstackhq/common-helpers": "3.0.0-alpha.30"
70
68
  },
71
69
  "peerDependencies": {
72
- "better-sqlite3": "^11.8.1",
70
+ "better-sqlite3": "^12.2.0",
71
+ "kysely": "^0.27.6",
73
72
  "pg": "^8.13.1",
74
- "zod": "^3.0.0"
73
+ "zod": "^3.25.0 || ^4.0.0"
75
74
  },
76
75
  "peerDependenciesMeta": {
77
76
  "better-sqlite3": {
@@ -82,21 +81,24 @@
82
81
  }
83
82
  },
84
83
  "devDependencies": {
85
- "@types/better-sqlite3": "^7.0.0",
84
+ "@types/better-sqlite3": "^7.6.13",
86
85
  "@types/pg": "^8.0.0",
87
- "@types/tmp": "^0.2.6",
88
- "tmp": "^0.2.3",
86
+ "@types/toposort": "^2.0.7",
89
87
  "tsx": "^4.19.2",
90
- "@zenstackhq/language": "3.0.0-alpha.3",
91
- "@zenstackhq/sdk": "3.0.0-alpha.3",
92
- "@zenstackhq/testtools": "3.0.0-alpha.3"
88
+ "zod": "~3.25.0",
89
+ "@zenstackhq/sdk": "3.0.0-alpha.30",
90
+ "@zenstackhq/language": "3.0.0-alpha.30",
91
+ "@zenstackhq/eslint-config": "3.0.0-alpha.30",
92
+ "@zenstackhq/typescript-config": "3.0.0-alpha.30",
93
+ "@zenstackhq/vitest-config": "3.0.0-alpha.30",
94
+ "@zenstackhq/testtools": "3.0.0-alpha.30"
93
95
  },
94
96
  "scripts": {
95
- "build": "tsup-node",
97
+ "build": "tsc --project tsconfig.build.json --noEmit && tsup-node && pnpm test:generate",
96
98
  "watch": "tsup-node --watch",
97
99
  "lint": "eslint src --ext ts",
98
- "test": "vitest && pnpm test:generate && pnpm test:typecheck",
99
- "test:generate": "tsx test/typing/generate.ts",
100
+ "test": "vitest run && pnpm test:typecheck",
101
+ "test:generate": "tsx test/scripts/generate.ts",
100
102
  "test:typecheck": "tsc --project tsconfig.test.json",
101
103
  "pack": "pnpm pack"
102
104
  }