@elliemae/ds-props-helpers 3.28.1-rc.1 → 3.29.0-next.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.
- package/dist/cjs/tests/validation/test.schema.js +8 -1
- package/dist/cjs/tests/validation/test.schema.js.map +2 -2
- package/dist/cjs/validation/errorTemplates.js +1 -1
- package/dist/cjs/validation/errorTemplates.js.map +2 -2
- package/dist/cjs/validation/typescriptParsers.js +9 -1
- package/dist/cjs/validation/typescriptParsers.js.map +2 -2
- package/dist/cjs/validation/typescriptValidator.js +1 -1
- package/dist/cjs/validation/typescriptValidator.js.map +2 -2
- package/dist/esm/tests/validation/test.schema.js +8 -1
- package/dist/esm/tests/validation/test.schema.js.map +2 -2
- package/dist/esm/validation/errorTemplates.js +1 -1
- package/dist/esm/validation/errorTemplates.js.map +2 -2
- package/dist/esm/validation/typescriptParsers.js +9 -1
- package/dist/esm/validation/typescriptParsers.js.map +2 -2
- package/dist/esm/validation/typescriptValidator.js +1 -1
- package/dist/esm/validation/typescriptValidator.js.map +2 -2
- package/dist/types/tests/validation/shapeWithObjectOf.validation.test.d.ts +1 -0
- package/dist/types/tests/validation/shapeWithObjectOfAndSignature.validation.test.d.ts +1 -0
- package/package.json +3 -3
|
@@ -63,7 +63,14 @@ const TestSchema = {
|
|
|
63
63
|
something: import_propTypes.PropTypes.oneOf(["thing", "object"]).description("something"),
|
|
64
64
|
isRequiredIf: import_propTypes.PropTypes.string.description("isRequiredIf").isRequiredIf((props) => props.something === "thing"),
|
|
65
65
|
objectOf: import_propTypes.PropTypes.objectOf(import_propTypes.PropTypes.string).description("Object of"),
|
|
66
|
-
objectOfArray: import_propTypes.PropTypes.objectOf(import_propTypes.PropTypes.arrayOf(import_propTypes.PropTypes.string)).description("Object of array")
|
|
66
|
+
objectOfArray: import_propTypes.PropTypes.objectOf(import_propTypes.PropTypes.arrayOf(import_propTypes.PropTypes.string)).description("Object of array"),
|
|
67
|
+
shapeWithObjectOf: import_propTypes.PropTypes.shape({
|
|
68
|
+
objectOf: import_propTypes.PropTypes.objectOf(import_propTypes.PropTypes.string).description("Object of")
|
|
69
|
+
}).description("Shape with object of"),
|
|
70
|
+
shapeWithObjectOfAndSignature: import_propTypes.PropTypes.shape({
|
|
71
|
+
signature: import_propTypes.PropTypes.func.signature("((a: string, b: number, c: Record<string, number>) => void)").description("Signature"),
|
|
72
|
+
objectOf: import_propTypes.PropTypes.objectOf(import_propTypes.PropTypes.string).description("Object of")
|
|
73
|
+
}).description("Shape with object of and signature")
|
|
67
74
|
};
|
|
68
75
|
const TestComponent = () => null;
|
|
69
76
|
const TestComponentWithSchema = (0, import_propTypes.describe)(TestComponent).description("Test Component");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/tests/validation/test.schema.js", "../../../../../../../scripts/build/transpile/react-shim.js"],
|
|
4
|
-
"sourcesContent": ["import { PropTypes, describe } from '../../propTypes/index.ts';\n\nconst TestSchema = {\n string: PropTypes.string.description('String'),\n number: PropTypes.number.description('Number'),\n boolean: PropTypes.bool.description('Boolean'),\n any: PropTypes.any.description('Any'),\n union: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).description('Union'),\n union2: PropTypes.oneOf(['A', 'B']).description('Union 2'),\n union3: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string),\n PropTypes.shape({ string: PropTypes.string }),\n ]).description('Union 3'),\n array: PropTypes.arrayOf(PropTypes.string).description('Array'),\n object: PropTypes.object.description('Object'),\n shape: PropTypes.shape({\n string: PropTypes.string.description('String').isRequired,\n number: PropTypes.number.description('Number'),\n boolean: PropTypes.bool.description('Boolean'),\n anotherShape: PropTypes.shape({\n string: PropTypes.string.description('String').isRequired,\n number: PropTypes.number.description('Number'),\n boolean: PropTypes.bool.description('Boolean'),\n }).description('Another shape'),\n }).description('Shape'),\n function: PropTypes.func.description('Function'),\n jsx: PropTypes.element.description('JSX'),\n node: PropTypes.node.description('Node'),\n something: PropTypes.oneOf(['thing', 'object']).description('something'),\n isRequiredIf: PropTypes.string.description('isRequiredIf').isRequiredIf((props) => props.something === 'thing'),\n objectOf: PropTypes.objectOf(PropTypes.string).description('Object of'),\n objectOfArray: PropTypes.objectOf(PropTypes.arrayOf(PropTypes.string)).description('Object of array'),\n};\n\nconst TestComponent = () => null;\n\nconst TestComponentWithSchema = describe(TestComponent).description('Test Component');\n\nTestComponentWithSchema.propTypes = TestSchema;\n\nexport const TypescriptSchema = TestComponentWithSchema.toTypescript();\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,uBAAoC;AAEpC,MAAM,aAAa;AAAA,EACjB,QAAQ,2BAAU,OAAO,YAAY,QAAQ;AAAA,EAC7C,QAAQ,2BAAU,OAAO,YAAY,QAAQ;AAAA,EAC7C,SAAS,2BAAU,KAAK,YAAY,SAAS;AAAA,EAC7C,KAAK,2BAAU,IAAI,YAAY,KAAK;AAAA,EACpC,OAAO,2BAAU,UAAU,CAAC,2BAAU,QAAQ,2BAAU,MAAM,CAAC,EAAE,YAAY,OAAO;AAAA,EACpF,QAAQ,2BAAU,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,YAAY,SAAS;AAAA,EACzD,QAAQ,2BAAU,UAAU;AAAA,IAC1B,2BAAU;AAAA,IACV,2BAAU,QAAQ,2BAAU,MAAM;AAAA,IAClC,2BAAU,MAAM,EAAE,QAAQ,2BAAU,OAAO,CAAC;AAAA,EAC9C,CAAC,EAAE,YAAY,SAAS;AAAA,EACxB,OAAO,2BAAU,QAAQ,2BAAU,MAAM,EAAE,YAAY,OAAO;AAAA,EAC9D,QAAQ,2BAAU,OAAO,YAAY,QAAQ;AAAA,EAC7C,OAAO,2BAAU,MAAM;AAAA,IACrB,QAAQ,2BAAU,OAAO,YAAY,QAAQ,EAAE;AAAA,IAC/C,QAAQ,2BAAU,OAAO,YAAY,QAAQ;AAAA,IAC7C,SAAS,2BAAU,KAAK,YAAY,SAAS;AAAA,IAC7C,cAAc,2BAAU,MAAM;AAAA,MAC5B,QAAQ,2BAAU,OAAO,YAAY,QAAQ,EAAE;AAAA,MAC/C,QAAQ,2BAAU,OAAO,YAAY,QAAQ;AAAA,MAC7C,SAAS,2BAAU,KAAK,YAAY,SAAS;AAAA,IAC/C,CAAC,EAAE,YAAY,eAAe;AAAA,EAChC,CAAC,EAAE,YAAY,OAAO;AAAA,EACtB,UAAU,2BAAU,KAAK,YAAY,UAAU;AAAA,EAC/C,KAAK,2BAAU,QAAQ,YAAY,KAAK;AAAA,EACxC,MAAM,2BAAU,KAAK,YAAY,MAAM;AAAA,EACvC,WAAW,2BAAU,MAAM,CAAC,SAAS,QAAQ,CAAC,EAAE,YAAY,WAAW;AAAA,EACvE,cAAc,2BAAU,OAAO,YAAY,cAAc,EAAE,aAAa,CAAC,UAAU,MAAM,cAAc,OAAO;AAAA,EAC9G,UAAU,2BAAU,SAAS,2BAAU,MAAM,EAAE,YAAY,WAAW;AAAA,EACtE,eAAe,2BAAU,SAAS,2BAAU,QAAQ,2BAAU,MAAM,CAAC,EAAE,YAAY,iBAAiB;
|
|
4
|
+
"sourcesContent": ["import { PropTypes, describe } from '../../propTypes/index.ts';\n\nconst TestSchema = {\n string: PropTypes.string.description('String'),\n number: PropTypes.number.description('Number'),\n boolean: PropTypes.bool.description('Boolean'),\n any: PropTypes.any.description('Any'),\n union: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).description('Union'),\n union2: PropTypes.oneOf(['A', 'B']).description('Union 2'),\n union3: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string),\n PropTypes.shape({ string: PropTypes.string }),\n ]).description('Union 3'),\n array: PropTypes.arrayOf(PropTypes.string).description('Array'),\n object: PropTypes.object.description('Object'),\n shape: PropTypes.shape({\n string: PropTypes.string.description('String').isRequired,\n number: PropTypes.number.description('Number'),\n boolean: PropTypes.bool.description('Boolean'),\n anotherShape: PropTypes.shape({\n string: PropTypes.string.description('String').isRequired,\n number: PropTypes.number.description('Number'),\n boolean: PropTypes.bool.description('Boolean'),\n }).description('Another shape'),\n }).description('Shape'),\n function: PropTypes.func.description('Function'),\n jsx: PropTypes.element.description('JSX'),\n node: PropTypes.node.description('Node'),\n something: PropTypes.oneOf(['thing', 'object']).description('something'),\n isRequiredIf: PropTypes.string.description('isRequiredIf').isRequiredIf((props) => props.something === 'thing'),\n objectOf: PropTypes.objectOf(PropTypes.string).description('Object of'),\n objectOfArray: PropTypes.objectOf(PropTypes.arrayOf(PropTypes.string)).description('Object of array'),\n shapeWithObjectOf: PropTypes.shape({\n objectOf: PropTypes.objectOf(PropTypes.string).description('Object of'),\n }).description('Shape with object of'),\n shapeWithObjectOfAndSignature: PropTypes.shape({\n signature: PropTypes.func\n .signature('((a: string, b: number, c: Record<string, number>) => void)')\n .description('Signature'),\n objectOf: PropTypes.objectOf(PropTypes.string).description('Object of'),\n }).description('Shape with object of and signature'),\n};\n\nconst TestComponent = () => null;\n\nconst TestComponentWithSchema = describe(TestComponent).description('Test Component');\n\nTestComponentWithSchema.propTypes = TestSchema;\n\nexport const TypescriptSchema = TestComponentWithSchema.toTypescript();\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,uBAAoC;AAEpC,MAAM,aAAa;AAAA,EACjB,QAAQ,2BAAU,OAAO,YAAY,QAAQ;AAAA,EAC7C,QAAQ,2BAAU,OAAO,YAAY,QAAQ;AAAA,EAC7C,SAAS,2BAAU,KAAK,YAAY,SAAS;AAAA,EAC7C,KAAK,2BAAU,IAAI,YAAY,KAAK;AAAA,EACpC,OAAO,2BAAU,UAAU,CAAC,2BAAU,QAAQ,2BAAU,MAAM,CAAC,EAAE,YAAY,OAAO;AAAA,EACpF,QAAQ,2BAAU,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,YAAY,SAAS;AAAA,EACzD,QAAQ,2BAAU,UAAU;AAAA,IAC1B,2BAAU;AAAA,IACV,2BAAU,QAAQ,2BAAU,MAAM;AAAA,IAClC,2BAAU,MAAM,EAAE,QAAQ,2BAAU,OAAO,CAAC;AAAA,EAC9C,CAAC,EAAE,YAAY,SAAS;AAAA,EACxB,OAAO,2BAAU,QAAQ,2BAAU,MAAM,EAAE,YAAY,OAAO;AAAA,EAC9D,QAAQ,2BAAU,OAAO,YAAY,QAAQ;AAAA,EAC7C,OAAO,2BAAU,MAAM;AAAA,IACrB,QAAQ,2BAAU,OAAO,YAAY,QAAQ,EAAE;AAAA,IAC/C,QAAQ,2BAAU,OAAO,YAAY,QAAQ;AAAA,IAC7C,SAAS,2BAAU,KAAK,YAAY,SAAS;AAAA,IAC7C,cAAc,2BAAU,MAAM;AAAA,MAC5B,QAAQ,2BAAU,OAAO,YAAY,QAAQ,EAAE;AAAA,MAC/C,QAAQ,2BAAU,OAAO,YAAY,QAAQ;AAAA,MAC7C,SAAS,2BAAU,KAAK,YAAY,SAAS;AAAA,IAC/C,CAAC,EAAE,YAAY,eAAe;AAAA,EAChC,CAAC,EAAE,YAAY,OAAO;AAAA,EACtB,UAAU,2BAAU,KAAK,YAAY,UAAU;AAAA,EAC/C,KAAK,2BAAU,QAAQ,YAAY,KAAK;AAAA,EACxC,MAAM,2BAAU,KAAK,YAAY,MAAM;AAAA,EACvC,WAAW,2BAAU,MAAM,CAAC,SAAS,QAAQ,CAAC,EAAE,YAAY,WAAW;AAAA,EACvE,cAAc,2BAAU,OAAO,YAAY,cAAc,EAAE,aAAa,CAAC,UAAU,MAAM,cAAc,OAAO;AAAA,EAC9G,UAAU,2BAAU,SAAS,2BAAU,MAAM,EAAE,YAAY,WAAW;AAAA,EACtE,eAAe,2BAAU,SAAS,2BAAU,QAAQ,2BAAU,MAAM,CAAC,EAAE,YAAY,iBAAiB;AAAA,EACpG,mBAAmB,2BAAU,MAAM;AAAA,IACjC,UAAU,2BAAU,SAAS,2BAAU,MAAM,EAAE,YAAY,WAAW;AAAA,EACxE,CAAC,EAAE,YAAY,sBAAsB;AAAA,EACrC,+BAA+B,2BAAU,MAAM;AAAA,IAC7C,WAAW,2BAAU,KAClB,UAAU,6DAA6D,EACvE,YAAY,WAAW;AAAA,IAC1B,UAAU,2BAAU,SAAS,2BAAU,MAAM,EAAE,YAAY,WAAW;AAAA,EACxE,CAAC,EAAE,YAAY,oCAAoC;AACrD;AAEA,MAAM,gBAAgB,MAAM;AAE5B,MAAM,8BAA0B,2BAAS,aAAa,EAAE,YAAY,gBAAgB;AAEpF,wBAAwB,YAAY;AAE7B,MAAM,mBAAmB,wBAAwB,aAAa;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -38,7 +38,7 @@ const throwTypeError = (componentName, validPropKey, invalidProp, validFormat) =
|
|
|
38
38
|
`${componentName}:: You are trying to pass a not valid "${validPropKey}" property,
|
|
39
39
|
please provide a valid type.
|
|
40
40
|
|
|
41
|
-
Received: ${invalidProp} (${typeof invalidProp})
|
|
41
|
+
Received: "${String(invalidProp)}" (${typeof invalidProp})
|
|
42
42
|
Expected: (${validFormat.replace("\n", " or ")})
|
|
43
43
|
`
|
|
44
44
|
);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/validation/errorTemplates.ts", "../../../../../../scripts/build/transpile/react-shim.js"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable max-params */\nexport const throwTypeError = (\n componentName: string,\n validPropKey: string,\n invalidProp: unknown,\n validFormat: string,\n): void => {\n throw new Error(\n `${componentName}:: You are trying to pass a not valid \"${validPropKey}\" property, \n please provide a valid type.\n\n Received: ${invalidProp} (${typeof invalidProp})\n Expected: (${validFormat.replace('\\n', ' or ')})\n `,\n );\n};\n\nexport const throwRequiredError = (componentName: string, validPropKey: string): void => {\n throw new Error(\n `${componentName}:: Please provide a/an \"${validPropKey}\" property to use this component. \n This property is required.\n `,\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADChB,MAAM,iBAAiB,CAC5B,eACA,cACA,aACA,gBACS;AACT,QAAM,IAAI;AAAA,IACR,GAAG,uDAAuD;AAAA;AAAA;AAAA,
|
|
4
|
+
"sourcesContent": ["/* eslint-disable max-params */\nexport const throwTypeError = (\n componentName: string,\n validPropKey: string,\n invalidProp: unknown,\n validFormat: string,\n): void => {\n throw new Error(\n `${componentName}:: You are trying to pass a not valid \"${validPropKey}\" property, \n please provide a valid type.\n\n Received: \"${String(invalidProp)}\" (${typeof invalidProp})\n Expected: (${validFormat.replace('\\n', ' or ')})\n `,\n );\n};\n\nexport const throwRequiredError = (componentName: string, validPropKey: string): void => {\n throw new Error(\n `${componentName}:: Please provide a/an \"${validPropKey}\" property to use this component. \n This property is required.\n `,\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADChB,MAAM,iBAAiB,CAC5B,eACA,cACA,aACA,gBACS;AACT,QAAM,IAAI;AAAA,IACR,GAAG,uDAAuD;AAAA;AAAA;AAAA,eAG/C,OAAO,WAAW,OAAO,OAAO;AAAA,eAChC,YAAY,QAAQ,MAAM,MAAM;AAAA;AAAA,EAE7C;AACF;AAEO,MAAM,qBAAqB,CAAC,eAAuB,iBAA+B;AACvF,QAAM,IAAI;AAAA,IACR,GAAG,wCAAwC;AAAA;AAAA;AAAA,EAG7C;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -39,7 +39,7 @@ const typescriptObjectParser = (format) => {
|
|
|
39
39
|
let shouldAppendToKey = true;
|
|
40
40
|
const pushPair = () => {
|
|
41
41
|
if (lastKey)
|
|
42
|
-
keyValuePairs.push([lastKey, lastValue]);
|
|
42
|
+
keyValuePairs.push([lastKey, lastValue.slice(1)]);
|
|
43
43
|
lastKey = "";
|
|
44
44
|
lastValue = "";
|
|
45
45
|
shouldAppendToKey = true;
|
|
@@ -66,6 +66,14 @@ const typescriptObjectParser = (format) => {
|
|
|
66
66
|
else
|
|
67
67
|
lastValue += char;
|
|
68
68
|
} else if (char === " ") {
|
|
69
|
+
if (!shouldAppendToKey)
|
|
70
|
+
lastValue += char;
|
|
71
|
+
} else if (char === "(") {
|
|
72
|
+
depth += 1;
|
|
73
|
+
lastValue += char;
|
|
74
|
+
} else if (char === ")") {
|
|
75
|
+
depth -= 1;
|
|
76
|
+
lastValue += char;
|
|
69
77
|
} else if (shouldAppendToKey)
|
|
70
78
|
lastKey += char;
|
|
71
79
|
else
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/validation/typescriptParsers.ts", "../../../../../../scripts/build/transpile/react-shim.js"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable complexity */\nexport const typescriptObjectParser = (format: string)
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADChB,MAAM,yBAAyB,CAAC,
|
|
4
|
+
"sourcesContent": ["/* eslint-disable complexity */\nexport const typescriptObjectParser = (format: string) => {\n const keyValuePairs: [string, string][] = [];\n\n // State of the algorithm\n let lastKey = '';\n let lastValue = '';\n let shouldAppendToKey = true;\n\n const pushPair = () => {\n if (lastKey) keyValuePairs.push([lastKey, lastValue.slice(1)]);\n lastKey = '';\n lastValue = '';\n shouldAppendToKey = true;\n };\n\n // Complex -- but working -- logic\n let depth = 0;\n format.split('').forEach((char) => {\n if (char === '{') {\n depth += 1;\n if (depth > 1) lastValue += char;\n } else if (char === '}') {\n if (depth > 1) lastValue += char;\n depth -= 1;\n if (depth === 1) pushPair();\n } else if (char === ':') {\n shouldAppendToKey = false;\n if (depth > 1) lastValue += char;\n } else if (char === ',') {\n if (depth === 1) pushPair();\n else lastValue += char;\n } else if (char === ' ') {\n // Do nothing\n if (!shouldAppendToKey) lastValue += char;\n } else if (char === '(') {\n depth += 1;\n lastValue += char;\n } else if (char === ')') {\n depth -= 1;\n lastValue += char;\n } else if (shouldAppendToKey) lastKey += char;\n else lastValue += char;\n });\n pushPair();\n\n return keyValuePairs;\n};\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADChB,MAAM,yBAAyB,CAAC,WAAmB;AACxD,QAAM,gBAAoC,CAAC;AAG3C,MAAI,UAAU;AACd,MAAI,YAAY;AAChB,MAAI,oBAAoB;AAExB,QAAM,WAAW,MAAM;AACrB,QAAI;AAAS,oBAAc,KAAK,CAAC,SAAS,UAAU,MAAM,CAAC,CAAC,CAAC;AAC7D,cAAU;AACV,gBAAY;AACZ,wBAAoB;AAAA,EACtB;AAGA,MAAI,QAAQ;AACZ,SAAO,MAAM,EAAE,EAAE,QAAQ,CAAC,SAAS;AACjC,QAAI,SAAS,KAAK;AAChB,eAAS;AACT,UAAI,QAAQ;AAAG,qBAAa;AAAA,IAC9B,WAAW,SAAS,KAAK;AACvB,UAAI,QAAQ;AAAG,qBAAa;AAC5B,eAAS;AACT,UAAI,UAAU;AAAG,iBAAS;AAAA,IAC5B,WAAW,SAAS,KAAK;AACvB,0BAAoB;AACpB,UAAI,QAAQ;AAAG,qBAAa;AAAA,IAC9B,WAAW,SAAS,KAAK;AACvB,UAAI,UAAU;AAAG,iBAAS;AAAA;AACrB,qBAAa;AAAA,IACpB,WAAW,SAAS,KAAK;AAEvB,UAAI,CAAC;AAAmB,qBAAa;AAAA,IACvC,WAAW,SAAS,KAAK;AACvB,eAAS;AACT,mBAAa;AAAA,IACf,WAAW,SAAS,KAAK;AACvB,eAAS;AACT,mBAAa;AAAA,IACf,WAAW;AAAmB,iBAAW;AAAA;AACpC,mBAAa;AAAA,EACpB,CAAC;AACD,WAAS;AAET,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -106,7 +106,7 @@ const validateObject = (schemaName, key, value, format, validationsMemo, nextVal
|
|
|
106
106
|
keyValuePairs.forEach(([objectKey, objectValue]) => {
|
|
107
107
|
const trueKey = objectKey.slice(-1) === "?" ? objectKey.slice(0, -1) : objectKey;
|
|
108
108
|
if (trueKey === objectKey && !(trueKey in value)) {
|
|
109
|
-
(0, import_errorTemplates.throwRequiredError)(schemaName,
|
|
109
|
+
(0, import_errorTemplates.throwRequiredError)(schemaName, trueKey);
|
|
110
110
|
}
|
|
111
111
|
if (trueKey in value) {
|
|
112
112
|
validateValueWithFormat(
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/validation/typescriptValidator.ts", "../../../../../../scripts/build/transpile/react-shim.js"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable complexity */\n/* eslint-disable max-lines */\n/* eslint-disable max-params */\nimport type { PropsWithChildren, WeakValidationMap } from 'react';\nimport { useMemo, useRef } from 'react';\nimport type { TypescriptDocumentation } from '../propTypes/types.js';\nimport { describe } from '../propTypes/index.js';\nimport { throwRequiredError, throwTypeError } from './errorTemplates.js';\nimport {\n isArray,\n isFunction,\n isJSXorNode,\n isObject,\n isPrimitiveType,\n isSomethingWithParenthesis,\n isString,\n isUnion,\n isUndefined,\n isNull,\n isObjectOf,\n} from './typescriptGuards.js';\nimport { typescriptObjectParser } from './typescriptParsers.js';\n\ntype ValidatorFn = (\n schemaName: string,\n key: string,\n value: unknown,\n format: string,\n validationsMemo: Record<symbol, string>,\n nextValidationsMemo: Record<symbol, string>,\n) => void;\n\n// =============================================================================\n// Atom Validators\n// =============================================================================\n\n// This functions will validate something from the data\n// and optionally recursively apply `validateValueWithFormat`\n// in smaller parts\n\nconst validateUndefined: ValidatorFn = (schemaName, key, value, format) => {\n if (value !== undefined || value === 'undefined') {\n throwTypeError(schemaName, key, value, format);\n }\n};\nconst validateNull: ValidatorFn = (schemaName, key, value, format) => {\n if (value !== null || value === 'null') {\n throwTypeError(schemaName, key, value, format);\n }\n};\nconst validatePrimitiveType: ValidatorFn = (schemaName, key, value, format) => {\n if (typeof value !== format) {\n throwTypeError(schemaName, key, value, format);\n }\n};\n\nconst validateString: ValidatorFn = (schemaName, key, value, format) => {\n if (value !== format.slice(1, -1)) {\n throwTypeError(schemaName, key, value, format);\n }\n};\n\nconst validateArray: ValidatorFn = (schemaName, key, value, format, validationsMemo, nextValidationsMemo) => {\n // Check that we have an array\n if (!Array.isArray(value)) {\n throwTypeError(schemaName, key, value, format);\n }\n\n // Check that each element inside satisfies the format\n (value as unknown[]).forEach((val, index) => {\n // this is a recursive func, we need to invoke it before it's defined.\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n validateValueWithFormat(\n schemaName,\n `${key}[${index}]`,\n val,\n format.slice(0, -2),\n validationsMemo,\n nextValidationsMemo,\n );\n });\n};\nfunction isObjectType(value: unknown): value is Record<string, unknown> {\n return !(typeof value !== 'object' || Array.isArray(value));\n}\n\nconst validateObjectOf: ValidatorFn = (schemaName, key, value, format, validationsMemo, nextValidationsMemo) => {\n const valuesIsObject = isObjectType(value);\n // Check that we have an object\n if (!valuesIsObject) {\n throwTypeError(schemaName, key, value, format);\n return;\n }\n\n const valuesFormat = format.slice('{ [key: string]: '.length, -2);\n\n Object.keys(value).forEach((objectKey) => {\n // this is a recursive func, we need to invoke it before it's defined.\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n validateValueWithFormat(\n schemaName,\n `${key}[${objectKey}]`,\n value[objectKey],\n valuesFormat,\n validationsMemo,\n nextValidationsMemo,\n );\n });\n};\n\nconst validateObject: ValidatorFn = (schemaName, key, value, format, validationsMemo, nextValidationsMemo) => {\n const valuesIsObject = isObjectType(value);\n // Check that we have an object\n if (!valuesIsObject) {\n throwTypeError(schemaName, key, value, format);\n return;\n }\n\n if (format === 'object') return;\n\n const keyValuePairs = typescriptObjectParser(format);\n // Now we have the key - value pairs\n // Each key could either be required or not\n // Just recursively check the object\n\n keyValuePairs.forEach(([objectKey, objectValue]) => {\n const trueKey = objectKey.slice(-1) === '?' ? objectKey.slice(0, -1) : objectKey;\n\n if (trueKey === objectKey && !(trueKey in value)) {\n throwRequiredError(schemaName, key);\n }\n\n if (trueKey in value) {\n // this is a recursive func, we need to invoke it before it's defined.\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n validateValueWithFormat(\n schemaName,\n `${key}[${trueKey}]`,\n value[trueKey],\n objectValue,\n validationsMemo,\n nextValidationsMemo,\n );\n }\n });\n};\n\nconst validateUnion: ValidatorFn = (schemaName, key, value, format, validationsMemo, nextValidationsMemo) => {\n const possibilities = format.split(/\\s?\\|\\s?/);\n\n const errors = [];\n\n possibilities.forEach((possibility) => {\n try {\n // this is a recursive func, we need to invoke it before it's defined.\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n validateValueWithFormat(schemaName, key, value, possibility, validationsMemo, nextValidationsMemo);\n } catch (e) {\n errors.push(e);\n }\n });\n\n if (errors.length === possibilities.length) {\n throwTypeError(schemaName, key, value, format);\n }\n};\n\nconst validateFunction: ValidatorFn = (schemaName, key, value, format) => {\n // Check that we have a function\n if (typeof value !== 'function') {\n throwTypeError(schemaName, key, value, format);\n }\n};\n\nfunction isJSXElement(value: unknown): value is JSX.Element {\n return value === null || (typeof value === 'object' && value !== null && '$$typeof' in value);\n}\nconst validateJSXorNode: ValidatorFn = (schemaName, key, value, format) => {\n const valueIsJSX = isJSXElement(value);\n if (format === 'JSX.Element' && !valueIsJSX) {\n throwTypeError(schemaName, key, value, format);\n }\n};\n\n// =============================================================================\n// Schema validator\n// =============================================================================\n\nconst validateValueWithFormat: ValidatorFn = (schemaName, key, value, format, validationsMemo, nextValidationsMemo) => {\n nextValidationsMemo[value as symbol] = format;\n\n if ((value as symbol) in validationsMemo) {\n // We already validated this value on this format\n return;\n }\n\n if (isUndefined(format)) {\n validateUndefined(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isNull(format)) {\n validateNull(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isPrimitiveType(format)) {\n validatePrimitiveType(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isUnion(format)) {\n validateUnion(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isString(format)) {\n validateString(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isArray(format)) {\n validateArray(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isObjectOf(format)) {\n validateObjectOf(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isObject(format)) {\n validateObject(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isFunction(format)) {\n validateFunction(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isJSXorNode(format)) {\n validateJSXorNode(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isSomethingWithParenthesis(format)) {\n validateValueWithFormat(schemaName, key, value, format.slice(1, -1), validationsMemo, nextValidationsMemo);\n }\n};\n\nexport const validateTypescriptPropTypesImplementation = (\n props: PropsWithChildren<Record<string, unknown>>,\n schema: TypescriptDocumentation,\n validationsMemo: Record<string, string> = {},\n nextValidationsMemo: Record<string, string> = {},\n): void => {\n const { properties, name: schemaName } = schema;\n\n properties.forEach((property) => {\n const { name, format, required, isRequiredIf, omitValidation } = property;\n\n const requiredConditionally = isRequiredIf && isRequiredIf(props);\n\n if (omitValidation) {\n return;\n }\n\n if (required && !(name in props)) {\n throwRequiredError(schema.name, name);\n }\n\n if (requiredConditionally && !(name in props)) {\n throwRequiredError(schema.name, name);\n }\n\n const shouldValidateProperty = props[name] !== undefined || required || requiredConditionally;\n\n if (name in props && format && shouldValidateProperty) {\n validateValueWithFormat(schemaName, name, props[name], format, validationsMemo, nextValidationsMemo);\n }\n });\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const useValidateTypescriptPropTypes = <T = Record<string, any>>(\n props: PropsWithChildren<T>,\n propTypes: WeakValidationMap<unknown>,\n componentDisplayName: string,\n): void => {\n if (!Boolean(componentDisplayName)) {\n throw new Error('Provide display name for the component to use for validation');\n }\n\n const validationsMemo = useRef<Record<string, string>>({});\n\n const typescriptSchema = useMemo(() => {\n const Component = () => {};\n\n const DescribedComponent = describe(Component);\n DescribedComponent.propTypes = propTypes;\n DescribedComponent.displayName = componentDisplayName;\n return DescribedComponent.toTypescript();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [propTypes]);\n\n useMemo(() => {\n const nextValidationsMemo = {};\n\n validateTypescriptPropTypesImplementation(props, typescriptSchema, validationsMemo.current, nextValidationsMemo);\n validationsMemo.current = nextValidationsMemo;\n return 'WE DONT NEED RETURN just the memo';\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props]);\n};\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADIvB,mBAAgC;AAEhC,uBAAyB;AACzB,4BAAmD;AACnD,8BAYO;AACP,+BAAuC;AAmBvC,MAAM,oBAAiC,CAAC,YAAY,KAAK,OAAO,WAAW;AACzE,MAAI,UAAU,UAAa,UAAU,aAAa;AAChD,8CAAe,YAAY,KAAK,OAAO,MAAM;AAAA,EAC/C;AACF;AACA,MAAM,eAA4B,CAAC,YAAY,KAAK,OAAO,WAAW;AACpE,MAAI,UAAU,QAAQ,UAAU,QAAQ;AACtC,8CAAe,YAAY,KAAK,OAAO,MAAM;AAAA,EAC/C;AACF;AACA,MAAM,wBAAqC,CAAC,YAAY,KAAK,OAAO,WAAW;AAC7E,MAAI,OAAO,UAAU,QAAQ;AAC3B,8CAAe,YAAY,KAAK,OAAO,MAAM;AAAA,EAC/C;AACF;AAEA,MAAM,iBAA8B,CAAC,YAAY,KAAK,OAAO,WAAW;AACtE,MAAI,UAAU,OAAO,MAAM,GAAG,EAAE,GAAG;AACjC,8CAAe,YAAY,KAAK,OAAO,MAAM;AAAA,EAC/C;AACF;AAEA,MAAM,gBAA6B,CAAC,YAAY,KAAK,OAAO,QAAQ,iBAAiB,wBAAwB;AAE3G,MAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,8CAAe,YAAY,KAAK,OAAO,MAAM;AAAA,EAC/C;AAGA,EAAC,MAAoB,QAAQ,CAAC,KAAK,UAAU;AAG3C;AAAA,MACE;AAAA,MACA,GAAG,OAAO;AAAA,MACV;AAAA,MACA,OAAO,MAAM,GAAG,EAAE;AAAA,MAClB;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AACH;AACA,SAAS,aAAa,OAAkD;AACtE,SAAO,EAAE,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK;AAC3D;AAEA,MAAM,mBAAgC,CAAC,YAAY,KAAK,OAAO,QAAQ,iBAAiB,wBAAwB;AAC9G,QAAM,iBAAiB,aAAa,KAAK;AAEzC,MAAI,CAAC,gBAAgB;AACnB,8CAAe,YAAY,KAAK,OAAO,MAAM;AAC7C;AAAA,EACF;AAEA,QAAM,eAAe,OAAO,MAAM,oBAAoB,QAAQ,EAAE;AAEhE,SAAO,KAAK,KAAK,EAAE,QAAQ,CAAC,cAAc;AAGxC;AAAA,MACE;AAAA,MACA,GAAG,OAAO;AAAA,MACV,MAAM,SAAS;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,MAAM,iBAA8B,CAAC,YAAY,KAAK,OAAO,QAAQ,iBAAiB,wBAAwB;AAC5G,QAAM,iBAAiB,aAAa,KAAK;AAEzC,MAAI,CAAC,gBAAgB;AACnB,8CAAe,YAAY,KAAK,OAAO,MAAM;AAC7C;AAAA,EACF;AAEA,MAAI,WAAW;AAAU;AAEzB,QAAM,oBAAgB,iDAAuB,MAAM;AAKnD,gBAAc,QAAQ,CAAC,CAAC,WAAW,WAAW,MAAM;AAClD,UAAM,UAAU,UAAU,MAAM,EAAE,MAAM,MAAM,UAAU,MAAM,GAAG,EAAE,IAAI;AAEvE,QAAI,YAAY,aAAa,EAAE,WAAW,QAAQ;AAChD,oDAAmB,YAAY,
|
|
4
|
+
"sourcesContent": ["/* eslint-disable complexity */\n/* eslint-disable max-lines */\n/* eslint-disable max-params */\nimport type { PropsWithChildren, WeakValidationMap } from 'react';\nimport { useMemo, useRef } from 'react';\nimport type { TypescriptDocumentation } from '../propTypes/types.js';\nimport { describe } from '../propTypes/index.js';\nimport { throwRequiredError, throwTypeError } from './errorTemplates.js';\nimport {\n isArray,\n isFunction,\n isJSXorNode,\n isObject,\n isPrimitiveType,\n isSomethingWithParenthesis,\n isString,\n isUnion,\n isUndefined,\n isNull,\n isObjectOf,\n} from './typescriptGuards.js';\nimport { typescriptObjectParser } from './typescriptParsers.js';\n\ntype ValidatorFn = (\n schemaName: string,\n key: string,\n value: unknown,\n format: string,\n validationsMemo: Record<symbol, string>,\n nextValidationsMemo: Record<symbol, string>,\n) => void;\n\n// =============================================================================\n// Atom Validators\n// =============================================================================\n\n// This functions will validate something from the data\n// and optionally recursively apply `validateValueWithFormat`\n// in smaller parts\n\nconst validateUndefined: ValidatorFn = (schemaName, key, value, format) => {\n if (value !== undefined || value === 'undefined') {\n throwTypeError(schemaName, key, value, format);\n }\n};\nconst validateNull: ValidatorFn = (schemaName, key, value, format) => {\n if (value !== null || value === 'null') {\n throwTypeError(schemaName, key, value, format);\n }\n};\nconst validatePrimitiveType: ValidatorFn = (schemaName, key, value, format) => {\n if (typeof value !== format) {\n throwTypeError(schemaName, key, value, format);\n }\n};\n\nconst validateString: ValidatorFn = (schemaName, key, value, format) => {\n if (value !== format.slice(1, -1)) {\n throwTypeError(schemaName, key, value, format);\n }\n};\n\nconst validateArray: ValidatorFn = (schemaName, key, value, format, validationsMemo, nextValidationsMemo) => {\n // Check that we have an array\n if (!Array.isArray(value)) {\n throwTypeError(schemaName, key, value, format);\n }\n\n // Check that each element inside satisfies the format\n (value as unknown[]).forEach((val, index) => {\n // this is a recursive func, we need to invoke it before it's defined.\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n validateValueWithFormat(\n schemaName,\n `${key}[${index}]`,\n val,\n format.slice(0, -2),\n validationsMemo,\n nextValidationsMemo,\n );\n });\n};\nfunction isObjectType(value: unknown): value is Record<string, unknown> {\n return !(typeof value !== 'object' || Array.isArray(value));\n}\n\nconst validateObjectOf: ValidatorFn = (schemaName, key, value, format, validationsMemo, nextValidationsMemo) => {\n const valuesIsObject = isObjectType(value);\n // Check that we have an object\n if (!valuesIsObject) {\n throwTypeError(schemaName, key, value, format);\n return;\n }\n\n const valuesFormat = format.slice('{ [key: string]: '.length, -2);\n\n Object.keys(value).forEach((objectKey) => {\n // this is a recursive func, we need to invoke it before it's defined.\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n validateValueWithFormat(\n schemaName,\n `${key}[${objectKey}]`,\n value[objectKey],\n valuesFormat,\n validationsMemo,\n nextValidationsMemo,\n );\n });\n};\n\nconst validateObject: ValidatorFn = (schemaName, key, value, format, validationsMemo, nextValidationsMemo) => {\n const valuesIsObject = isObjectType(value);\n // Check that we have an object\n if (!valuesIsObject) {\n throwTypeError(schemaName, key, value, format);\n return;\n }\n\n if (format === 'object') return;\n\n const keyValuePairs = typescriptObjectParser(format);\n // Now we have the key - value pairs\n // Each key could either be required or not\n // Just recursively check the object\n\n keyValuePairs.forEach(([objectKey, objectValue]) => {\n const trueKey = objectKey.slice(-1) === '?' ? objectKey.slice(0, -1) : objectKey;\n\n if (trueKey === objectKey && !(trueKey in value)) {\n throwRequiredError(schemaName, trueKey);\n }\n\n if (trueKey in value) {\n // this is a recursive func, we need to invoke it before it's defined.\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n validateValueWithFormat(\n schemaName,\n `${key}[${trueKey}]`,\n value[trueKey],\n objectValue,\n validationsMemo,\n nextValidationsMemo,\n );\n }\n });\n};\n\nconst validateUnion: ValidatorFn = (schemaName, key, value, format, validationsMemo, nextValidationsMemo) => {\n const possibilities = format.split(/\\s?\\|\\s?/);\n\n const errors = [];\n\n possibilities.forEach((possibility) => {\n try {\n // this is a recursive func, we need to invoke it before it's defined.\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n validateValueWithFormat(schemaName, key, value, possibility, validationsMemo, nextValidationsMemo);\n } catch (e) {\n errors.push(e);\n }\n });\n\n if (errors.length === possibilities.length) {\n throwTypeError(schemaName, key, value, format);\n }\n};\n\nconst validateFunction: ValidatorFn = (schemaName, key, value, format) => {\n // Check that we have a function\n if (typeof value !== 'function') {\n throwTypeError(schemaName, key, value, format);\n }\n};\n\nfunction isJSXElement(value: unknown): value is JSX.Element {\n return value === null || (typeof value === 'object' && value !== null && '$$typeof' in value);\n}\nconst validateJSXorNode: ValidatorFn = (schemaName, key, value, format) => {\n const valueIsJSX = isJSXElement(value);\n if (format === 'JSX.Element' && !valueIsJSX) {\n throwTypeError(schemaName, key, value, format);\n }\n};\n\n// =============================================================================\n// Schema validator\n// =============================================================================\n\nconst validateValueWithFormat: ValidatorFn = (schemaName, key, value, format, validationsMemo, nextValidationsMemo) => {\n nextValidationsMemo[value as symbol] = format;\n\n if ((value as symbol) in validationsMemo) {\n // We already validated this value on this format\n return;\n }\n\n if (isUndefined(format)) {\n validateUndefined(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isNull(format)) {\n validateNull(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isPrimitiveType(format)) {\n validatePrimitiveType(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isUnion(format)) {\n validateUnion(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isString(format)) {\n validateString(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isArray(format)) {\n validateArray(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isObjectOf(format)) {\n validateObjectOf(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isObject(format)) {\n validateObject(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isFunction(format)) {\n validateFunction(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isJSXorNode(format)) {\n validateJSXorNode(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isSomethingWithParenthesis(format)) {\n validateValueWithFormat(schemaName, key, value, format.slice(1, -1), validationsMemo, nextValidationsMemo);\n }\n};\n\nexport const validateTypescriptPropTypesImplementation = (\n props: PropsWithChildren<Record<string, unknown>>,\n schema: TypescriptDocumentation,\n validationsMemo: Record<string, string> = {},\n nextValidationsMemo: Record<string, string> = {},\n): void => {\n const { properties, name: schemaName } = schema;\n\n properties.forEach((property) => {\n const { name, format, required, isRequiredIf, omitValidation } = property;\n\n const requiredConditionally = isRequiredIf && isRequiredIf(props);\n\n if (omitValidation) {\n return;\n }\n\n if (required && !(name in props)) {\n throwRequiredError(schema.name, name);\n }\n\n if (requiredConditionally && !(name in props)) {\n throwRequiredError(schema.name, name);\n }\n\n const shouldValidateProperty = props[name] !== undefined || required || requiredConditionally;\n\n if (name in props && format && shouldValidateProperty) {\n validateValueWithFormat(schemaName, name, props[name], format, validationsMemo, nextValidationsMemo);\n }\n });\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const useValidateTypescriptPropTypes = <T = Record<string, any>>(\n props: PropsWithChildren<T>,\n propTypes: WeakValidationMap<unknown>,\n componentDisplayName: string,\n): void => {\n if (!Boolean(componentDisplayName)) {\n throw new Error('Provide display name for the component to use for validation');\n }\n\n const validationsMemo = useRef<Record<string, string>>({});\n\n const typescriptSchema = useMemo(() => {\n const Component = () => {};\n\n const DescribedComponent = describe(Component);\n DescribedComponent.propTypes = propTypes;\n DescribedComponent.displayName = componentDisplayName;\n return DescribedComponent.toTypescript();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [propTypes]);\n\n useMemo(() => {\n const nextValidationsMemo = {};\n\n validateTypescriptPropTypesImplementation(props, typescriptSchema, validationsMemo.current, nextValidationsMemo);\n validationsMemo.current = nextValidationsMemo;\n return 'WE DONT NEED RETURN just the memo';\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props]);\n};\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -30,7 +30,14 @@ const TestSchema = {
|
|
|
30
30
|
something: PropTypes.oneOf(["thing", "object"]).description("something"),
|
|
31
31
|
isRequiredIf: PropTypes.string.description("isRequiredIf").isRequiredIf((props) => props.something === "thing"),
|
|
32
32
|
objectOf: PropTypes.objectOf(PropTypes.string).description("Object of"),
|
|
33
|
-
objectOfArray: PropTypes.objectOf(PropTypes.arrayOf(PropTypes.string)).description("Object of array")
|
|
33
|
+
objectOfArray: PropTypes.objectOf(PropTypes.arrayOf(PropTypes.string)).description("Object of array"),
|
|
34
|
+
shapeWithObjectOf: PropTypes.shape({
|
|
35
|
+
objectOf: PropTypes.objectOf(PropTypes.string).description("Object of")
|
|
36
|
+
}).description("Shape with object of"),
|
|
37
|
+
shapeWithObjectOfAndSignature: PropTypes.shape({
|
|
38
|
+
signature: PropTypes.func.signature("((a: string, b: number, c: Record<string, number>) => void)").description("Signature"),
|
|
39
|
+
objectOf: PropTypes.objectOf(PropTypes.string).description("Object of")
|
|
40
|
+
}).description("Shape with object of and signature")
|
|
34
41
|
};
|
|
35
42
|
const TestComponent = () => null;
|
|
36
43
|
const TestComponentWithSchema = describe(TestComponent).description("Test Component");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/tests/validation/test.schema.js"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { PropTypes, describe } from '../../propTypes/index.ts';\n\nconst TestSchema = {\n string: PropTypes.string.description('String'),\n number: PropTypes.number.description('Number'),\n boolean: PropTypes.bool.description('Boolean'),\n any: PropTypes.any.description('Any'),\n union: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).description('Union'),\n union2: PropTypes.oneOf(['A', 'B']).description('Union 2'),\n union3: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string),\n PropTypes.shape({ string: PropTypes.string }),\n ]).description('Union 3'),\n array: PropTypes.arrayOf(PropTypes.string).description('Array'),\n object: PropTypes.object.description('Object'),\n shape: PropTypes.shape({\n string: PropTypes.string.description('String').isRequired,\n number: PropTypes.number.description('Number'),\n boolean: PropTypes.bool.description('Boolean'),\n anotherShape: PropTypes.shape({\n string: PropTypes.string.description('String').isRequired,\n number: PropTypes.number.description('Number'),\n boolean: PropTypes.bool.description('Boolean'),\n }).description('Another shape'),\n }).description('Shape'),\n function: PropTypes.func.description('Function'),\n jsx: PropTypes.element.description('JSX'),\n node: PropTypes.node.description('Node'),\n something: PropTypes.oneOf(['thing', 'object']).description('something'),\n isRequiredIf: PropTypes.string.description('isRequiredIf').isRequiredIf((props) => props.something === 'thing'),\n objectOf: PropTypes.objectOf(PropTypes.string).description('Object of'),\n objectOfArray: PropTypes.objectOf(PropTypes.arrayOf(PropTypes.string)).description('Object of array'),\n};\n\nconst TestComponent = () => null;\n\nconst TestComponentWithSchema = describe(TestComponent).description('Test Component');\n\nTestComponentWithSchema.propTypes = TestSchema;\n\nexport const TypescriptSchema = TestComponentWithSchema.toTypescript();\n"],
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACAvB,SAAS,WAAW,gBAAgB;AAEpC,MAAM,aAAa;AAAA,EACjB,QAAQ,UAAU,OAAO,YAAY,QAAQ;AAAA,EAC7C,QAAQ,UAAU,OAAO,YAAY,QAAQ;AAAA,EAC7C,SAAS,UAAU,KAAK,YAAY,SAAS;AAAA,EAC7C,KAAK,UAAU,IAAI,YAAY,KAAK;AAAA,EACpC,OAAO,UAAU,UAAU,CAAC,UAAU,QAAQ,UAAU,MAAM,CAAC,EAAE,YAAY,OAAO;AAAA,EACpF,QAAQ,UAAU,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,YAAY,SAAS;AAAA,EACzD,QAAQ,UAAU,UAAU;AAAA,IAC1B,UAAU;AAAA,IACV,UAAU,QAAQ,UAAU,MAAM;AAAA,IAClC,UAAU,MAAM,EAAE,QAAQ,UAAU,OAAO,CAAC;AAAA,EAC9C,CAAC,EAAE,YAAY,SAAS;AAAA,EACxB,OAAO,UAAU,QAAQ,UAAU,MAAM,EAAE,YAAY,OAAO;AAAA,EAC9D,QAAQ,UAAU,OAAO,YAAY,QAAQ;AAAA,EAC7C,OAAO,UAAU,MAAM;AAAA,IACrB,QAAQ,UAAU,OAAO,YAAY,QAAQ,EAAE;AAAA,IAC/C,QAAQ,UAAU,OAAO,YAAY,QAAQ;AAAA,IAC7C,SAAS,UAAU,KAAK,YAAY,SAAS;AAAA,IAC7C,cAAc,UAAU,MAAM;AAAA,MAC5B,QAAQ,UAAU,OAAO,YAAY,QAAQ,EAAE;AAAA,MAC/C,QAAQ,UAAU,OAAO,YAAY,QAAQ;AAAA,MAC7C,SAAS,UAAU,KAAK,YAAY,SAAS;AAAA,IAC/C,CAAC,EAAE,YAAY,eAAe;AAAA,EAChC,CAAC,EAAE,YAAY,OAAO;AAAA,EACtB,UAAU,UAAU,KAAK,YAAY,UAAU;AAAA,EAC/C,KAAK,UAAU,QAAQ,YAAY,KAAK;AAAA,EACxC,MAAM,UAAU,KAAK,YAAY,MAAM;AAAA,EACvC,WAAW,UAAU,MAAM,CAAC,SAAS,QAAQ,CAAC,EAAE,YAAY,WAAW;AAAA,EACvE,cAAc,UAAU,OAAO,YAAY,cAAc,EAAE,aAAa,CAAC,UAAU,MAAM,cAAc,OAAO;AAAA,EAC9G,UAAU,UAAU,SAAS,UAAU,MAAM,EAAE,YAAY,WAAW;AAAA,EACtE,eAAe,UAAU,SAAS,UAAU,QAAQ,UAAU,MAAM,CAAC,EAAE,YAAY,iBAAiB;
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { PropTypes, describe } from '../../propTypes/index.ts';\n\nconst TestSchema = {\n string: PropTypes.string.description('String'),\n number: PropTypes.number.description('Number'),\n boolean: PropTypes.bool.description('Boolean'),\n any: PropTypes.any.description('Any'),\n union: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).description('Union'),\n union2: PropTypes.oneOf(['A', 'B']).description('Union 2'),\n union3: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string),\n PropTypes.shape({ string: PropTypes.string }),\n ]).description('Union 3'),\n array: PropTypes.arrayOf(PropTypes.string).description('Array'),\n object: PropTypes.object.description('Object'),\n shape: PropTypes.shape({\n string: PropTypes.string.description('String').isRequired,\n number: PropTypes.number.description('Number'),\n boolean: PropTypes.bool.description('Boolean'),\n anotherShape: PropTypes.shape({\n string: PropTypes.string.description('String').isRequired,\n number: PropTypes.number.description('Number'),\n boolean: PropTypes.bool.description('Boolean'),\n }).description('Another shape'),\n }).description('Shape'),\n function: PropTypes.func.description('Function'),\n jsx: PropTypes.element.description('JSX'),\n node: PropTypes.node.description('Node'),\n something: PropTypes.oneOf(['thing', 'object']).description('something'),\n isRequiredIf: PropTypes.string.description('isRequiredIf').isRequiredIf((props) => props.something === 'thing'),\n objectOf: PropTypes.objectOf(PropTypes.string).description('Object of'),\n objectOfArray: PropTypes.objectOf(PropTypes.arrayOf(PropTypes.string)).description('Object of array'),\n shapeWithObjectOf: PropTypes.shape({\n objectOf: PropTypes.objectOf(PropTypes.string).description('Object of'),\n }).description('Shape with object of'),\n shapeWithObjectOfAndSignature: PropTypes.shape({\n signature: PropTypes.func\n .signature('((a: string, b: number, c: Record<string, number>) => void)')\n .description('Signature'),\n objectOf: PropTypes.objectOf(PropTypes.string).description('Object of'),\n }).description('Shape with object of and signature'),\n};\n\nconst TestComponent = () => null;\n\nconst TestComponentWithSchema = describe(TestComponent).description('Test Component');\n\nTestComponentWithSchema.propTypes = TestSchema;\n\nexport const TypescriptSchema = TestComponentWithSchema.toTypescript();\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACAvB,SAAS,WAAW,gBAAgB;AAEpC,MAAM,aAAa;AAAA,EACjB,QAAQ,UAAU,OAAO,YAAY,QAAQ;AAAA,EAC7C,QAAQ,UAAU,OAAO,YAAY,QAAQ;AAAA,EAC7C,SAAS,UAAU,KAAK,YAAY,SAAS;AAAA,EAC7C,KAAK,UAAU,IAAI,YAAY,KAAK;AAAA,EACpC,OAAO,UAAU,UAAU,CAAC,UAAU,QAAQ,UAAU,MAAM,CAAC,EAAE,YAAY,OAAO;AAAA,EACpF,QAAQ,UAAU,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,YAAY,SAAS;AAAA,EACzD,QAAQ,UAAU,UAAU;AAAA,IAC1B,UAAU;AAAA,IACV,UAAU,QAAQ,UAAU,MAAM;AAAA,IAClC,UAAU,MAAM,EAAE,QAAQ,UAAU,OAAO,CAAC;AAAA,EAC9C,CAAC,EAAE,YAAY,SAAS;AAAA,EACxB,OAAO,UAAU,QAAQ,UAAU,MAAM,EAAE,YAAY,OAAO;AAAA,EAC9D,QAAQ,UAAU,OAAO,YAAY,QAAQ;AAAA,EAC7C,OAAO,UAAU,MAAM;AAAA,IACrB,QAAQ,UAAU,OAAO,YAAY,QAAQ,EAAE;AAAA,IAC/C,QAAQ,UAAU,OAAO,YAAY,QAAQ;AAAA,IAC7C,SAAS,UAAU,KAAK,YAAY,SAAS;AAAA,IAC7C,cAAc,UAAU,MAAM;AAAA,MAC5B,QAAQ,UAAU,OAAO,YAAY,QAAQ,EAAE;AAAA,MAC/C,QAAQ,UAAU,OAAO,YAAY,QAAQ;AAAA,MAC7C,SAAS,UAAU,KAAK,YAAY,SAAS;AAAA,IAC/C,CAAC,EAAE,YAAY,eAAe;AAAA,EAChC,CAAC,EAAE,YAAY,OAAO;AAAA,EACtB,UAAU,UAAU,KAAK,YAAY,UAAU;AAAA,EAC/C,KAAK,UAAU,QAAQ,YAAY,KAAK;AAAA,EACxC,MAAM,UAAU,KAAK,YAAY,MAAM;AAAA,EACvC,WAAW,UAAU,MAAM,CAAC,SAAS,QAAQ,CAAC,EAAE,YAAY,WAAW;AAAA,EACvE,cAAc,UAAU,OAAO,YAAY,cAAc,EAAE,aAAa,CAAC,UAAU,MAAM,cAAc,OAAO;AAAA,EAC9G,UAAU,UAAU,SAAS,UAAU,MAAM,EAAE,YAAY,WAAW;AAAA,EACtE,eAAe,UAAU,SAAS,UAAU,QAAQ,UAAU,MAAM,CAAC,EAAE,YAAY,iBAAiB;AAAA,EACpG,mBAAmB,UAAU,MAAM;AAAA,IACjC,UAAU,UAAU,SAAS,UAAU,MAAM,EAAE,YAAY,WAAW;AAAA,EACxE,CAAC,EAAE,YAAY,sBAAsB;AAAA,EACrC,+BAA+B,UAAU,MAAM;AAAA,IAC7C,WAAW,UAAU,KAClB,UAAU,6DAA6D,EACvE,YAAY,WAAW;AAAA,IAC1B,UAAU,UAAU,SAAS,UAAU,MAAM,EAAE,YAAY,WAAW;AAAA,EACxE,CAAC,EAAE,YAAY,oCAAoC;AACrD;AAEA,MAAM,gBAAgB,MAAM;AAE5B,MAAM,0BAA0B,SAAS,aAAa,EAAE,YAAY,gBAAgB;AAEpF,wBAAwB,YAAY;AAE7B,MAAM,mBAAmB,wBAAwB,aAAa;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -4,7 +4,7 @@ const throwTypeError = (componentName, validPropKey, invalidProp, validFormat) =
|
|
|
4
4
|
`${componentName}:: You are trying to pass a not valid "${validPropKey}" property,
|
|
5
5
|
please provide a valid type.
|
|
6
6
|
|
|
7
|
-
Received: ${invalidProp} (${typeof invalidProp})
|
|
7
|
+
Received: "${String(invalidProp)}" (${typeof invalidProp})
|
|
8
8
|
Expected: (${validFormat.replace("\n", " or ")})
|
|
9
9
|
`
|
|
10
10
|
);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../src/validation/errorTemplates.ts"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-params */\nexport const throwTypeError = (\n componentName: string,\n validPropKey: string,\n invalidProp: unknown,\n validFormat: string,\n): void => {\n throw new Error(\n `${componentName}:: You are trying to pass a not valid \"${validPropKey}\" property, \n please provide a valid type.\n\n Received: ${invalidProp} (${typeof invalidProp})\n Expected: (${validFormat.replace('\\n', ' or ')})\n `,\n );\n};\n\nexport const throwRequiredError = (componentName: string, validPropKey: string): void => {\n throw new Error(\n `${componentName}:: Please provide a/an \"${validPropKey}\" property to use this component. \n This property is required.\n `,\n );\n};\n"],
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACChB,MAAM,iBAAiB,CAC5B,eACA,cACA,aACA,gBACS;AACT,QAAM,IAAI;AAAA,IACR,GAAG,uDAAuD;AAAA;AAAA;AAAA,
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-params */\nexport const throwTypeError = (\n componentName: string,\n validPropKey: string,\n invalidProp: unknown,\n validFormat: string,\n): void => {\n throw new Error(\n `${componentName}:: You are trying to pass a not valid \"${validPropKey}\" property, \n please provide a valid type.\n\n Received: \"${String(invalidProp)}\" (${typeof invalidProp})\n Expected: (${validFormat.replace('\\n', ' or ')})\n `,\n );\n};\n\nexport const throwRequiredError = (componentName: string, validPropKey: string): void => {\n throw new Error(\n `${componentName}:: Please provide a/an \"${validPropKey}\" property to use this component. \n This property is required.\n `,\n );\n};\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACChB,MAAM,iBAAiB,CAC5B,eACA,cACA,aACA,gBACS;AACT,QAAM,IAAI;AAAA,IACR,GAAG,uDAAuD;AAAA;AAAA;AAAA,eAG/C,OAAO,WAAW,OAAO,OAAO;AAAA,eAChC,YAAY,QAAQ,MAAM,MAAM;AAAA;AAAA,EAE7C;AACF;AAEO,MAAM,qBAAqB,CAAC,eAAuB,iBAA+B;AACvF,QAAM,IAAI;AAAA,IACR,GAAG,wCAAwC;AAAA;AAAA;AAAA,EAG7C;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -6,7 +6,7 @@ const typescriptObjectParser = (format) => {
|
|
|
6
6
|
let shouldAppendToKey = true;
|
|
7
7
|
const pushPair = () => {
|
|
8
8
|
if (lastKey)
|
|
9
|
-
keyValuePairs.push([lastKey, lastValue]);
|
|
9
|
+
keyValuePairs.push([lastKey, lastValue.slice(1)]);
|
|
10
10
|
lastKey = "";
|
|
11
11
|
lastValue = "";
|
|
12
12
|
shouldAppendToKey = true;
|
|
@@ -33,6 +33,14 @@ const typescriptObjectParser = (format) => {
|
|
|
33
33
|
else
|
|
34
34
|
lastValue += char;
|
|
35
35
|
} else if (char === " ") {
|
|
36
|
+
if (!shouldAppendToKey)
|
|
37
|
+
lastValue += char;
|
|
38
|
+
} else if (char === "(") {
|
|
39
|
+
depth += 1;
|
|
40
|
+
lastValue += char;
|
|
41
|
+
} else if (char === ")") {
|
|
42
|
+
depth -= 1;
|
|
43
|
+
lastValue += char;
|
|
36
44
|
} else if (shouldAppendToKey)
|
|
37
45
|
lastKey += char;
|
|
38
46
|
else
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../src/validation/typescriptParsers.ts"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable complexity */\nexport const typescriptObjectParser = (format: string)
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACChB,MAAM,yBAAyB,CAAC,
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable complexity */\nexport const typescriptObjectParser = (format: string) => {\n const keyValuePairs: [string, string][] = [];\n\n // State of the algorithm\n let lastKey = '';\n let lastValue = '';\n let shouldAppendToKey = true;\n\n const pushPair = () => {\n if (lastKey) keyValuePairs.push([lastKey, lastValue.slice(1)]);\n lastKey = '';\n lastValue = '';\n shouldAppendToKey = true;\n };\n\n // Complex -- but working -- logic\n let depth = 0;\n format.split('').forEach((char) => {\n if (char === '{') {\n depth += 1;\n if (depth > 1) lastValue += char;\n } else if (char === '}') {\n if (depth > 1) lastValue += char;\n depth -= 1;\n if (depth === 1) pushPair();\n } else if (char === ':') {\n shouldAppendToKey = false;\n if (depth > 1) lastValue += char;\n } else if (char === ',') {\n if (depth === 1) pushPair();\n else lastValue += char;\n } else if (char === ' ') {\n // Do nothing\n if (!shouldAppendToKey) lastValue += char;\n } else if (char === '(') {\n depth += 1;\n lastValue += char;\n } else if (char === ')') {\n depth -= 1;\n lastValue += char;\n } else if (shouldAppendToKey) lastKey += char;\n else lastValue += char;\n });\n pushPair();\n\n return keyValuePairs;\n};\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACChB,MAAM,yBAAyB,CAAC,WAAmB;AACxD,QAAM,gBAAoC,CAAC;AAG3C,MAAI,UAAU;AACd,MAAI,YAAY;AAChB,MAAI,oBAAoB;AAExB,QAAM,WAAW,MAAM;AACrB,QAAI;AAAS,oBAAc,KAAK,CAAC,SAAS,UAAU,MAAM,CAAC,CAAC,CAAC;AAC7D,cAAU;AACV,gBAAY;AACZ,wBAAoB;AAAA,EACtB;AAGA,MAAI,QAAQ;AACZ,SAAO,MAAM,EAAE,EAAE,QAAQ,CAAC,SAAS;AACjC,QAAI,SAAS,KAAK;AAChB,eAAS;AACT,UAAI,QAAQ;AAAG,qBAAa;AAAA,IAC9B,WAAW,SAAS,KAAK;AACvB,UAAI,QAAQ;AAAG,qBAAa;AAC5B,eAAS;AACT,UAAI,UAAU;AAAG,iBAAS;AAAA,IAC5B,WAAW,SAAS,KAAK;AACvB,0BAAoB;AACpB,UAAI,QAAQ;AAAG,qBAAa;AAAA,IAC9B,WAAW,SAAS,KAAK;AACvB,UAAI,UAAU;AAAG,iBAAS;AAAA;AACrB,qBAAa;AAAA,IACpB,WAAW,SAAS,KAAK;AAEvB,UAAI,CAAC;AAAmB,qBAAa;AAAA,IACvC,WAAW,SAAS,KAAK;AACvB,eAAS;AACT,mBAAa;AAAA,IACf,WAAW,SAAS,KAAK;AACvB,eAAS;AACT,mBAAa;AAAA,IACf,WAAW;AAAmB,iBAAW;AAAA;AACpC,mBAAa;AAAA,EACpB,CAAC;AACD,WAAS;AAET,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -84,7 +84,7 @@ const validateObject = (schemaName, key, value, format, validationsMemo, nextVal
|
|
|
84
84
|
keyValuePairs.forEach(([objectKey, objectValue]) => {
|
|
85
85
|
const trueKey = objectKey.slice(-1) === "?" ? objectKey.slice(0, -1) : objectKey;
|
|
86
86
|
if (trueKey === objectKey && !(trueKey in value)) {
|
|
87
|
-
throwRequiredError(schemaName,
|
|
87
|
+
throwRequiredError(schemaName, trueKey);
|
|
88
88
|
}
|
|
89
89
|
if (trueKey in value) {
|
|
90
90
|
validateValueWithFormat(
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../src/validation/typescriptValidator.ts"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable complexity */\n/* eslint-disable max-lines */\n/* eslint-disable max-params */\nimport type { PropsWithChildren, WeakValidationMap } from 'react';\nimport { useMemo, useRef } from 'react';\nimport type { TypescriptDocumentation } from '../propTypes/types.js';\nimport { describe } from '../propTypes/index.js';\nimport { throwRequiredError, throwTypeError } from './errorTemplates.js';\nimport {\n isArray,\n isFunction,\n isJSXorNode,\n isObject,\n isPrimitiveType,\n isSomethingWithParenthesis,\n isString,\n isUnion,\n isUndefined,\n isNull,\n isObjectOf,\n} from './typescriptGuards.js';\nimport { typescriptObjectParser } from './typescriptParsers.js';\n\ntype ValidatorFn = (\n schemaName: string,\n key: string,\n value: unknown,\n format: string,\n validationsMemo: Record<symbol, string>,\n nextValidationsMemo: Record<symbol, string>,\n) => void;\n\n// =============================================================================\n// Atom Validators\n// =============================================================================\n\n// This functions will validate something from the data\n// and optionally recursively apply `validateValueWithFormat`\n// in smaller parts\n\nconst validateUndefined: ValidatorFn = (schemaName, key, value, format) => {\n if (value !== undefined || value === 'undefined') {\n throwTypeError(schemaName, key, value, format);\n }\n};\nconst validateNull: ValidatorFn = (schemaName, key, value, format) => {\n if (value !== null || value === 'null') {\n throwTypeError(schemaName, key, value, format);\n }\n};\nconst validatePrimitiveType: ValidatorFn = (schemaName, key, value, format) => {\n if (typeof value !== format) {\n throwTypeError(schemaName, key, value, format);\n }\n};\n\nconst validateString: ValidatorFn = (schemaName, key, value, format) => {\n if (value !== format.slice(1, -1)) {\n throwTypeError(schemaName, key, value, format);\n }\n};\n\nconst validateArray: ValidatorFn = (schemaName, key, value, format, validationsMemo, nextValidationsMemo) => {\n // Check that we have an array\n if (!Array.isArray(value)) {\n throwTypeError(schemaName, key, value, format);\n }\n\n // Check that each element inside satisfies the format\n (value as unknown[]).forEach((val, index) => {\n // this is a recursive func, we need to invoke it before it's defined.\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n validateValueWithFormat(\n schemaName,\n `${key}[${index}]`,\n val,\n format.slice(0, -2),\n validationsMemo,\n nextValidationsMemo,\n );\n });\n};\nfunction isObjectType(value: unknown): value is Record<string, unknown> {\n return !(typeof value !== 'object' || Array.isArray(value));\n}\n\nconst validateObjectOf: ValidatorFn = (schemaName, key, value, format, validationsMemo, nextValidationsMemo) => {\n const valuesIsObject = isObjectType(value);\n // Check that we have an object\n if (!valuesIsObject) {\n throwTypeError(schemaName, key, value, format);\n return;\n }\n\n const valuesFormat = format.slice('{ [key: string]: '.length, -2);\n\n Object.keys(value).forEach((objectKey) => {\n // this is a recursive func, we need to invoke it before it's defined.\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n validateValueWithFormat(\n schemaName,\n `${key}[${objectKey}]`,\n value[objectKey],\n valuesFormat,\n validationsMemo,\n nextValidationsMemo,\n );\n });\n};\n\nconst validateObject: ValidatorFn = (schemaName, key, value, format, validationsMemo, nextValidationsMemo) => {\n const valuesIsObject = isObjectType(value);\n // Check that we have an object\n if (!valuesIsObject) {\n throwTypeError(schemaName, key, value, format);\n return;\n }\n\n if (format === 'object') return;\n\n const keyValuePairs = typescriptObjectParser(format);\n // Now we have the key - value pairs\n // Each key could either be required or not\n // Just recursively check the object\n\n keyValuePairs.forEach(([objectKey, objectValue]) => {\n const trueKey = objectKey.slice(-1) === '?' ? objectKey.slice(0, -1) : objectKey;\n\n if (trueKey === objectKey && !(trueKey in value)) {\n throwRequiredError(schemaName, key);\n }\n\n if (trueKey in value) {\n // this is a recursive func, we need to invoke it before it's defined.\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n validateValueWithFormat(\n schemaName,\n `${key}[${trueKey}]`,\n value[trueKey],\n objectValue,\n validationsMemo,\n nextValidationsMemo,\n );\n }\n });\n};\n\nconst validateUnion: ValidatorFn = (schemaName, key, value, format, validationsMemo, nextValidationsMemo) => {\n const possibilities = format.split(/\\s?\\|\\s?/);\n\n const errors = [];\n\n possibilities.forEach((possibility) => {\n try {\n // this is a recursive func, we need to invoke it before it's defined.\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n validateValueWithFormat(schemaName, key, value, possibility, validationsMemo, nextValidationsMemo);\n } catch (e) {\n errors.push(e);\n }\n });\n\n if (errors.length === possibilities.length) {\n throwTypeError(schemaName, key, value, format);\n }\n};\n\nconst validateFunction: ValidatorFn = (schemaName, key, value, format) => {\n // Check that we have a function\n if (typeof value !== 'function') {\n throwTypeError(schemaName, key, value, format);\n }\n};\n\nfunction isJSXElement(value: unknown): value is JSX.Element {\n return value === null || (typeof value === 'object' && value !== null && '$$typeof' in value);\n}\nconst validateJSXorNode: ValidatorFn = (schemaName, key, value, format) => {\n const valueIsJSX = isJSXElement(value);\n if (format === 'JSX.Element' && !valueIsJSX) {\n throwTypeError(schemaName, key, value, format);\n }\n};\n\n// =============================================================================\n// Schema validator\n// =============================================================================\n\nconst validateValueWithFormat: ValidatorFn = (schemaName, key, value, format, validationsMemo, nextValidationsMemo) => {\n nextValidationsMemo[value as symbol] = format;\n\n if ((value as symbol) in validationsMemo) {\n // We already validated this value on this format\n return;\n }\n\n if (isUndefined(format)) {\n validateUndefined(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isNull(format)) {\n validateNull(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isPrimitiveType(format)) {\n validatePrimitiveType(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isUnion(format)) {\n validateUnion(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isString(format)) {\n validateString(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isArray(format)) {\n validateArray(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isObjectOf(format)) {\n validateObjectOf(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isObject(format)) {\n validateObject(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isFunction(format)) {\n validateFunction(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isJSXorNode(format)) {\n validateJSXorNode(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isSomethingWithParenthesis(format)) {\n validateValueWithFormat(schemaName, key, value, format.slice(1, -1), validationsMemo, nextValidationsMemo);\n }\n};\n\nexport const validateTypescriptPropTypesImplementation = (\n props: PropsWithChildren<Record<string, unknown>>,\n schema: TypescriptDocumentation,\n validationsMemo: Record<string, string> = {},\n nextValidationsMemo: Record<string, string> = {},\n): void => {\n const { properties, name: schemaName } = schema;\n\n properties.forEach((property) => {\n const { name, format, required, isRequiredIf, omitValidation } = property;\n\n const requiredConditionally = isRequiredIf && isRequiredIf(props);\n\n if (omitValidation) {\n return;\n }\n\n if (required && !(name in props)) {\n throwRequiredError(schema.name, name);\n }\n\n if (requiredConditionally && !(name in props)) {\n throwRequiredError(schema.name, name);\n }\n\n const shouldValidateProperty = props[name] !== undefined || required || requiredConditionally;\n\n if (name in props && format && shouldValidateProperty) {\n validateValueWithFormat(schemaName, name, props[name], format, validationsMemo, nextValidationsMemo);\n }\n });\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const useValidateTypescriptPropTypes = <T = Record<string, any>>(\n props: PropsWithChildren<T>,\n propTypes: WeakValidationMap<unknown>,\n componentDisplayName: string,\n): void => {\n if (!Boolean(componentDisplayName)) {\n throw new Error('Provide display name for the component to use for validation');\n }\n\n const validationsMemo = useRef<Record<string, string>>({});\n\n const typescriptSchema = useMemo(() => {\n const Component = () => {};\n\n const DescribedComponent = describe(Component);\n DescribedComponent.propTypes = propTypes;\n DescribedComponent.displayName = componentDisplayName;\n return DescribedComponent.toTypescript();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [propTypes]);\n\n useMemo(() => {\n const nextValidationsMemo = {};\n\n validateTypescriptPropTypesImplementation(props, typescriptSchema, validationsMemo.current, nextValidationsMemo);\n validationsMemo.current = nextValidationsMemo;\n return 'WE DONT NEED RETURN just the memo';\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props]);\n};\n"],
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACIvB,SAAS,SAAS,cAAc;AAEhC,SAAS,gBAAgB;AACzB,SAAS,oBAAoB,sBAAsB;AACnD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,8BAA8B;AAmBvC,MAAM,oBAAiC,CAAC,YAAY,KAAK,OAAO,WAAW;AACzE,MAAI,UAAU,UAAa,UAAU,aAAa;AAChD,mBAAe,YAAY,KAAK,OAAO,MAAM;AAAA,EAC/C;AACF;AACA,MAAM,eAA4B,CAAC,YAAY,KAAK,OAAO,WAAW;AACpE,MAAI,UAAU,QAAQ,UAAU,QAAQ;AACtC,mBAAe,YAAY,KAAK,OAAO,MAAM;AAAA,EAC/C;AACF;AACA,MAAM,wBAAqC,CAAC,YAAY,KAAK,OAAO,WAAW;AAC7E,MAAI,OAAO,UAAU,QAAQ;AAC3B,mBAAe,YAAY,KAAK,OAAO,MAAM;AAAA,EAC/C;AACF;AAEA,MAAM,iBAA8B,CAAC,YAAY,KAAK,OAAO,WAAW;AACtE,MAAI,UAAU,OAAO,MAAM,GAAG,EAAE,GAAG;AACjC,mBAAe,YAAY,KAAK,OAAO,MAAM;AAAA,EAC/C;AACF;AAEA,MAAM,gBAA6B,CAAC,YAAY,KAAK,OAAO,QAAQ,iBAAiB,wBAAwB;AAE3G,MAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,mBAAe,YAAY,KAAK,OAAO,MAAM;AAAA,EAC/C;AAGA,EAAC,MAAoB,QAAQ,CAAC,KAAK,UAAU;AAG3C;AAAA,MACE;AAAA,MACA,GAAG,OAAO;AAAA,MACV;AAAA,MACA,OAAO,MAAM,GAAG,EAAE;AAAA,MAClB;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AACH;AACA,SAAS,aAAa,OAAkD;AACtE,SAAO,EAAE,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK;AAC3D;AAEA,MAAM,mBAAgC,CAAC,YAAY,KAAK,OAAO,QAAQ,iBAAiB,wBAAwB;AAC9G,QAAM,iBAAiB,aAAa,KAAK;AAEzC,MAAI,CAAC,gBAAgB;AACnB,mBAAe,YAAY,KAAK,OAAO,MAAM;AAC7C;AAAA,EACF;AAEA,QAAM,eAAe,OAAO,MAAM,oBAAoB,QAAQ,EAAE;AAEhE,SAAO,KAAK,KAAK,EAAE,QAAQ,CAAC,cAAc;AAGxC;AAAA,MACE;AAAA,MACA,GAAG,OAAO;AAAA,MACV,MAAM,SAAS;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,MAAM,iBAA8B,CAAC,YAAY,KAAK,OAAO,QAAQ,iBAAiB,wBAAwB;AAC5G,QAAM,iBAAiB,aAAa,KAAK;AAEzC,MAAI,CAAC,gBAAgB;AACnB,mBAAe,YAAY,KAAK,OAAO,MAAM;AAC7C;AAAA,EACF;AAEA,MAAI,WAAW;AAAU;AAEzB,QAAM,gBAAgB,uBAAuB,MAAM;AAKnD,gBAAc,QAAQ,CAAC,CAAC,WAAW,WAAW,MAAM;AAClD,UAAM,UAAU,UAAU,MAAM,EAAE,MAAM,MAAM,UAAU,MAAM,GAAG,EAAE,IAAI;AAEvE,QAAI,YAAY,aAAa,EAAE,WAAW,QAAQ;AAChD,yBAAmB,YAAY,
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable complexity */\n/* eslint-disable max-lines */\n/* eslint-disable max-params */\nimport type { PropsWithChildren, WeakValidationMap } from 'react';\nimport { useMemo, useRef } from 'react';\nimport type { TypescriptDocumentation } from '../propTypes/types.js';\nimport { describe } from '../propTypes/index.js';\nimport { throwRequiredError, throwTypeError } from './errorTemplates.js';\nimport {\n isArray,\n isFunction,\n isJSXorNode,\n isObject,\n isPrimitiveType,\n isSomethingWithParenthesis,\n isString,\n isUnion,\n isUndefined,\n isNull,\n isObjectOf,\n} from './typescriptGuards.js';\nimport { typescriptObjectParser } from './typescriptParsers.js';\n\ntype ValidatorFn = (\n schemaName: string,\n key: string,\n value: unknown,\n format: string,\n validationsMemo: Record<symbol, string>,\n nextValidationsMemo: Record<symbol, string>,\n) => void;\n\n// =============================================================================\n// Atom Validators\n// =============================================================================\n\n// This functions will validate something from the data\n// and optionally recursively apply `validateValueWithFormat`\n// in smaller parts\n\nconst validateUndefined: ValidatorFn = (schemaName, key, value, format) => {\n if (value !== undefined || value === 'undefined') {\n throwTypeError(schemaName, key, value, format);\n }\n};\nconst validateNull: ValidatorFn = (schemaName, key, value, format) => {\n if (value !== null || value === 'null') {\n throwTypeError(schemaName, key, value, format);\n }\n};\nconst validatePrimitiveType: ValidatorFn = (schemaName, key, value, format) => {\n if (typeof value !== format) {\n throwTypeError(schemaName, key, value, format);\n }\n};\n\nconst validateString: ValidatorFn = (schemaName, key, value, format) => {\n if (value !== format.slice(1, -1)) {\n throwTypeError(schemaName, key, value, format);\n }\n};\n\nconst validateArray: ValidatorFn = (schemaName, key, value, format, validationsMemo, nextValidationsMemo) => {\n // Check that we have an array\n if (!Array.isArray(value)) {\n throwTypeError(schemaName, key, value, format);\n }\n\n // Check that each element inside satisfies the format\n (value as unknown[]).forEach((val, index) => {\n // this is a recursive func, we need to invoke it before it's defined.\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n validateValueWithFormat(\n schemaName,\n `${key}[${index}]`,\n val,\n format.slice(0, -2),\n validationsMemo,\n nextValidationsMemo,\n );\n });\n};\nfunction isObjectType(value: unknown): value is Record<string, unknown> {\n return !(typeof value !== 'object' || Array.isArray(value));\n}\n\nconst validateObjectOf: ValidatorFn = (schemaName, key, value, format, validationsMemo, nextValidationsMemo) => {\n const valuesIsObject = isObjectType(value);\n // Check that we have an object\n if (!valuesIsObject) {\n throwTypeError(schemaName, key, value, format);\n return;\n }\n\n const valuesFormat = format.slice('{ [key: string]: '.length, -2);\n\n Object.keys(value).forEach((objectKey) => {\n // this is a recursive func, we need to invoke it before it's defined.\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n validateValueWithFormat(\n schemaName,\n `${key}[${objectKey}]`,\n value[objectKey],\n valuesFormat,\n validationsMemo,\n nextValidationsMemo,\n );\n });\n};\n\nconst validateObject: ValidatorFn = (schemaName, key, value, format, validationsMemo, nextValidationsMemo) => {\n const valuesIsObject = isObjectType(value);\n // Check that we have an object\n if (!valuesIsObject) {\n throwTypeError(schemaName, key, value, format);\n return;\n }\n\n if (format === 'object') return;\n\n const keyValuePairs = typescriptObjectParser(format);\n // Now we have the key - value pairs\n // Each key could either be required or not\n // Just recursively check the object\n\n keyValuePairs.forEach(([objectKey, objectValue]) => {\n const trueKey = objectKey.slice(-1) === '?' ? objectKey.slice(0, -1) : objectKey;\n\n if (trueKey === objectKey && !(trueKey in value)) {\n throwRequiredError(schemaName, trueKey);\n }\n\n if (trueKey in value) {\n // this is a recursive func, we need to invoke it before it's defined.\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n validateValueWithFormat(\n schemaName,\n `${key}[${trueKey}]`,\n value[trueKey],\n objectValue,\n validationsMemo,\n nextValidationsMemo,\n );\n }\n });\n};\n\nconst validateUnion: ValidatorFn = (schemaName, key, value, format, validationsMemo, nextValidationsMemo) => {\n const possibilities = format.split(/\\s?\\|\\s?/);\n\n const errors = [];\n\n possibilities.forEach((possibility) => {\n try {\n // this is a recursive func, we need to invoke it before it's defined.\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n validateValueWithFormat(schemaName, key, value, possibility, validationsMemo, nextValidationsMemo);\n } catch (e) {\n errors.push(e);\n }\n });\n\n if (errors.length === possibilities.length) {\n throwTypeError(schemaName, key, value, format);\n }\n};\n\nconst validateFunction: ValidatorFn = (schemaName, key, value, format) => {\n // Check that we have a function\n if (typeof value !== 'function') {\n throwTypeError(schemaName, key, value, format);\n }\n};\n\nfunction isJSXElement(value: unknown): value is JSX.Element {\n return value === null || (typeof value === 'object' && value !== null && '$$typeof' in value);\n}\nconst validateJSXorNode: ValidatorFn = (schemaName, key, value, format) => {\n const valueIsJSX = isJSXElement(value);\n if (format === 'JSX.Element' && !valueIsJSX) {\n throwTypeError(schemaName, key, value, format);\n }\n};\n\n// =============================================================================\n// Schema validator\n// =============================================================================\n\nconst validateValueWithFormat: ValidatorFn = (schemaName, key, value, format, validationsMemo, nextValidationsMemo) => {\n nextValidationsMemo[value as symbol] = format;\n\n if ((value as symbol) in validationsMemo) {\n // We already validated this value on this format\n return;\n }\n\n if (isUndefined(format)) {\n validateUndefined(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isNull(format)) {\n validateNull(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isPrimitiveType(format)) {\n validatePrimitiveType(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isUnion(format)) {\n validateUnion(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isString(format)) {\n validateString(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isArray(format)) {\n validateArray(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isObjectOf(format)) {\n validateObjectOf(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isObject(format)) {\n validateObject(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isFunction(format)) {\n validateFunction(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isJSXorNode(format)) {\n validateJSXorNode(schemaName, key, value, format, validationsMemo, nextValidationsMemo);\n } else if (isSomethingWithParenthesis(format)) {\n validateValueWithFormat(schemaName, key, value, format.slice(1, -1), validationsMemo, nextValidationsMemo);\n }\n};\n\nexport const validateTypescriptPropTypesImplementation = (\n props: PropsWithChildren<Record<string, unknown>>,\n schema: TypescriptDocumentation,\n validationsMemo: Record<string, string> = {},\n nextValidationsMemo: Record<string, string> = {},\n): void => {\n const { properties, name: schemaName } = schema;\n\n properties.forEach((property) => {\n const { name, format, required, isRequiredIf, omitValidation } = property;\n\n const requiredConditionally = isRequiredIf && isRequiredIf(props);\n\n if (omitValidation) {\n return;\n }\n\n if (required && !(name in props)) {\n throwRequiredError(schema.name, name);\n }\n\n if (requiredConditionally && !(name in props)) {\n throwRequiredError(schema.name, name);\n }\n\n const shouldValidateProperty = props[name] !== undefined || required || requiredConditionally;\n\n if (name in props && format && shouldValidateProperty) {\n validateValueWithFormat(schemaName, name, props[name], format, validationsMemo, nextValidationsMemo);\n }\n });\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const useValidateTypescriptPropTypes = <T = Record<string, any>>(\n props: PropsWithChildren<T>,\n propTypes: WeakValidationMap<unknown>,\n componentDisplayName: string,\n): void => {\n if (!Boolean(componentDisplayName)) {\n throw new Error('Provide display name for the component to use for validation');\n }\n\n const validationsMemo = useRef<Record<string, string>>({});\n\n const typescriptSchema = useMemo(() => {\n const Component = () => {};\n\n const DescribedComponent = describe(Component);\n DescribedComponent.propTypes = propTypes;\n DescribedComponent.displayName = componentDisplayName;\n return DescribedComponent.toTypescript();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [propTypes]);\n\n useMemo(() => {\n const nextValidationsMemo = {};\n\n validateTypescriptPropTypesImplementation(props, typescriptSchema, validationsMemo.current, nextValidationsMemo);\n validationsMemo.current = nextValidationsMemo;\n return 'WE DONT NEED RETURN just the memo';\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props]);\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elliemae/ds-props-helpers",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.29.0-next.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "ICE MT - Dimsum - Props Helpers",
|
|
6
6
|
"files": [
|
|
@@ -34,11 +34,11 @@
|
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"fast-deep-equal": "~3.1.3",
|
|
36
36
|
"prop-types": "~15.8.1",
|
|
37
|
-
"@elliemae/ds-system": "3.
|
|
37
|
+
"@elliemae/ds-system": "3.29.0-next.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@elliemae/pui-cli": "~9.0.0-next.31",
|
|
41
|
-
"@elliemae/ds-monorepo-devops": "3.
|
|
41
|
+
"@elliemae/ds-monorepo-devops": "3.29.0-next.0"
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|
|
44
44
|
"lodash": "^4.17.21",
|