@amalaika/form-sdk-package 1.0.0

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 (75) hide show
  1. package/README.md +342 -0
  2. package/dist/cjs/client/__tests__/client.spec.d.ts +2 -0
  3. package/dist/cjs/client/__tests__/client.spec.d.ts.map +1 -0
  4. package/dist/cjs/client/__tests__/client.spec.js +300 -0
  5. package/dist/cjs/client/__tests__/client.spec.js.map +1 -0
  6. package/dist/cjs/client/index.d.ts +26 -0
  7. package/dist/cjs/client/index.d.ts.map +1 -0
  8. package/dist/cjs/client/index.js +179 -0
  9. package/dist/cjs/client/index.js.map +1 -0
  10. package/dist/cjs/client.d.ts +22 -0
  11. package/dist/cjs/client.d.ts.map +1 -0
  12. package/dist/cjs/client.js +111 -0
  13. package/dist/cjs/client.js.map +1 -0
  14. package/dist/cjs/index.d.ts +4 -0
  15. package/dist/cjs/index.d.ts.map +1 -0
  16. package/dist/cjs/index.js +10 -0
  17. package/dist/cjs/index.js.map +1 -0
  18. package/dist/cjs/package.json +1 -0
  19. package/dist/cjs/types/index.d.ts +91 -0
  20. package/dist/cjs/types/index.d.ts.map +1 -0
  21. package/dist/cjs/types/index.js +3 -0
  22. package/dist/cjs/types/index.js.map +1 -0
  23. package/dist/cjs/types.d.ts +78 -0
  24. package/dist/cjs/types.d.ts.map +1 -0
  25. package/dist/cjs/types.js +3 -0
  26. package/dist/cjs/types.js.map +1 -0
  27. package/dist/cjs/utils/__tests__/utils.spec.d.ts +2 -0
  28. package/dist/cjs/utils/__tests__/utils.spec.d.ts.map +1 -0
  29. package/dist/cjs/utils/__tests__/utils.spec.js +172 -0
  30. package/dist/cjs/utils/__tests__/utils.spec.js.map +1 -0
  31. package/dist/cjs/utils/index.d.ts +5 -0
  32. package/dist/cjs/utils/index.d.ts.map +1 -0
  33. package/dist/cjs/utils/index.js +45 -0
  34. package/dist/cjs/utils/index.js.map +1 -0
  35. package/dist/cjs/utils.d.ts +5 -0
  36. package/dist/cjs/utils.d.ts.map +1 -0
  37. package/dist/cjs/utils.js +45 -0
  38. package/dist/cjs/utils.js.map +1 -0
  39. package/dist/esm/client/__tests__/client.spec.d.ts +2 -0
  40. package/dist/esm/client/__tests__/client.spec.d.ts.map +1 -0
  41. package/dist/esm/client/__tests__/client.spec.js +355 -0
  42. package/dist/esm/client/__tests__/client.spec.js.map +1 -0
  43. package/dist/esm/client/index.d.ts +26 -0
  44. package/dist/esm/client/index.d.ts.map +1 -0
  45. package/dist/esm/client/index.js +175 -0
  46. package/dist/esm/client/index.js.map +1 -0
  47. package/dist/esm/client.d.ts +22 -0
  48. package/dist/esm/client.d.ts.map +1 -0
  49. package/dist/esm/client.js +107 -0
  50. package/dist/esm/client.js.map +1 -0
  51. package/dist/esm/index.d.ts +4 -0
  52. package/dist/esm/index.d.ts.map +1 -0
  53. package/dist/esm/index.js +3 -0
  54. package/dist/esm/index.js.map +1 -0
  55. package/dist/esm/types/index.d.ts +91 -0
  56. package/dist/esm/types/index.d.ts.map +1 -0
  57. package/dist/esm/types/index.js +2 -0
  58. package/dist/esm/types/index.js.map +1 -0
  59. package/dist/esm/types.d.ts +78 -0
  60. package/dist/esm/types.d.ts.map +1 -0
  61. package/dist/esm/types.js +2 -0
  62. package/dist/esm/types.js.map +1 -0
  63. package/dist/esm/utils/__tests__/utils.spec.d.ts +2 -0
  64. package/dist/esm/utils/__tests__/utils.spec.d.ts.map +1 -0
  65. package/dist/esm/utils/__tests__/utils.spec.js +182 -0
  66. package/dist/esm/utils/__tests__/utils.spec.js.map +1 -0
  67. package/dist/esm/utils/index.d.ts +5 -0
  68. package/dist/esm/utils/index.d.ts.map +1 -0
  69. package/dist/esm/utils/index.js +40 -0
  70. package/dist/esm/utils/index.js.map +1 -0
  71. package/dist/esm/utils.d.ts +5 -0
  72. package/dist/esm/utils.d.ts.map +1 -0
  73. package/dist/esm/utils.js +40 -0
  74. package/dist/esm/utils.js.map +1 -0
  75. package/package.json +54 -0
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const __1 = require("..");
4
+ // ---------------------------------------------------------------------------
5
+ // Helpers
6
+ // ---------------------------------------------------------------------------
7
+ function makeField(overrides) {
8
+ return {
9
+ type: "text",
10
+ required: false,
11
+ ...overrides,
12
+ };
13
+ }
14
+ // ---------------------------------------------------------------------------
15
+ // getAllFields
16
+ // ---------------------------------------------------------------------------
17
+ describe("getAllFields", () => {
18
+ it("returns fields from a flat schema", () => {
19
+ const schema = {
20
+ fields: [
21
+ makeField({ id: "first_name" }),
22
+ makeField({ id: "email", type: "email" }),
23
+ ],
24
+ };
25
+ const result = (0, __1.getAllFields)(schema);
26
+ expect(result).toHaveLength(2);
27
+ expect(result.map((f) => f.id)).toEqual(["first_name", "email"]);
28
+ });
29
+ it("returns fields from a stepped schema", () => {
30
+ const schema = {
31
+ steps: [
32
+ { id: "step1", fields: [makeField({ id: "a" })] },
33
+ { id: "step2", fields: [makeField({ id: "b" }), makeField({ id: "c" })] },
34
+ ],
35
+ };
36
+ const result = (0, __1.getAllFields)(schema);
37
+ expect(result).toHaveLength(3);
38
+ expect(result.map((f) => f.id)).toEqual(["a", "b", "c"]);
39
+ });
40
+ it("returns empty array when schema has neither fields nor steps", () => {
41
+ const schema = {};
42
+ expect((0, __1.getAllFields)(schema)).toEqual([]);
43
+ });
44
+ it("prefers steps over fields when both exist", () => {
45
+ const schema = {
46
+ fields: [makeField({ id: "flat" })],
47
+ steps: [{ id: "s1", fields: [makeField({ id: "stepped" })] }],
48
+ };
49
+ const result = (0, __1.getAllFields)(schema);
50
+ expect(result.map((f) => f.id)).toEqual(["stepped"]);
51
+ });
52
+ });
53
+ // ---------------------------------------------------------------------------
54
+ // isFieldVisible
55
+ // ---------------------------------------------------------------------------
56
+ describe("isFieldVisible", () => {
57
+ it("returns true when field has no visibility rule", () => {
58
+ const field = makeField({ id: "name" });
59
+ expect((0, __1.isFieldVisible)(field, {}, [field])).toBe(true);
60
+ });
61
+ describe("equals operator", () => {
62
+ const allFields = [
63
+ makeField({ id: "role", type: "select" }),
64
+ makeField({
65
+ id: "talk_title",
66
+ visibility: { dependsOn: "role", operator: "equals", value: "speaker" },
67
+ }),
68
+ ];
69
+ it("shows field when condition is met", () => {
70
+ expect((0, __1.isFieldVisible)(allFields[1], { role: "speaker" }, allFields)).toBe(true);
71
+ });
72
+ it("hides field when condition is not met", () => {
73
+ expect((0, __1.isFieldVisible)(allFields[1], { role: "attendee" }, allFields)).toBe(false);
74
+ });
75
+ it("hides field when dependency has no value", () => {
76
+ expect((0, __1.isFieldVisible)(allFields[1], {}, allFields)).toBe(false);
77
+ });
78
+ });
79
+ describe("not_equals operator", () => {
80
+ const allFields = [
81
+ makeField({ id: "role", type: "select" }),
82
+ makeField({
83
+ id: "general_info",
84
+ visibility: { dependsOn: "role", operator: "not_equals", value: "speaker" },
85
+ }),
86
+ ];
87
+ it("shows field when value differs", () => {
88
+ expect((0, __1.isFieldVisible)(allFields[1], { role: "attendee" }, allFields)).toBe(true);
89
+ });
90
+ it("hides field when value matches", () => {
91
+ expect((0, __1.isFieldVisible)(allFields[1], { role: "speaker" }, allFields)).toBe(false);
92
+ });
93
+ });
94
+ describe("in operator", () => {
95
+ const allFields = [
96
+ makeField({ id: "diet", type: "checkbox" }),
97
+ makeField({
98
+ id: "allergy_details",
99
+ visibility: { dependsOn: "diet", operator: "in", value: ["vegan", "gluten_free"] },
100
+ }),
101
+ ];
102
+ it("shows field when single value is in target list", () => {
103
+ expect((0, __1.isFieldVisible)(allFields[1], { diet: "vegan" }, allFields)).toBe(true);
104
+ });
105
+ it("shows field when array value overlaps target list", () => {
106
+ expect((0, __1.isFieldVisible)(allFields[1], { diet: ["gluten_free", "other"] }, allFields)).toBe(true);
107
+ });
108
+ it("hides field when value is not in target list", () => {
109
+ expect((0, __1.isFieldVisible)(allFields[1], { diet: "none" }, allFields)).toBe(false);
110
+ });
111
+ });
112
+ describe("cascading visibility", () => {
113
+ it("hides child when parent is hidden", () => {
114
+ const allFields = [
115
+ makeField({ id: "role", type: "select" }),
116
+ makeField({
117
+ id: "talk_title",
118
+ visibility: { dependsOn: "role", operator: "equals", value: "speaker" },
119
+ }),
120
+ makeField({
121
+ id: "talk_abstract",
122
+ visibility: { dependsOn: "talk_title", operator: "not_equals", value: "" },
123
+ }),
124
+ ];
125
+ // role is "attendee" → talk_title hidden → talk_abstract hidden too
126
+ expect((0, __1.isFieldVisible)(allFields[2], { role: "attendee" }, allFields)).toBe(false);
127
+ });
128
+ it("shows child when entire chain is satisfied", () => {
129
+ const allFields = [
130
+ makeField({ id: "role", type: "select" }),
131
+ makeField({
132
+ id: "talk_title",
133
+ visibility: { dependsOn: "role", operator: "equals", value: "speaker" },
134
+ }),
135
+ makeField({
136
+ id: "talk_abstract",
137
+ visibility: { dependsOn: "talk_title", operator: "not_equals", value: "" },
138
+ }),
139
+ ];
140
+ expect((0, __1.isFieldVisible)(allFields[2], { role: "speaker", talk_title: "My Talk" }, allFields)).toBe(true);
141
+ });
142
+ });
143
+ });
144
+ // ---------------------------------------------------------------------------
145
+ // getVisibleFieldIds
146
+ // ---------------------------------------------------------------------------
147
+ describe("getVisibleFieldIds", () => {
148
+ const allFields = [
149
+ makeField({ id: "first_name" }),
150
+ makeField({ id: "role", type: "select" }),
151
+ makeField({
152
+ id: "talk_title",
153
+ visibility: { dependsOn: "role", operator: "equals", value: "speaker" },
154
+ }),
155
+ makeField({ id: "email", type: "email" }),
156
+ ];
157
+ it("includes all fields without visibility rules", () => {
158
+ const visible = (0, __1.getVisibleFieldIds)(allFields, {});
159
+ expect(visible.has("first_name")).toBe(true);
160
+ expect(visible.has("role")).toBe(true);
161
+ expect(visible.has("email")).toBe(true);
162
+ });
163
+ it("excludes fields whose condition is not met", () => {
164
+ const visible = (0, __1.getVisibleFieldIds)(allFields, { role: "attendee" });
165
+ expect(visible.has("talk_title")).toBe(false);
166
+ });
167
+ it("includes conditional fields when condition is met", () => {
168
+ const visible = (0, __1.getVisibleFieldIds)(allFields, { role: "speaker" });
169
+ expect(visible.has("talk_title")).toBe(true);
170
+ });
171
+ });
172
+ //# sourceMappingURL=utils.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.spec.js","sourceRoot":"","sources":["../../../../src/utils/__tests__/utils.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { FieldDefinition, FormSchema } from "../types/index.js";
2
+ export declare function getAllFields(schema: FormSchema): FieldDefinition[];
3
+ export declare function isFieldVisible(field: FieldDefinition, formValues: Record<string, unknown>, allFields: FieldDefinition[]): boolean;
4
+ export declare function getVisibleFieldIds(allFields: FieldDefinition[], formValues: Record<string, unknown>): Set<string>;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAErE,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,eAAe,EAAE,CAKlE;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,eAAe,EACtB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,SAAS,EAAE,eAAe,EAAE,GAC3B,OAAO,CA0BT;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,eAAe,EAAE,EAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,GAAG,CAAC,MAAM,CAAC,CAQb"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAllFields = getAllFields;
4
+ exports.isFieldVisible = isFieldVisible;
5
+ exports.getVisibleFieldIds = getVisibleFieldIds;
6
+ function getAllFields(schema) {
7
+ if (schema.steps) {
8
+ return schema.steps.flatMap((step) => step.fields);
9
+ }
10
+ return schema.fields ?? [];
11
+ }
12
+ function isFieldVisible(field, formValues, allFields) {
13
+ if (!field.visibility)
14
+ return true;
15
+ const { dependsOn, operator, value } = field.visibility;
16
+ // Cascading: if the parent field is itself hidden, this field is hidden too
17
+ const parentField = allFields.find((f) => f.id === dependsOn);
18
+ if (parentField && !isFieldVisible(parentField, formValues, allFields)) {
19
+ return false;
20
+ }
21
+ const current = formValues[dependsOn];
22
+ switch (operator) {
23
+ case "equals":
24
+ return current === value;
25
+ case "not_equals":
26
+ return current !== value;
27
+ case "in": {
28
+ const selected = Array.isArray(current) ? current : [current];
29
+ const targets = Array.isArray(value) ? value : [value];
30
+ return targets.some((v) => selected.includes(v));
31
+ }
32
+ default:
33
+ return true;
34
+ }
35
+ }
36
+ function getVisibleFieldIds(allFields, formValues) {
37
+ const visible = new Set();
38
+ for (const field of allFields) {
39
+ if (isFieldVisible(field, formValues, allFields)) {
40
+ visible.add(field.id);
41
+ }
42
+ }
43
+ return visible;
44
+ }
45
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":";;AAEA,oCAKC;AAED,wCA8BC;AAED,gDAWC;AAlDD,SAAgB,YAAY,CAAC,MAAkB;IAC7C,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED,SAAgB,cAAc,CAC5B,KAAsB,EACtB,UAAmC,EACnC,SAA4B;IAE5B,IAAI,CAAC,KAAK,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAEnC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC;IAExD,4EAA4E;IAC5E,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;IAC9D,IAAI,WAAW,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC;QACvE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAEtC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,OAAO,KAAK,KAAK,CAAC;QAC3B,KAAK,YAAY;YACf,OAAO,OAAO,KAAK,KAAK,CAAC;QAC3B,KAAK,IAAI,CAAC,CAAC,CAAC;YACV,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC9D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACvD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC;QACD;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,SAAgB,kBAAkB,CAChC,SAA4B,EAC5B,UAAmC;IAEnC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,IAAI,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { FieldDefinition, FormSchema } from "./types.js";
2
+ export declare function getAllFields(schema: FormSchema): FieldDefinition[];
3
+ export declare function isFieldVisible(field: FieldDefinition, formValues: Record<string, unknown>, allFields: FieldDefinition[]): boolean;
4
+ export declare function getVisibleFieldIds(allFields: FieldDefinition[], formValues: Record<string, unknown>): Set<string>;
5
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE9D,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,eAAe,EAAE,CAKlE;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,eAAe,EACtB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,SAAS,EAAE,eAAe,EAAE,GAC3B,OAAO,CA0BT;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,eAAe,EAAE,EAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,GAAG,CAAC,MAAM,CAAC,CAQb"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAllFields = getAllFields;
4
+ exports.isFieldVisible = isFieldVisible;
5
+ exports.getVisibleFieldIds = getVisibleFieldIds;
6
+ function getAllFields(schema) {
7
+ if (schema.steps) {
8
+ return schema.steps.flatMap((step) => step.fields);
9
+ }
10
+ return schema.fields ?? [];
11
+ }
12
+ function isFieldVisible(field, formValues, allFields) {
13
+ if (!field.visibility)
14
+ return true;
15
+ const { dependsOn, operator, value } = field.visibility;
16
+ // Cascading: if the parent field is itself hidden, this field is hidden too
17
+ const parentField = allFields.find((f) => f.id === dependsOn);
18
+ if (parentField && !isFieldVisible(parentField, formValues, allFields)) {
19
+ return false;
20
+ }
21
+ const current = formValues[dependsOn];
22
+ switch (operator) {
23
+ case "equals":
24
+ return current === value;
25
+ case "not_equals":
26
+ return current !== value;
27
+ case "in": {
28
+ const selected = Array.isArray(current) ? current : [current];
29
+ const targets = Array.isArray(value) ? value : [value];
30
+ return targets.some((v) => selected.includes(v));
31
+ }
32
+ default:
33
+ return true;
34
+ }
35
+ }
36
+ function getVisibleFieldIds(allFields, formValues) {
37
+ const visible = new Set();
38
+ for (const field of allFields) {
39
+ if (isFieldVisible(field, formValues, allFields)) {
40
+ visible.add(field.id);
41
+ }
42
+ }
43
+ return visible;
44
+ }
45
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":";;AAEA,oCAKC;AAED,wCA8BC;AAED,gDAWC;AAlDD,SAAgB,YAAY,CAAC,MAAkB;IAC7C,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED,SAAgB,cAAc,CAC5B,KAAsB,EACtB,UAAmC,EACnC,SAA4B;IAE5B,IAAI,CAAC,KAAK,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAEnC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC;IAExD,4EAA4E;IAC5E,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;IAC9D,IAAI,WAAW,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC;QACvE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAEtC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,OAAO,KAAK,KAAK,CAAC;QAC3B,KAAK,YAAY;YACf,OAAO,OAAO,KAAK,KAAK,CAAC;QAC3B,KAAK,IAAI,CAAC,CAAC,CAAC;YACV,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC9D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACvD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC;QACD;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,SAAgB,kBAAkB,CAChC,SAA4B,EAC5B,UAAmC;IAEnC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,IAAI,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=client.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.spec.d.ts","sourceRoot":"","sources":["../../../../src/client/__tests__/client.spec.ts"],"names":[],"mappings":""}