over-zero 0.0.33 → 0.0.35

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 (70) hide show
  1. package/dist/cjs/cli.cjs +38 -57
  2. package/dist/cjs/cli.js +38 -54
  3. package/dist/cjs/cli.js.map +1 -1
  4. package/dist/cjs/cli.native.js +42 -69
  5. package/dist/cjs/cli.native.js.map +1 -1
  6. package/dist/cjs/createUseQuery.cjs +72 -0
  7. package/dist/cjs/createUseQuery.js +46 -0
  8. package/dist/cjs/createUseQuery.js.map +6 -0
  9. package/dist/cjs/createUseQuery.native.js +88 -0
  10. package/dist/cjs/createUseQuery.native.js.map +1 -0
  11. package/dist/cjs/createZeroClient.cjs +10 -36
  12. package/dist/cjs/createZeroClient.js +8 -18
  13. package/dist/cjs/createZeroClient.js.map +2 -2
  14. package/dist/cjs/createZeroClient.native.js +9 -47
  15. package/dist/cjs/createZeroClient.native.js.map +1 -1
  16. package/dist/cjs/createZeroServer.cjs +5 -4
  17. package/dist/cjs/createZeroServer.js +8 -3
  18. package/dist/cjs/createZeroServer.js.map +1 -1
  19. package/dist/cjs/createZeroServer.native.js +39 -5
  20. package/dist/cjs/createZeroServer.native.js.map +1 -1
  21. package/dist/cjs/index.cjs +1 -0
  22. package/dist/cjs/index.js +1 -0
  23. package/dist/cjs/index.js.map +1 -1
  24. package/dist/cjs/index.native.js +1 -0
  25. package/dist/cjs/index.native.js.map +1 -1
  26. package/dist/esm/cli.js +38 -54
  27. package/dist/esm/cli.js.map +1 -1
  28. package/dist/esm/cli.mjs +38 -57
  29. package/dist/esm/cli.mjs.map +1 -1
  30. package/dist/esm/cli.native.js +42 -69
  31. package/dist/esm/cli.native.js.map +1 -1
  32. package/dist/esm/createUseQuery.js +34 -0
  33. package/dist/esm/createUseQuery.js.map +6 -0
  34. package/dist/esm/createUseQuery.mjs +49 -0
  35. package/dist/esm/createUseQuery.mjs.map +1 -0
  36. package/dist/esm/createUseQuery.native.js +62 -0
  37. package/dist/esm/createUseQuery.native.js.map +1 -0
  38. package/dist/esm/createZeroClient.js +10 -21
  39. package/dist/esm/createZeroClient.js.map +1 -1
  40. package/dist/esm/createZeroClient.mjs +11 -37
  41. package/dist/esm/createZeroClient.mjs.map +1 -1
  42. package/dist/esm/createZeroClient.native.js +11 -49
  43. package/dist/esm/createZeroClient.native.js.map +1 -1
  44. package/dist/esm/createZeroServer.js +8 -3
  45. package/dist/esm/createZeroServer.js.map +1 -1
  46. package/dist/esm/createZeroServer.mjs +5 -4
  47. package/dist/esm/createZeroServer.mjs.map +1 -1
  48. package/dist/esm/createZeroServer.native.js +39 -5
  49. package/dist/esm/createZeroServer.native.js.map +1 -1
  50. package/dist/esm/index.js +1 -0
  51. package/dist/esm/index.js.map +1 -1
  52. package/dist/esm/index.mjs +1 -0
  53. package/dist/esm/index.mjs.map +1 -1
  54. package/dist/esm/index.native.js +1 -0
  55. package/dist/esm/index.native.js.map +1 -1
  56. package/package.json +1 -1
  57. package/readme.md +23 -0
  58. package/src/cli.ts +79 -102
  59. package/src/createUseQuery.tsx +141 -0
  60. package/src/createZeroClient.tsx +21 -119
  61. package/src/createZeroServer.ts +16 -7
  62. package/src/index.ts +1 -0
  63. package/types/createUseQuery.d.ts +22 -0
  64. package/types/createUseQuery.d.ts.map +1 -0
  65. package/types/createZeroClient.d.ts +6 -18
  66. package/types/createZeroClient.d.ts.map +1 -1
  67. package/types/createZeroServer.d.ts +3 -3
  68. package/types/createZeroServer.d.ts.map +1 -1
  69. package/types/index.d.ts +1 -0
  70. package/types/index.d.ts.map +1 -1
@@ -1,11 +1,12 @@
1
1
  import { type ReactNode } from 'react';
2
2
  import type { AuthData, GenericModels, GetZeroMutators, ZeroEvent } from './types';
3
- import type { HumanReadable, Query, Row, SyncedQuery, Zero, ZeroOptions, Schema as ZeroSchema } from '@rocicorp/zero';
4
- export type ClientQueries = Record<string, Record<string, (...args: any[]) => any>>;
5
- export declare function createZeroClient<Schema extends ZeroSchema, Models extends GenericModels>({ schema, models, clientQueries, }: {
3
+ import type { Row, Zero, ZeroOptions, Schema as ZeroSchema } from '@rocicorp/zero';
4
+ export type GroupedQueries = Record<string, Record<string, (...args: any[]) => any>>;
5
+ export declare function createZeroClient<Schema extends ZeroSchema, Models extends GenericModels, const DisableInlineQueries extends boolean = false>({ schema, models, groupedQueries, disableInlineQueries, }: {
6
6
  schema: Schema;
7
7
  models: Models;
8
- clientQueries: ClientQueries;
8
+ groupedQueries: GroupedQueries;
9
+ disableInlineQueries?: DisableInlineQueries;
9
10
  }): {
10
11
  zeroEvents: import("@vxrn/helpers").Emitter<ZeroEvent | null>;
11
12
  ProvideZero: ({ children, authData: authDataIn, disable, ...props }: Omit<ZeroOptions<Schema, GetZeroMutators<Models>>, "schema" | "mutators"> & {
@@ -13,20 +14,7 @@ export declare function createZeroClient<Schema extends ZeroSchema, Models exten
13
14
  authData?: AuthData | null;
14
15
  disable?: boolean;
15
16
  }) => string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | import("react/jsx-runtime").JSX.Element | null | undefined;
16
- useQuery: {
17
- <TTable extends keyof Schema["tables"] & string, TReturn>(query: Query<Schema, TTable, TReturn> | SyncedQuery<any, any, any, any, Query<Schema, TTable, TReturn>>, options?: {
18
- enabled?: boolean | undefined;
19
- ttl?: "always" | "never" | number | undefined;
20
- } | boolean): readonly [HumanReadable<TReturn>, import("@rocicorp/zero/react").QueryResultDetails];
21
- <TArg, TTable extends keyof Schema["tables"] & string, TReturn>(fn: (args: TArg) => Query<Schema, TTable, TReturn>, params: TArg, options?: {
22
- enabled?: boolean | undefined;
23
- ttl?: "always" | "never" | number | undefined;
24
- } | boolean): readonly [HumanReadable<TReturn>, import("@rocicorp/zero/react").QueryResultDetails];
25
- <TTable extends keyof Schema["tables"] & string, TReturn>(fn: (args: void) => Query<Schema, TTable, TReturn>, options?: {
26
- enabled?: boolean | undefined;
27
- ttl?: "always" | "never" | number | undefined;
28
- } | boolean): readonly [HumanReadable<TReturn>, import("@rocicorp/zero/react").QueryResultDetails];
29
- };
17
+ useQuery: import("./createUseQuery").UseQueryHook<Schema, DisableInlineQueries>;
30
18
  usePermission: <K extends keyof Schema["tables"] & string>(table: K, objOrId: string | Partial<Row<Schema["tables"][K]>> | undefined, enabled?: boolean, debug?: boolean) => boolean | null;
31
19
  zero: Zero<Schema, GetZeroMutators<Models>>;
32
20
  };
@@ -1 +1 @@
1
- {"version":3,"file":"createZeroClient.d.ts","sourceRoot":"","sources":["../src/createZeroClient.tsx"],"names":[],"mappings":"AAGA,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AASnE,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAClF,OAAO,KAAK,EACV,aAAa,EACb,KAAK,EAEL,GAAG,EACH,WAAW,EACX,IAAI,EACJ,WAAW,EACX,MAAM,IAAI,UAAU,EACrB,MAAM,gBAAgB,CAAA;AAGvB,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;AAEnF,wBAAgB,gBAAgB,CAC9B,MAAM,SAAS,UAAU,EACzB,MAAM,SAAS,aAAa,EAC5B,EACA,MAAM,EACN,MAAM,EACN,aAAa,GACd,EAAE;IACD,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,aAAa,CAAA;CAC7B;;yEAyMI,IAAI,CAAC,WAAW,CAAC,MAAM,0BAAe,EAAE,QAAQ,GAAG,UAAU,CAAC,GAAG;QAClE,QAAQ,EAAE,SAAS,CAAA;QACnB,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAA;QAC1B,OAAO,CAAC,EAAE,OAAO,CAAA;KAClB;;SAxFiB,MAAM,SAAS,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE,OAAO,SAEnE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,GAC9B,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,YACzD;sBAhBA,OAAO,GAAG,SAAS;kBACvB,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS;YAejB,OAAO;SAInB,IAAI,EAAE,MAAM,SAAS,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE,OAAO,8DAErE,IAAI,YACF;sBAvBA,OAAO,GAAG,SAAS;kBACvB,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS;YAsBjB,OAAO;SAInB,MAAM,SAAS,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE,OAAO,gEAE7D;sBA7BA,OAAO,GAAG,SAAS;kBACvB,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS;YA4BjB,OAAO;;oBAtFd,CAAC,iDACf,CAAC,WACC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,yCAG9D,OAAO,GAAG,IAAI;;EAwNlB"}
1
+ {"version":3,"file":"createZeroClient.d.ts","sourceRoot":"","sources":["../src/createZeroClient.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AASnE,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAClF,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAElF,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;AAEpF,wBAAgB,gBAAgB,CAC9B,MAAM,SAAS,UAAU,EACzB,MAAM,SAAS,aAAa,EAC5B,KAAK,CAAC,oBAAoB,SAAS,OAAO,GAAG,KAAK,EAClD,EACA,MAAM,EACN,MAAM,EACN,cAAc,EACd,oBAAoD,GACrD,EAAE;IACD,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,cAAc,CAAA;IAC9B,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;CAC5C;;yEA+GI,IAAI,CAAC,WAAW,CAAC,MAAM,0BAAe,EAAE,QAAQ,GAAG,UAAU,CAAC,GAAG;QAClE,QAAQ,EAAE,SAAS,CAAA;QACnB,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAA;QAC1B,OAAO,CAAC,EAAE,OAAO,CAAA;KAClB;;oBA9DsB,CAAC,iDACf,CAAC,WACC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,yCAG9D,OAAO,GAAG,IAAI;;EAyHlB"}
@@ -1,7 +1,7 @@
1
1
  import type { AsyncAction, AuthData, GenericModels, GetZeroMutators, Transaction } from './types';
2
2
  import type { HumanReadable, Query, ReadonlyJSONValue, SyncedQuery, Schema as ZeroSchema } from '@rocicorp/zero';
3
- export type ServerQueries = Record<string, Record<string, SyncedQuery<any, any, any, any, any>>>;
4
- export declare function createZeroServer<Schema extends ZeroSchema, Models extends GenericModels, ServerActions extends Record<string, unknown>>({ createServerActions, database, schema, models, serverQueries, }: {
3
+ export type SyncedQueries = Record<string, Record<string, SyncedQuery<any, any, any, any, any>>>;
4
+ export declare function createZeroServer<Schema extends ZeroSchema, Models extends GenericModels, ServerActions extends Record<string, unknown>, Queries extends SyncedQueries = Record<string, never>>({ createServerActions, database, schema, models, syncedQueries, }: {
5
5
  /**
6
6
  * The DB connection string, same as ZERO_UPSTREAM_DB
7
7
  */
@@ -9,7 +9,7 @@ export declare function createZeroServer<Schema extends ZeroSchema, Models exten
9
9
  schema: Schema;
10
10
  models: Models;
11
11
  createServerActions: () => ServerActions;
12
- serverQueries?: ServerQueries;
12
+ syncedQueries?: Queries;
13
13
  }): {
14
14
  handleMutationRequest: ({ authData, request, skipAsyncTasks, }: {
15
15
  authData: AuthData | null;
@@ -1 +1 @@
1
- {"version":3,"file":"createZeroServer.d.ts","sourceRoot":"","sources":["../src/createZeroServer.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EACR,aAAa,EACb,eAAe,EACf,WAAW,EACZ,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,EACV,aAAa,EACb,KAAK,EACL,iBAAiB,EACjB,WAAW,EACX,MAAM,IAAI,UAAU,EACrB,MAAM,gBAAgB,CAAA;AAIvB,MAAM,MAAM,aAAa,GAAG,MAAM,CAChC,MAAM,EACN,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CACrD,CAAA;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,SAAS,UAAU,EACzB,MAAM,SAAS,aAAa,EAC5B,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7C,EACA,mBAAmB,EACnB,QAAQ,EACR,MAAM,EACN,MAAM,EACN,aAAa,GACd,EAAE;IACD;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,mBAAmB,EAAE,MAAM,aAAa,CAAA;IACxC,aAAa,CAAC,EAAE,aAAa,CAAA;CAC9B;oEAuBI;QACD,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAA;QACzB,OAAO,EAAE,OAAO,CAAA;QAChB,cAAc,CAAC,EAAE,OAAO,CAAA;KACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iDAsCE;QACD,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAA;QACzB,OAAO,EAAE,OAAO,CAAA;KACjB;;;;;;;;;;;;;;;;;;;;;;;kBAmDC,EAAE,SAAS,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,GAAG,CAAC,EAC5C,OAAO,SAAS,EAAE,SAAS,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,SACrE,EAAE,KAAG,OAAO,CAAC,OAAO,CAAC;kBA7BvB,CAAC,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,aAC/D,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;YA2ChD,CAAC,MACV,CAAC,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,KACrD,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;EAqB7B"}
1
+ {"version":3,"file":"createZeroServer.d.ts","sourceRoot":"","sources":["../src/createZeroServer.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EACR,aAAa,EACb,eAAe,EACf,WAAW,EACZ,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,EACV,aAAa,EACb,KAAK,EACL,iBAAiB,EACjB,WAAW,EACX,MAAM,IAAI,UAAU,EACrB,MAAM,gBAAgB,CAAA;AAIvB,MAAM,MAAM,aAAa,GAAG,MAAM,CAChC,MAAM,EACN,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CACrD,CAAA;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,SAAS,UAAU,EACzB,MAAM,SAAS,aAAa,EAC5B,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7C,OAAO,SAAS,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACrD,EACA,mBAAmB,EACnB,QAAQ,EACR,MAAM,EACN,MAAM,EACN,aAAa,GACd,EAAE;IACD;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,mBAAmB,EAAE,MAAM,aAAa,CAAA;IACxC,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;oEAuBI;QACD,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAA;QACzB,OAAO,EAAE,OAAO,CAAA;QAChB,cAAc,CAAC,EAAE,OAAO,CAAA;KACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iDAgDE;QACD,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAA;QACzB,OAAO,EAAE,OAAO,CAAA;KACjB;;;;;;;;;;;;;;;;;;;;;;;kBAiDC,EAAE,SAAS,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,GAAG,CAAC,EAC5C,OAAO,SAAS,EAAE,SAAS,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,SACrE,EAAE,KAAG,OAAO,CAAC,OAAO,CAAC;kBA7BvB,CAAC,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,aAC/D,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;YA2ChD,CAAC,MACV,CAAC,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,KACrD,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;EAqB7B"}
package/types/index.d.ts CHANGED
@@ -5,6 +5,7 @@ export * from './helpers/createMutators';
5
5
  export * from './helpers/ensureLoggedIn';
6
6
  export * from './helpers/mutatorContext';
7
7
  export * from './createZeroClient';
8
+ export * from './createUseQuery';
8
9
  export * from './mutations';
9
10
  export * from './where';
10
11
  export * from './serverWhere';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AAExC,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA;AAC7B,cAAc,OAAO,CAAA;AAErB,mBAAmB,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AAExC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA;AAC7B,cAAc,OAAO,CAAA;AAErB,mBAAmB,SAAS,CAAA"}