@stackframe/stack-shared 2.8.41 → 2.8.44

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 (106) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/apps/apps-config.d.mts +130 -0
  3. package/dist/apps/apps-config.d.ts +130 -0
  4. package/dist/apps/apps-config.js +159 -0
  5. package/dist/apps/apps-config.js.map +1 -0
  6. package/dist/config/format.js +3 -1
  7. package/dist/config/format.js.map +1 -1
  8. package/dist/config/schema-fuzzer.test.d.mts +2 -0
  9. package/dist/config/schema-fuzzer.test.d.ts +2 -0
  10. package/dist/config/schema-fuzzer.test.js +206 -0
  11. package/dist/config/schema-fuzzer.test.js.map +1 -0
  12. package/dist/config/schema.d.mts +268 -148
  13. package/dist/config/schema.d.ts +268 -148
  14. package/dist/config/schema.js +92 -44
  15. package/dist/config/schema.js.map +1 -1
  16. package/dist/esm/apps/apps-config.js +133 -0
  17. package/dist/esm/apps/apps-config.js.map +1 -0
  18. package/dist/esm/config/format.js +3 -1
  19. package/dist/esm/config/format.js.map +1 -1
  20. package/dist/esm/config/schema-fuzzer.test.js +204 -0
  21. package/dist/esm/config/schema-fuzzer.test.js.map +1 -0
  22. package/dist/esm/config/schema.js +94 -46
  23. package/dist/esm/config/schema.js.map +1 -1
  24. package/dist/esm/interface/admin-interface.js +0 -27
  25. package/dist/esm/interface/admin-interface.js.map +1 -1
  26. package/dist/esm/interface/client-interface.js +53 -19
  27. package/dist/esm/interface/client-interface.js.map +1 -1
  28. package/dist/esm/interface/crud/products.js +19 -0
  29. package/dist/esm/interface/crud/products.js.map +1 -0
  30. package/dist/esm/interface/crud/transactions.js +3 -3
  31. package/dist/esm/interface/crud/transactions.js.map +1 -1
  32. package/dist/esm/interface/server-interface.js +22 -0
  33. package/dist/esm/interface/server-interface.js.map +1 -1
  34. package/dist/esm/known-errors.js +30 -16
  35. package/dist/esm/known-errors.js.map +1 -1
  36. package/dist/esm/schema-fields.js +15 -14
  37. package/dist/esm/schema-fields.js.map +1 -1
  38. package/dist/esm/utils/caches.js +6 -2
  39. package/dist/esm/utils/caches.js.map +1 -1
  40. package/dist/esm/utils/globals.js +9 -1
  41. package/dist/esm/utils/globals.js.map +1 -1
  42. package/dist/esm/utils/objects.js +4 -0
  43. package/dist/esm/utils/objects.js.map +1 -1
  44. package/dist/esm/utils/react.js +12 -6
  45. package/dist/esm/utils/react.js.map +1 -1
  46. package/dist/esm/utils/regex.js +13 -0
  47. package/dist/esm/utils/regex.js.map +1 -0
  48. package/dist/esm/utils/strings.js +5 -1
  49. package/dist/esm/utils/strings.js.map +1 -1
  50. package/dist/esm/utils/urls.js +10 -0
  51. package/dist/esm/utils/urls.js.map +1 -1
  52. package/dist/index.d.mts +1 -0
  53. package/dist/index.d.ts +1 -0
  54. package/dist/interface/admin-interface.d.mts +1 -6
  55. package/dist/interface/admin-interface.d.ts +1 -6
  56. package/dist/interface/admin-interface.js +0 -27
  57. package/dist/interface/admin-interface.js.map +1 -1
  58. package/dist/interface/client-interface.d.mts +5 -2
  59. package/dist/interface/client-interface.d.ts +5 -2
  60. package/dist/interface/client-interface.js +53 -19
  61. package/dist/interface/client-interface.js.map +1 -1
  62. package/dist/interface/crud/products.d.mts +91 -0
  63. package/dist/interface/crud/products.d.ts +91 -0
  64. package/dist/interface/crud/products.js +45 -0
  65. package/dist/interface/crud/products.js.map +1 -0
  66. package/dist/interface/crud/transactions.d.mts +2 -2
  67. package/dist/interface/crud/transactions.d.ts +2 -2
  68. package/dist/interface/crud/transactions.js +2 -2
  69. package/dist/interface/crud/transactions.js.map +1 -1
  70. package/dist/interface/server-interface.d.mts +10 -2
  71. package/dist/interface/server-interface.d.ts +10 -2
  72. package/dist/interface/server-interface.js +22 -0
  73. package/dist/interface/server-interface.js.map +1 -1
  74. package/dist/known-errors.d.mts +7 -4
  75. package/dist/known-errors.d.ts +7 -4
  76. package/dist/known-errors.js +30 -16
  77. package/dist/known-errors.js.map +1 -1
  78. package/dist/schema-fields.d.mts +8 -6
  79. package/dist/schema-fields.d.ts +8 -6
  80. package/dist/schema-fields.js +18 -17
  81. package/dist/schema-fields.js.map +1 -1
  82. package/dist/utils/caches.d.mts +4 -2
  83. package/dist/utils/caches.d.ts +4 -2
  84. package/dist/utils/caches.js +6 -2
  85. package/dist/utils/caches.js.map +1 -1
  86. package/dist/utils/globals.d.mts +3 -1
  87. package/dist/utils/globals.d.ts +3 -1
  88. package/dist/utils/globals.js +12 -2
  89. package/dist/utils/globals.js.map +1 -1
  90. package/dist/utils/objects.js +4 -0
  91. package/dist/utils/objects.js.map +1 -1
  92. package/dist/utils/react.d.mts +2 -1
  93. package/dist/utils/react.d.ts +2 -1
  94. package/dist/utils/react.js +13 -6
  95. package/dist/utils/react.js.map +1 -1
  96. package/dist/utils/regex.d.mts +3 -0
  97. package/dist/utils/regex.d.ts +3 -0
  98. package/dist/utils/regex.js +38 -0
  99. package/dist/utils/regex.js.map +1 -0
  100. package/dist/utils/strings.js +5 -1
  101. package/dist/utils/strings.js.map +1 -1
  102. package/dist/utils/urls.d.mts +3 -1
  103. package/dist/utils/urls.d.ts +3 -1
  104. package/dist/utils/urls.js +12 -0
  105. package/dist/utils/urls.js.map +1 -1
  106. package/package.json +7 -7
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+
3
+ // src/config/schema-fuzzer.test.ts
4
+ var import_apps_config = require("../apps/apps-config.js");
5
+ var import_currency_constants = require("../utils/currency-constants.js");
6
+ var import_errors = require("../utils/errors.js");
7
+ var import_objects = require("../utils/objects.js");
8
+ var import_strings = require("../utils/strings.js");
9
+ var import_format = require("./format.js");
10
+ var import_schema = require("./schema.js");
11
+ var branchSchemaFuzzerConfig = [{
12
+ apiKeys: [{
13
+ enabled: [{
14
+ team: [true, false],
15
+ user: [true, false]
16
+ }]
17
+ }],
18
+ auth: [{
19
+ allowSignUp: [true, false],
20
+ password: [{
21
+ allowSignIn: [true, false]
22
+ }],
23
+ otp: [{
24
+ allowSignIn: [true, false]
25
+ }],
26
+ passkey: [{
27
+ allowSignIn: [true, false]
28
+ }],
29
+ oauth: [{
30
+ accountMergeStrategy: ["link_method", "raise_error", "allow_duplicates"],
31
+ providers: [{
32
+ "google": [{
33
+ type: ["google", "github", "x"],
34
+ allowSignIn: [true, false],
35
+ allowConnectedAccounts: [true, false]
36
+ }]
37
+ }]
38
+ }]
39
+ }],
40
+ dataVault: [{
41
+ stores: [{
42
+ "some-store-id": [{
43
+ displayName: ["Some Store", "Some Other Store"]
44
+ }],
45
+ "some-other-store-id": [{
46
+ displayName: ["Some Store", "Some Other Store"]
47
+ }]
48
+ }]
49
+ }],
50
+ payments: [{
51
+ testMode: [false, true],
52
+ autoPay: [{
53
+ interval: [[[0, 1, -3, 100, 0.333, Infinity], ["day", "week", "month", "year"]]]
54
+ }],
55
+ catalogs: [{
56
+ "some-catalog-id": [{
57
+ displayName: ["Some Catalog", "Some Other Catalog"]
58
+ }]
59
+ }],
60
+ groups: [{
61
+ "some-catalog-id": [{
62
+ displayName: ["Some Catalog", "Some Other Catalog"]
63
+ }]
64
+ }],
65
+ items: [{
66
+ "some-item-id": [{
67
+ customerType: ["user", "team", "custom"],
68
+ displayName: ["Some Item", "Some Other Item"]
69
+ }]
70
+ }],
71
+ products: [{
72
+ "some-product-id": [{
73
+ displayName: ["Some Product", "Some Other Product"],
74
+ customerType: ["user", "team", "custom"],
75
+ freeTrial: [[[0, 1, -3, 100, 0.333, Infinity], ["day", "week", "month", "year"]]],
76
+ serverOnly: [true, false],
77
+ stackable: [true, false],
78
+ catalogId: ["some-catalog-id", "some-other-catalog-id"],
79
+ groupId: ["some-catalog-id", "some-other-catalog-id"],
80
+ // ensure migration works
81
+ isAddOnTo: [false, { "some-product-id": [true], "some-other-product-id": [true] }],
82
+ prices: ["include-by-default", {
83
+ "some-price-id": [{
84
+ ...(0, import_objects.typedFromEntries)(import_currency_constants.SUPPORTED_CURRENCIES.map((currency) => [currency.code, ["100_00", "not a number", "Infinity", "0"]])),
85
+ interval: [[[0, 1, -3, 100, 0.333, Infinity], ["day", "week", "month", "year"]]],
86
+ serverOnly: [true, false],
87
+ freeTrial: [[[0, 1, -3, 100, 0.333, Infinity], ["day", "week", "month", "year"]]]
88
+ }]
89
+ }],
90
+ includedItems: [{
91
+ "some-item-id": [{
92
+ quantity: [0, 1, -3, 100, 0.333, Infinity],
93
+ repeat: ["never", [[0, 1, -3, 100, 0.333, Infinity], ["day", "week", "month", "year"]]],
94
+ expires: ["never", "when-purchase-expires", "when-repeated"]
95
+ }]
96
+ }]
97
+ }]
98
+ }]
99
+ }],
100
+ emails: [{
101
+ themes: [{
102
+ "12345678-1234-4234-9234-123456789012": [{
103
+ displayName: ["Some Theme", "Some Other Theme"],
104
+ tsxSource: ["", "some typescript source code"]
105
+ }]
106
+ }],
107
+ selectedThemeId: ["some-theme-id", "some-other-theme-id"],
108
+ templates: [{
109
+ "12345678-1234-4234-9234-123456789012": [{
110
+ themeId: ["some-theme-id", "some-other-theme-id"],
111
+ displayName: ["Some Template", "Some Other Template"],
112
+ tsxSource: ["", "some typescript source code"]
113
+ }]
114
+ }]
115
+ }],
116
+ workflows: [{
117
+ availableWorkflows: [{
118
+ "some-workflow-id": [{
119
+ displayName: ["Some Workflow", "Some Other Workflow"],
120
+ tsSource: ["", "some typescript source code"],
121
+ enabled: [true, false]
122
+ }]
123
+ }]
124
+ }],
125
+ teams: [{
126
+ createPersonalTeamOnSignUp: [true, false],
127
+ allowClientTeamCreation: [true, false]
128
+ }],
129
+ users: [{
130
+ allowClientUserDeletion: [true, false]
131
+ }],
132
+ rbac: [{
133
+ permissions: [{
134
+ "some_permission_id": [{
135
+ containedPermissionIds: [{
136
+ "some_permission_id": [true],
137
+ "$some_other_permission_id": [true]
138
+ }],
139
+ description: ["Some Permission", "Some Other Permission"],
140
+ scope: ["team", "project"]
141
+ }]
142
+ }],
143
+ defaultPermissions: [{
144
+ teamCreator: [{
145
+ "some_permission_id": [true],
146
+ "$some_other_permission_id": [true]
147
+ }],
148
+ teamMember: [{
149
+ "some_permission_id": [true],
150
+ "$some_other_permission_id": [true]
151
+ }],
152
+ signUp: [{
153
+ "some_permission_id": [true],
154
+ "$some_other_permission_id": [true]
155
+ }]
156
+ }]
157
+ }],
158
+ domains: [{
159
+ allowLocalhost: [true, false]
160
+ }],
161
+ apps: [{
162
+ installed: [(0, import_objects.typedFromEntries)((0, import_objects.typedEntries)(import_apps_config.ALL_APPS).map(([key, value]) => [key, [{
163
+ enabled: [true, false]
164
+ }]]))]
165
+ }]
166
+ }];
167
+ var environmentSchemaFuzzerConfig = [{
168
+ ...branchSchemaFuzzerConfig[0],
169
+ auth: [{
170
+ ...branchSchemaFuzzerConfig[0].auth[0],
171
+ oauth: [{
172
+ ...branchSchemaFuzzerConfig[0].auth[0].oauth[0],
173
+ providers: [(0, import_objects.typedFromEntries)((0, import_objects.typedEntries)(branchSchemaFuzzerConfig[0].auth[0].oauth[0].providers[0]).map(([key, value]) => [key, [{
174
+ ...value[0],
175
+ isShared: [true, false],
176
+ clientId: ["some-client-id"],
177
+ clientSecret: ["some-client-secret"],
178
+ facebookConfigId: ["some-facebook-config-id"],
179
+ microsoftTenantId: ["some-microsoft-tenant-id"]
180
+ }]]))]
181
+ }]
182
+ }],
183
+ domains: [{
184
+ ...branchSchemaFuzzerConfig[0].domains[0],
185
+ trustedDomains: [{
186
+ "some-domain-id": [{
187
+ baseUrl: ["https://example.com/something-here"],
188
+ handlerPath: ["/something-here"]
189
+ }]
190
+ }]
191
+ }],
192
+ emails: [{
193
+ ...branchSchemaFuzzerConfig[0].emails[0],
194
+ server: [{
195
+ isShared: [true, false],
196
+ provider: ["resend", "smtp"],
197
+ host: ["example.com", "://super weird host that's not valid"],
198
+ port: [1234, 0.12543, -100, Infinity],
199
+ username: ["some-username", "some username with a space"],
200
+ password: ["some-password", "some password with a space"],
201
+ senderName: ["Some Sender"],
202
+ senderEmail: ["some-sender@example.com", "some invalid email"]
203
+ }]
204
+ }]
205
+ }];
206
+ //# sourceMappingURL=schema-fuzzer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/config/schema-fuzzer.test.ts"],"sourcesContent":["import { ALL_APPS } from \"../apps/apps-config\";\nimport { SUPPORTED_CURRENCIES } from \"../utils/currency-constants\";\nimport { StackAssertionError } from \"../utils/errors\";\nimport { getOrUndefined, isObjectLike, set, typedEntries, typedFromEntries } from \"../utils/objects\";\nimport { nicify } from \"../utils/strings\";\nimport { normalize, override } from \"./format\";\nimport { BranchConfigNormalizedOverride, EnvironmentConfigNormalizedOverride, OrganizationConfigNormalizedOverride, ProjectConfigNormalizedOverride, applyBranchDefaults, applyEnvironmentDefaults, applyOrganizationDefaults, applyProjectDefaults, assertNoConfigOverrideErrors, branchConfigSchema, environmentConfigSchema, migrateConfigOverride, organizationConfigSchema, projectConfigSchema, sanitizeBranchConfig, sanitizeEnvironmentConfig, sanitizeOrganizationConfig, sanitizeProjectConfig } from \"./schema\";\n\ntype FuzzerConfig<T> = ReadonlyArray<T extends object ? ([T] extends [any[]] ? { readonly [K in keyof T]: FuzzerConfig<T[K]> } : Required<{\n [K in keyof T]: FuzzerConfig<T[K]>;\n}> & Record<string, FuzzerConfig<any>>) : T>;\n\nconst projectSchemaFuzzerConfig = [{\n sourceOfTruth: [{\n type: [\"hosted\", \"neon\", \"postgres\"],\n connectionString: [\"\", \"postgres://user:password@host:port/database\", \"THIS IS A STRING LOLOL\"],\n connectionStrings: [{\n \"123-some-branch-id\": [\"\", \"THIS IS A CONNECTION STRING OR SO\"],\n }],\n }],\n}] satisfies FuzzerConfig<ProjectConfigNormalizedOverride>;\n\nconst branchSchemaFuzzerConfig = [{\n apiKeys: [{\n enabled: [{\n team: [true, false],\n user: [true, false],\n }],\n }],\n auth: [{\n allowSignUp: [true, false],\n password: [{\n allowSignIn: [true, false],\n }],\n otp: [{\n allowSignIn: [true, false],\n }],\n passkey: [{\n allowSignIn: [true, false],\n }],\n oauth: [{\n accountMergeStrategy: [\"link_method\", \"raise_error\", \"allow_duplicates\"],\n providers: [{\n \"google\": [{\n type: [\"google\", \"github\", \"x\"] as const,\n allowSignIn: [true, false],\n allowConnectedAccounts: [true, false],\n }],\n }],\n }],\n }],\n dataVault: [{\n stores: [{\n \"some-store-id\": [{\n displayName: [\"Some Store\", \"Some Other Store\"],\n }],\n \"some-other-store-id\": [{\n displayName: [\"Some Store\", \"Some Other Store\"],\n }],\n }],\n }],\n payments: [{\n testMode: [false, true],\n autoPay: [{\n interval: [[[0, 1, -3, 100, 0.333, Infinity], [\"day\", \"week\", \"month\", \"year\"]]] as const,\n }],\n catalogs: [{\n \"some-catalog-id\": [{\n displayName: [\"Some Catalog\", \"Some Other Catalog\"],\n }],\n }],\n groups: [{\n \"some-catalog-id\": [{\n displayName: [\"Some Catalog\", \"Some Other Catalog\"],\n }],\n }],\n items: [{\n \"some-item-id\": [{\n customerType: [\"user\", \"team\", \"custom\"] as const,\n displayName: [\"Some Item\", \"Some Other Item\"],\n }],\n }],\n products: [{\n \"some-product-id\": [{\n displayName: [\"Some Product\", \"Some Other Product\"],\n customerType: [\"user\", \"team\", \"custom\"] as const,\n freeTrial: [[[0, 1, -3, 100, 0.333, Infinity], [\"day\", \"week\", \"month\", \"year\"]]] as const,\n serverOnly: [true, false],\n stackable: [true, false],\n catalogId: [\"some-catalog-id\", \"some-other-catalog-id\"],\n groupId: [\"some-catalog-id\", \"some-other-catalog-id\"], // ensure migration works\n isAddOnTo: [false, { \"some-product-id\": [true], \"some-other-product-id\": [true] }] as const,\n prices: [\"include-by-default\" as \"include-by-default\", {\n \"some-price-id\": [{\n ...typedFromEntries(SUPPORTED_CURRENCIES.map(currency => [currency.code, [\"100_00\", \"not a number\", \"Infinity\", \"0\"]])),\n interval: [[[0, 1, -3, 100, 0.333, Infinity], [\"day\", \"week\", \"month\", \"year\"]]] as const,\n serverOnly: [true, false],\n freeTrial: [[[0, 1, -3, 100, 0.333, Infinity], [\"day\", \"week\", \"month\", \"year\"]]] as const,\n }],\n }],\n includedItems: [{\n \"some-item-id\": [{\n quantity: [0, 1, -3, 100, 0.333, Infinity],\n repeat: [\"never\", [[0, 1, -3, 100, 0.333, Infinity], [\"day\", \"week\", \"month\", \"year\"]]] as const,\n expires: [\"never\", \"when-purchase-expires\", \"when-repeated\"] as const,\n }],\n }],\n }],\n }],\n }],\n emails: [{\n themes: [{\n \"12345678-1234-4234-9234-123456789012\": [{\n displayName: [\"Some Theme\", \"Some Other Theme\"],\n tsxSource: [\"\", \"some typescript source code\"],\n }],\n }],\n selectedThemeId: [\"some-theme-id\", \"some-other-theme-id\"],\n templates: [{\n \"12345678-1234-4234-9234-123456789012\": [{\n themeId: [\"some-theme-id\", \"some-other-theme-id\"],\n displayName: [\"Some Template\", \"Some Other Template\"],\n tsxSource: [\"\", \"some typescript source code\"],\n }],\n }],\n }],\n workflows: [{\n availableWorkflows: [{\n \"some-workflow-id\": [{\n displayName: [\"Some Workflow\", \"Some Other Workflow\"],\n tsSource: [\"\", \"some typescript source code\"],\n enabled: [true, false],\n }],\n }],\n }],\n teams: [{\n createPersonalTeamOnSignUp: [true, false],\n allowClientTeamCreation: [true, false],\n }],\n users: [{\n allowClientUserDeletion: [true, false],\n }],\n rbac: [{\n permissions: [{\n \"some_permission_id\": [{\n containedPermissionIds: [{\n \"some_permission_id\": [true],\n \"$some_other_permission_id\": [true],\n }] as const,\n description: [\"Some Permission\", \"Some Other Permission\"],\n scope: [\"team\", \"project\"] as const,\n }],\n }],\n defaultPermissions: [{\n teamCreator: [{\n \"some_permission_id\": [true],\n \"$some_other_permission_id\": [true],\n }] as const,\n teamMember: [{\n \"some_permission_id\": [true],\n \"$some_other_permission_id\": [true],\n }] as const,\n signUp: [{\n \"some_permission_id\": [true],\n \"$some_other_permission_id\": [true],\n }] as const,\n }],\n }],\n domains: [{\n allowLocalhost: [true, false],\n }],\n apps: [{\n installed: [typedFromEntries(typedEntries(ALL_APPS).map(([key, value]) => [key, [{\n enabled: [true, false],\n }]]))],\n }],\n}] satisfies FuzzerConfig<BranchConfigNormalizedOverride>;\n\nconst environmentSchemaFuzzerConfig = [{\n ...branchSchemaFuzzerConfig[0],\n auth: [{\n ...branchSchemaFuzzerConfig[0].auth[0],\n oauth: [{\n ...branchSchemaFuzzerConfig[0].auth[0].oauth[0],\n providers: [typedFromEntries(typedEntries(branchSchemaFuzzerConfig[0].auth[0].oauth[0].providers[0]).map(([key, value]) => [key, [{\n ...value[0],\n isShared: [true, false],\n clientId: [\"some-client-id\"],\n clientSecret: [\"some-client-secret\"],\n facebookConfigId: [\"some-facebook-config-id\"],\n microsoftTenantId: [\"some-microsoft-tenant-id\"],\n }]]))] as const,\n }],\n }],\n domains: [{\n ...branchSchemaFuzzerConfig[0].domains[0],\n trustedDomains: [{\n \"some-domain-id\": [{\n baseUrl: [\"https://example.com/something-here\"],\n handlerPath: [\"/something-here\"],\n }],\n }],\n }],\n emails: [{\n ...branchSchemaFuzzerConfig[0].emails[0],\n server: [{\n isShared: [true, false],\n provider: [\"resend\", \"smtp\"] as const,\n host: [\"example.com\", \"://super weird host that's not valid\"],\n port: [1234, 0.12543, -100, Infinity],\n username: [\"some-username\", \"some username with a space\"],\n password: [\"some-password\", \"some password with a space\"],\n senderName: [\"Some Sender\"],\n senderEmail: [\"some-sender@example.com\", \"some invalid email\"],\n }],\n }],\n}] satisfies FuzzerConfig<EnvironmentConfigNormalizedOverride>;\n\nconst organizationSchemaFuzzerConfig = environmentSchemaFuzzerConfig satisfies FuzzerConfig<OrganizationConfigNormalizedOverride>;\n\nfunction setDeep<T>(obj: T, path: string[], value: any) {\n if (!isObjectLike(obj)) return obj;\n\n if (path.length === 0) {\n throw new Error(\"Path is empty\");\n } else if (path.length === 1) {\n set(obj as any, path[0], value);\n } else {\n const [key, ...rest] = path;\n setDeep(getOrUndefined(obj as any, key), rest, value);\n }\n}\n\nfunction createFuzzerInput<T>(config: FuzzerConfig<T>, progress: number): T {\n progress = Math.min(1, 2 * progress);\n const createShouldRandom = (strength: number) => {\n const chance = Math.random() * strength * 1.2 - 0.1;\n return () => Math.random() < chance;\n };\n const createShouldObjectDependent = (strength: number) => {\n const objectChance = Math.random() * strength * 1.2 - 0.1;\n const primitiveChance = Math.random() * strength * 1.2 - 0.1;\n return (v: any) => Math.random() * Math.random() < (isObjectLike(v) ? objectChance : primitiveChance);\n };\n\n const shouldKeep = createShouldObjectDependent(progress * 1);\n const shouldMakeNested = createShouldObjectDependent(1.25);\n const shouldNull = createShouldRandom(0.25);\n\n let res: any;\n const recurse = <U>(outputPath: string[], config: FuzzerConfig<U>, forceNested: boolean, forceNonNull: boolean) => {\n let subConfig: any = config[Math.floor(Math.random() * config.length)];\n const originalValue = isObjectLike(subConfig) ? (Array.isArray(subConfig) ? [] : {}) : subConfig;\n\n const newValue = forceNonNull || !shouldNull() ? originalValue : null;\n const newOutputPath = forceNested || shouldMakeNested(originalValue) || outputPath.length === 0 ? outputPath : [outputPath.join(\".\")];\n if (outputPath.length === 0) {\n res = newValue;\n } else {\n if (forceNested || shouldKeep(originalValue)) {\n setDeep(res, newOutputPath, newValue);\n }\n }\n if (isObjectLike(subConfig)) {\n for (const [key, newValue] of typedEntries(subConfig)) {\n recurse([...newOutputPath, key], newValue, Array.isArray(subConfig), Array.isArray(subConfig));\n }\n }\n };\n recurse<T>([], config, false, true);\n return res;\n}\n\nundefined?.test(\"fuzz schemas\", async ({ expect }) => {\n const totalIterations = process.env.CI ? 1000 : 200;\n for (let i = 0; i < totalIterations; i++) {\n const projectInput = createFuzzerInput<ProjectConfigNormalizedOverride>(projectSchemaFuzzerConfig, i / totalIterations);\n const branchInput = createFuzzerInput<BranchConfigNormalizedOverride>(branchSchemaFuzzerConfig, i / totalIterations);\n const environmentInput = createFuzzerInput<EnvironmentConfigNormalizedOverride>(environmentSchemaFuzzerConfig, i / totalIterations);\n const organizationInput = createFuzzerInput<OrganizationConfigNormalizedOverride>(organizationSchemaFuzzerConfig, i / totalIterations);\n\n try {\n const projectMigrated = migrateConfigOverride(\"project\", projectInput);\n await assertNoConfigOverrideErrors(projectConfigSchema, projectMigrated);\n const projectOverridden = override({}, projectMigrated);\n await sanitizeProjectConfig(normalize(applyProjectDefaults(projectOverridden), { onDotIntoNonObject: \"ignore\" }) as any);\n\n const branchMigrated = migrateConfigOverride(\"branch\", branchInput);\n await assertNoConfigOverrideErrors(branchConfigSchema, branchMigrated);\n const branchOverridden = override(projectOverridden, branchMigrated);\n await sanitizeBranchConfig(normalize(applyBranchDefaults(branchOverridden), { onDotIntoNonObject: \"ignore\" }) as any);\n\n const environmentMigrated = migrateConfigOverride(\"environment\", environmentInput);\n await assertNoConfigOverrideErrors(environmentConfigSchema, environmentMigrated);\n const environmentOverridden = override(branchOverridden, environmentMigrated);\n await sanitizeEnvironmentConfig(normalize(applyEnvironmentDefaults(environmentOverridden), { onDotIntoNonObject: \"ignore\" }) as any);\n\n const organizationMigrated = migrateConfigOverride(\"organization\", organizationInput);\n await assertNoConfigOverrideErrors(organizationConfigSchema, organizationMigrated);\n const organizationOverridden = override(environmentOverridden, organizationMigrated);\n await sanitizeOrganizationConfig(normalize(applyOrganizationDefaults(organizationOverridden), { onDotIntoNonObject: \"ignore\" }) as any);\n\n } catch (e) {\n const data = {\n cause: e,\n inputs: {\n projectInput,\n branchInput,\n environmentInput,\n organizationInput,\n },\n } as const;\n console.error(\"Failed to fuzz schema in iteration ${i}/${totalIterations}!\", nicify(data));\n throw new StackAssertionError(`Error in iteration ${i}/${totalIterations} of schema fuzz: ${e}`, { cause: e });\n }\n }\n});\n\n"],"mappings":"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","names":[]}