@storybook/csf 0.0.2--canary.835a408.0 → 0.0.2--canary.d38f8f1.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.
@@ -0,0 +1,3 @@
1
+ import { Args, Globals, InputType, Conditional } from './story';
2
+ export declare const testValue: (cond: Pick<Conditional, never>, value: any) => boolean;
3
+ export declare const includeConditionalArg: (argType: InputType, args: Args, globals: Globals) => boolean;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.includeConditionalArg = exports.testValue = void 0;
7
+
8
+ var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
11
+
12
+ var count = function count(vals) {
13
+ return vals.map(function (v) {
14
+ return typeof v !== 'undefined';
15
+ }).filter(Boolean).length;
16
+ };
17
+
18
+ var testValue = function testValue(cond, value) {
19
+ var _ref = cond,
20
+ exists = _ref.exists,
21
+ eq = _ref.eq,
22
+ neq = _ref.neq;
23
+
24
+ if (count([exists, eq, neq]) > 1) {
25
+ throw new Error("Invalid conditional test ".concat(JSON.stringify({
26
+ exists: exists,
27
+ eq: eq,
28
+ neq: neq
29
+ })));
30
+ }
31
+
32
+ if (typeof eq !== 'undefined') {
33
+ return (0, _isEqual["default"])(value, eq);
34
+ }
35
+
36
+ if (typeof neq !== 'undefined') {
37
+ return !(0, _isEqual["default"])(value, neq);
38
+ }
39
+
40
+ var shouldExist = typeof exists !== 'undefined' ? exists : true;
41
+ var valueExists = typeof value !== 'undefined';
42
+ return shouldExist ? valueExists : !valueExists;
43
+ };
44
+ /**
45
+ * Helper function to include/exclude an arg based on the value of other other args
46
+ * aka "conditional args"
47
+ */
48
+
49
+
50
+ exports.testValue = testValue;
51
+
52
+ var includeConditionalArg = function includeConditionalArg(argType, args, globals) {
53
+ if (!argType["if"]) return true;
54
+ var _ref2 = argType["if"],
55
+ arg = _ref2.arg,
56
+ global = _ref2.global;
57
+
58
+ if (count([arg, global]) !== 1) {
59
+ throw new Error("Invalid conditional value ".concat(JSON.stringify({
60
+ arg: arg,
61
+ global: global
62
+ })));
63
+ }
64
+
65
+ var value = arg ? args[arg] : globals[global];
66
+ return testValue(argType["if"], value);
67
+ };
68
+
69
+ exports.includeConditionalArg = includeConditionalArg;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,255 @@
1
+ "use strict";
2
+
3
+ var _includeConditionalArg = require("./includeConditionalArg");
4
+
5
+ /* eslint-disable @typescript-eslint/ban-ts-ignore */
6
+ describe('testValue', function () {
7
+ describe('exists', function () {
8
+ it.each([['implicit exist true', {}, 1, true], ['implicit exist false', {}, undefined, false], ['explicit exist', {
9
+ exists: true
10
+ }, 1, true], ['explicit exist false', {
11
+ exists: true
12
+ }, undefined, false], ['explicit nexist', {
13
+ exists: false
14
+ }, undefined, true], ['explicit nexist false', {
15
+ exists: false
16
+ }, 1, false]])('%s', function (_name, cond, value, expected) {
17
+ // @ts-ignore
18
+ expect((0, _includeConditionalArg.testValue)(cond, value)).toBe(expected);
19
+ });
20
+ });
21
+ describe('eq', function () {
22
+ it.each([['true', {
23
+ eq: 1
24
+ }, 1, true], ['false', {
25
+ eq: 1
26
+ }, 2, false], ['undefined', {
27
+ eq: undefined
28
+ }, undefined, false], ['undefined false', {
29
+ eq: 1
30
+ }, undefined, false], ['object true', {
31
+ eq: {
32
+ x: 1
33
+ }
34
+ }, {
35
+ x: 1
36
+ }, true], ['object true', {
37
+ eq: {
38
+ x: 1
39
+ }
40
+ }, {
41
+ x: 2
42
+ }, false]])('%s', function (_name, cond, value, expected) {
43
+ // @ts-ignore
44
+ expect((0, _includeConditionalArg.testValue)(cond, value)).toBe(expected);
45
+ });
46
+ });
47
+ describe('neq', function () {
48
+ it.each([['true', {
49
+ neq: 1
50
+ }, 2, true], ['false', {
51
+ neq: 1
52
+ }, 1, false], ['undefined true', {
53
+ neq: 1
54
+ }, undefined, true], ['undefined false', {
55
+ neq: undefined
56
+ }, undefined, false], ['object true', {
57
+ neq: {
58
+ x: 1
59
+ }
60
+ }, {
61
+ x: 2
62
+ }, true], ['object false', {
63
+ neq: {
64
+ x: 1
65
+ }
66
+ }, {
67
+ x: 1
68
+ }, false]])('%s', function (_name, cond, value, expected) {
69
+ // @ts-ignore
70
+ expect((0, _includeConditionalArg.testValue)(cond, value)).toBe(expected);
71
+ });
72
+ });
73
+ });
74
+ describe('includeConditionalArg', function () {
75
+ describe('errors', function () {
76
+ it('should throw if arg and global are both specified', function () {
77
+ expect(function () {
78
+ return (0, _includeConditionalArg.includeConditionalArg)({
79
+ "if": {
80
+ arg: 'a',
81
+ global: 'b'
82
+ }
83
+ }, {}, {});
84
+ }).toThrowErrorMatchingInlineSnapshot("\"Invalid conditional value {\\\"arg\\\":\\\"a\\\",\\\"global\\\":\\\"b\\\"}\"");
85
+ });
86
+ it('should throw if mulitiple exists / eq / neq are specified', function () {
87
+ expect(function () {
88
+ return (0, _includeConditionalArg.includeConditionalArg)({
89
+ "if": {
90
+ arg: 'a',
91
+ exists: true,
92
+ eq: 1
93
+ }
94
+ }, {}, {});
95
+ }).toThrowErrorMatchingInlineSnapshot("\"Invalid conditional test {\\\"exists\\\":true,\\\"eq\\\":1}\"");
96
+ expect(function () {
97
+ return (0, _includeConditionalArg.includeConditionalArg)({
98
+ "if": {
99
+ arg: 'a',
100
+ exists: false,
101
+ neq: 0
102
+ }
103
+ }, {}, {});
104
+ }).toThrowErrorMatchingInlineSnapshot("\"Invalid conditional test {\\\"exists\\\":false,\\\"neq\\\":0}\"");
105
+ expect(function () {
106
+ return (0, _includeConditionalArg.includeConditionalArg)({
107
+ "if": {
108
+ arg: 'a',
109
+ eq: 1,
110
+ neq: 0
111
+ }
112
+ }, {}, {});
113
+ }).toThrowErrorMatchingInlineSnapshot("\"Invalid conditional test {\\\"eq\\\":1,\\\"neq\\\":0}\"");
114
+ });
115
+ });
116
+ describe('args', function () {
117
+ describe('exists', function () {
118
+ it.each([['implicit exist true', {
119
+ "if": {
120
+ arg: 'a'
121
+ }
122
+ }, {
123
+ a: 1
124
+ }, {}, true], ['implicit exist false', {
125
+ "if": {
126
+ arg: 'a'
127
+ }
128
+ }, {}, {}, false], ['explicit exist', {
129
+ "if": {
130
+ arg: 'a',
131
+ exists: true
132
+ }
133
+ }, {
134
+ a: 1
135
+ }, {}, true], ['explicit exist false', {
136
+ "if": {
137
+ arg: 'a',
138
+ exists: true
139
+ }
140
+ }, {}, {}, false]])('%s', function (_name, argType, args, globals, expected) {
141
+ // @ts-ignore
142
+ expect((0, _includeConditionalArg.includeConditionalArg)(argType, args, globals)).toBe(expected);
143
+ });
144
+ });
145
+ describe('eq', function () {
146
+ it.each([['scalar true', {
147
+ "if": {
148
+ arg: 'a',
149
+ eq: 1
150
+ }
151
+ }, {
152
+ a: 1
153
+ }, {}, true], ['scalar false', {
154
+ "if": {
155
+ arg: 'a',
156
+ eq: 1
157
+ }
158
+ }, {
159
+ a: 2
160
+ }, {
161
+ a: 1
162
+ }, false]])('%s', function (_name, argType, args, globals, expected) {
163
+ // @ts-ignore
164
+ expect((0, _includeConditionalArg.includeConditionalArg)(argType, args, globals)).toBe(expected);
165
+ });
166
+ });
167
+ describe('neq', function () {
168
+ it.each([['scalar true', {
169
+ "if": {
170
+ arg: 'a',
171
+ neq: 1
172
+ }
173
+ }, {
174
+ a: 2
175
+ }, {}, true], ['scalar false', {
176
+ "if": {
177
+ arg: 'a',
178
+ neq: 1
179
+ }
180
+ }, {
181
+ a: 1
182
+ }, {
183
+ a: 2
184
+ }, false]])('%s', function (_name, argType, args, globals, expected) {
185
+ // @ts-ignore
186
+ expect((0, _includeConditionalArg.includeConditionalArg)(argType, args, globals)).toBe(expected);
187
+ });
188
+ });
189
+ });
190
+ describe('globals', function () {
191
+ describe('exists', function () {
192
+ it.each([// name, argType, args, globals, expected
193
+ ['implicit exist true', {
194
+ "if": {
195
+ global: 'a'
196
+ }
197
+ }, {}, {
198
+ a: 1
199
+ }, true], ['implicit exist false', {
200
+ "if": {
201
+ global: 'a'
202
+ }
203
+ }, {
204
+ a: 1
205
+ }, {}, false]])('%s', function (_name, argType, args, globals, expected) {
206
+ // @ts-ignore
207
+ expect((0, _includeConditionalArg.includeConditionalArg)(argType, args, globals)).toBe(expected);
208
+ });
209
+ });
210
+ describe('eq', function () {
211
+ it.each([['scalar true', {
212
+ "if": {
213
+ global: 'a',
214
+ eq: 1
215
+ }
216
+ }, {}, {
217
+ a: 1
218
+ }, true], ['scalar false', {
219
+ "if": {
220
+ arg: 'a',
221
+ eq: 1
222
+ }
223
+ }, {
224
+ a: 2
225
+ }, {
226
+ a: 1
227
+ }, false]])('%s', function (_name, argType, args, globals, expected) {
228
+ // @ts-ignore
229
+ expect((0, _includeConditionalArg.includeConditionalArg)(argType, args, globals)).toBe(expected);
230
+ });
231
+ });
232
+ describe('neq', function () {
233
+ it.each([['scalar true', {
234
+ "if": {
235
+ global: 'a',
236
+ neq: 1
237
+ }
238
+ }, {}, {
239
+ a: 2
240
+ }, true], ['scalar false', {
241
+ "if": {
242
+ global: 'a',
243
+ neq: 1
244
+ }
245
+ }, {
246
+ a: 2
247
+ }, {
248
+ a: 1
249
+ }, false]])('%s', function (_name, argType, args, globals, expected) {
250
+ // @ts-ignore
251
+ expect((0, _includeConditionalArg.includeConditionalArg)(argType, args, globals)).toBe(expected);
252
+ });
253
+ });
254
+ });
255
+ });
package/dist/index.d.ts CHANGED
@@ -15,4 +15,5 @@ export declare const parseKind: (kind: string, { rootSeparator, groupSeparator }
15
15
  root: string | null;
16
16
  groups: string[];
17
17
  };
18
+ export { includeConditionalArg } from './includeConditionalArg';
18
19
  export * from './story';
package/dist/index.js CHANGED
@@ -8,13 +8,22 @@ var _exportNames = {
8
8
  toId: true,
9
9
  storyNameFromExport: true,
10
10
  isExportStory: true,
11
- parseKind: true
11
+ parseKind: true,
12
+ includeConditionalArg: true
12
13
  };
13
14
  exports.isExportStory = isExportStory;
15
+ Object.defineProperty(exports, "includeConditionalArg", {
16
+ enumerable: true,
17
+ get: function get() {
18
+ return _includeConditionalArg.includeConditionalArg;
19
+ }
20
+ });
14
21
  exports.parseKind = exports.storyNameFromExport = exports.toId = exports.sanitize = void 0;
15
22
 
16
23
  var _startCase = _interopRequireDefault(require("lodash/startCase"));
17
24
 
25
+ var _includeConditionalArg = require("./includeConditionalArg");
26
+
18
27
  var _story = require("./story");
19
28
 
20
29
  Object.keys(_story).forEach(function (key) {
package/dist/story.d.ts CHANGED
@@ -16,11 +16,25 @@ export interface StoryIdentifier {
16
16
  export declare type Parameters = {
17
17
  [name: string]: any;
18
18
  };
19
+ declare type ConditionalTest = {
20
+ exists?: boolean;
21
+ } | {
22
+ eq: any;
23
+ } | {
24
+ neq: any;
25
+ };
26
+ declare type ConditionalValue = {
27
+ arg: string;
28
+ } | {
29
+ global: string;
30
+ };
31
+ export declare type Conditional = ConditionalValue & ConditionalTest;
19
32
  export interface InputType {
20
33
  name?: string;
21
34
  description?: string;
22
35
  defaultValue?: any;
23
36
  type?: SBType | SBScalarType['name'];
37
+ if?: Conditional;
24
38
  [key: string]: any;
25
39
  }
26
40
  export interface StrictInputType extends InputType {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@storybook/csf",
3
- "version": "0.0.2--canary.835a408.0",
3
+ "version": "0.0.2--canary.d38f8f1.0",
4
4
  "description": "Component Story Format (CSF) utilities",
5
5
  "keywords": [
6
6
  "storybook",