@ninetailed/experience.js-utils 2.2.9-beta.0 → 3.0.1-beta.4

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.
package/index.esm.js CHANGED
@@ -1,4 +1,4 @@
1
- import { logger } from '@ninetailed/experience.js';
1
+ import { logger } from '@ninetailed/experience.js-shared';
2
2
  import { z } from 'zod';
3
3
 
4
4
  const Audience = z.object({
@@ -31,6 +31,37 @@ const Variant = z.object({
31
31
  id: z.string()
32
32
  }).passthrough();
33
33
 
34
+ /**
35
+ * Zod helper for parsing arrays and ignore items not specified in the schema
36
+ *
37
+ * @param zodUnion - union of known types
38
+ *
39
+ * @example
40
+ * const binaryArraySchema = arrayIgnoreUnknown(z.union([z.literal('0'), z.literal('1')]))
41
+ * type BinaryArray = z.TypeOf<typeof binaryArraySchema>
42
+ *
43
+ * const binaryArray: BinaryArray = binaryArraySchema.parse(['0', '1', '2', '0'])
44
+ * console.log(binaryArray) // ['0', '1', '0']
45
+ */
46
+
47
+ function zodArrayIgnoreUnknown(zodType) {
48
+ const isKnownItem = item => zodType.safeParse(item).success;
49
+
50
+ return z.preprocess(val => toSafeArray(val).filter(isKnownItem), z.array(zodType));
51
+ }
52
+
53
+ function toSafeArray(item) {
54
+ if (isArray(item)) {
55
+ return item;
56
+ }
57
+
58
+ return [item];
59
+ }
60
+
61
+ function isArray(item) {
62
+ return Array.isArray(item);
63
+ }
64
+
34
65
  const Experience = z.object({
35
66
  id: z.string(),
36
67
 
@@ -57,7 +88,7 @@ const Experience = z.object({
57
88
  /**
58
89
  * All used variants of the experience (References to other Content Types)
59
90
  */
60
- variants: z.array(Variant).default([])
91
+ variants: zodArrayIgnoreUnknown(Variant).default([])
61
92
  });
62
93
 
63
94
  const Experiment = Experience.extend({
package/index.umd.js CHANGED
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@ninetailed/experience.js'), require('zod')) :
3
- typeof define === 'function' && define.amd ? define(['exports', '@ninetailed/experience.js', 'zod'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.UtilsJavascript = {}, global.experience_js, global.zod));
5
- })(this, (function (exports, experience_js, zod) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@ninetailed/experience.js-shared'), require('zod')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', '@ninetailed/experience.js-shared', 'zod'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.UtilsJavascript = {}, global.experience_jsShared, global.zod));
5
+ })(this, (function (exports, experience_jsShared, zod) { 'use strict';
6
6
 
7
7
  /*! *****************************************************************************
8
8
  Copyright (c) Microsoft Corporation.
@@ -60,6 +60,41 @@
60
60
  id: zod.z.string()
61
61
  }).passthrough();
62
62
 
63
+ /**
64
+ * Zod helper for parsing arrays and ignore items not specified in the schema
65
+ *
66
+ * @param zodUnion - union of known types
67
+ *
68
+ * @example
69
+ * const binaryArraySchema = arrayIgnoreUnknown(z.union([z.literal('0'), z.literal('1')]))
70
+ * type BinaryArray = z.TypeOf<typeof binaryArraySchema>
71
+ *
72
+ * const binaryArray: BinaryArray = binaryArraySchema.parse(['0', '1', '2', '0'])
73
+ * console.log(binaryArray) // ['0', '1', '0']
74
+ */
75
+
76
+ function zodArrayIgnoreUnknown(zodType) {
77
+ var isKnownItem = function (item) {
78
+ return zodType.safeParse(item).success;
79
+ };
80
+
81
+ return zod.z.preprocess(function (val) {
82
+ return toSafeArray(val).filter(isKnownItem);
83
+ }, zod.z.array(zodType));
84
+ }
85
+
86
+ function toSafeArray(item) {
87
+ if (isArray(item)) {
88
+ return item;
89
+ }
90
+
91
+ return [item];
92
+ }
93
+
94
+ function isArray(item) {
95
+ return Array.isArray(item);
96
+ }
97
+
63
98
  var Experience = zod.z.object({
64
99
  id: zod.z.string(),
65
100
 
@@ -86,7 +121,7 @@
86
121
  /**
87
122
  * All used variants of the experience (References to other Content Types)
88
123
  */
89
- variants: zod.z.array(Variant).default([])
124
+ variants: zodArrayIgnoreUnknown(Variant).default([])
90
125
  });
91
126
 
92
127
  var Experiment = Experience.extend({
@@ -106,7 +141,7 @@
106
141
  var parsedExperience = Experience.safeParse(experience);
107
142
 
108
143
  if (!parsedExperience.success) {
109
- experience_js.logger.warn('[Ninetailed ExperienceMapper]', 'Error parsing experience', parsedExperience.error.format());
144
+ experience_jsShared.logger.warn('[Ninetailed ExperienceMapper]', 'Error parsing experience', parsedExperience.error.format());
110
145
  throw new Error("[Ninetailed ExperienceMapper] The Experience Input is not valid. Please filter data first with \"ExperienceMapper.isExperienceEntry\".\n".concat(JSON.stringify(parsedExperience.error.format(), null, 2)));
111
146
  }
112
147
 
package/package.json CHANGED
@@ -1,21 +1,20 @@
1
1
  {
2
2
  "name": "@ninetailed/experience.js-utils",
3
- "version": "2.2.9-beta.0",
3
+ "version": "3.0.1-beta.4",
4
4
  "main": "./index.umd.js",
5
5
  "module": "./index.esm.js",
6
6
  "typings": "./index.d.ts",
7
7
  "dependencies": {
8
- "@ninetailed/experience.js": "2.2.9-beta.0",
9
- "analytics": "^0.8.0",
10
- "@ninetailed/experience.js-shared": "2.2.9-beta.0",
11
- "uuid": "^8.3.2",
8
+ "@ninetailed/experience.js": "3.0.1-beta.4",
9
+ "@ninetailed/experience.js-shared": "3.0.1-beta.4",
12
10
  "ts-toolbelt": "^9.6.0",
11
+ "diary": "^0.3.1",
12
+ "zod": "^3.18.0",
13
13
  "locale-enum": "^1.1.1",
14
14
  "i18n-iso-countries": "^7.3.0",
15
+ "analytics": "^0.8.0",
15
16
  "lodash": "^4.17.21",
16
- "murmurhash-js": "^1.0.0",
17
- "diary": "^0.3.1",
18
- "zod": "^3.18.0"
17
+ "murmurhash-js": "^1.0.0"
19
18
  },
20
19
  "peerDependencies": {}
21
20
  }
@@ -22,9 +22,7 @@ export declare const Experience: z.ZodObject<{
22
22
  id: string;
23
23
  }, {
24
24
  id?: string | undefined;
25
- }>; /**
26
- * The type if the experience (nt_experiment | nt_personalization)
27
- */
25
+ }>;
28
26
  variants: z.ZodArray<z.ZodObject<{
29
27
  id: z.ZodDefault<z.ZodString>;
30
28
  hidden: z.ZodDefault<z.ZodBoolean>;
@@ -34,9 +32,7 @@ export declare const Experience: z.ZodObject<{
34
32
  }, {
35
33
  id?: string | undefined;
36
34
  hidden?: boolean | undefined;
37
- }>, "many">; /**
38
- * The config of the experience (JSON)
39
- */
35
+ }>, "many">;
40
36
  }, "strip", z.ZodTypeAny, {
41
37
  baseline: {
42
38
  id: string;
@@ -92,13 +88,17 @@ export declare const Experience: z.ZodObject<{
92
88
  /**
93
89
  * All used variants of the experience (References to other Content Types)
94
90
  */
95
- variants: z.ZodDefault<z.ZodArray<z.ZodObject<{
91
+ variants: z.ZodDefault<z.ZodEffects<z.ZodArray<z.ZodObject<{
96
92
  id: z.ZodString;
97
93
  }, "passthrough", z.ZodTypeAny, {
98
94
  id: string;
99
95
  }, {
100
96
  id: string;
101
- }>, "many">>;
97
+ }>, "many">, {
98
+ id: string;
99
+ }[], {
100
+ id: string;
101
+ }[]>>;
102
102
  }, "strip", z.ZodTypeAny, {
103
103
  audience?: {
104
104
  id: string;
@@ -73,13 +73,17 @@ export declare const Experiment: z.ZodObject<z.extendShape<{
73
73
  }, {
74
74
  id: string;
75
75
  }>>>;
76
- variants: z.ZodDefault<z.ZodArray<z.ZodObject<{
76
+ variants: z.ZodDefault<z.ZodEffects<z.ZodArray<z.ZodObject<{
77
77
  id: z.ZodString;
78
78
  }, "passthrough", z.ZodTypeAny, {
79
79
  id: string;
80
80
  }, {
81
81
  id: string;
82
- }>, "many">>;
82
+ }>, "many">, {
83
+ id: string;
84
+ }[], {
85
+ id: string;
86
+ }[]>>;
83
87
  }, {
84
88
  type: z.ZodLiteral<"nt_experiment">;
85
89
  }>, "strip", z.ZodTypeAny, {
@@ -0,0 +1,14 @@
1
+ import { z, ZodTypeAny } from 'zod';
2
+ /**
3
+ * Zod helper for parsing arrays and ignore items not specified in the schema
4
+ *
5
+ * @param zodUnion - union of known types
6
+ *
7
+ * @example
8
+ * const binaryArraySchema = arrayIgnoreUnknown(z.union([z.literal('0'), z.literal('1')]))
9
+ * type BinaryArray = z.TypeOf<typeof binaryArraySchema>
10
+ *
11
+ * const binaryArray: BinaryArray = binaryArraySchema.parse(['0', '1', '2', '0'])
12
+ * console.log(binaryArray) // ['0', '1', '0']
13
+ */
14
+ export declare function zodArrayIgnoreUnknown<T extends ZodTypeAny>(zodType: T): z.ZodEffects<z.ZodArray<T, "many">, T["_output"][], T["_input"][]>;