@wyndlass/app-sdk 0.0.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/README.md +195 -1
  2. package/cli/app-package.mjs +111 -0
  3. package/cli/commands.mjs +114 -0
  4. package/cli/main.mjs +66 -0
  5. package/cli/package.mjs +119 -0
  6. package/cli/preview.mjs +142 -0
  7. package/cli/zip.mjs +63 -0
  8. package/dist/contract/app-contract.d.ts +221 -0
  9. package/dist/contract/app-contract.js +6 -0
  10. package/dist/contract/app-definition.d.ts +155 -0
  11. package/dist/contract/app-definition.js +3 -0
  12. package/dist/contract/data-answer.d.ts +40 -0
  13. package/dist/contract/data-answer.js +3 -0
  14. package/dist/contract/data-calendar.d.ts +57 -0
  15. package/dist/contract/data-calendar.js +3 -0
  16. package/dist/contract/data-news.d.ts +29 -0
  17. package/dist/contract/data-news.js +3 -0
  18. package/dist/contract/data-quotes.d.ts +75 -0
  19. package/dist/contract/data-quotes.js +3 -0
  20. package/dist/contract/data-series.d.ts +51 -0
  21. package/dist/contract/data-series.js +3 -0
  22. package/dist/contract/data-snapshot.d.ts +30 -0
  23. package/dist/contract/data-snapshot.js +3 -0
  24. package/dist/contract/data-weather.d.ts +421 -0
  25. package/dist/contract/data-weather.js +3 -0
  26. package/dist/contract/player-api-event.d.ts +253 -0
  27. package/dist/contract/player-api-event.js +3 -0
  28. package/dist/contract/player-api-status.d.ts +178 -0
  29. package/dist/contract/player-api-status.js +3 -0
  30. package/dist/easing.d.ts +16 -0
  31. package/dist/easing.js +71 -0
  32. package/dist/index.d.ts +94 -0
  33. package/dist/index.js +218 -0
  34. package/dist/preview/frame/frame.js +2 -0
  35. package/dist/preview/frame/index.html +12 -0
  36. package/dist/preview/index.html +40 -0
  37. package/dist/preview/page.js +7 -0
  38. package/dist/qr.d.ts +5 -0
  39. package/dist/qr.js +14 -0
  40. package/dist/react.d.ts +52 -0
  41. package/dist/react.js +149 -0
  42. package/package.json +82 -4
  43. package/protocol/app-definition.schema.json +435 -0
  44. package/protocol/app-packages.json +172 -0
  45. package/protocol/common.schema.json +197 -0
  46. package/protocol/samples/calendar.json +63 -0
  47. package/protocol/samples/events/app.command.json +14 -0
  48. package/protocol/samples/events/item.end.json +13 -0
  49. package/protocol/samples/events/item.start.json +18 -0
  50. package/protocol/samples/events/state.changed.json +11 -0
  51. package/protocol/samples/news.json +37 -0
  52. package/protocol/samples/player-status.json +58 -0
  53. package/protocol/samples/weather.json +59 -0
  54. package/templates/react/AGENTS.md +13 -0
  55. package/templates/react/README.md +22 -0
  56. package/templates/react/app.json +14 -0
  57. package/templates/react/gitignore +2 -0
  58. package/templates/react/package.json +22 -0
  59. package/templates/react/src/app.css +7 -0
  60. package/templates/react/src/app.tsx +39 -0
  61. package/templates/react/src/env.d.ts +5 -0
  62. package/templates/react/tsconfig.json +13 -0
  63. package/templates/vanilla/AGENTS.md +13 -0
  64. package/templates/vanilla/README.md +22 -0
  65. package/templates/vanilla/app.json +14 -0
  66. package/templates/vanilla/gitignore +2 -0
  67. package/templates/vanilla/package.json +18 -0
  68. package/templates/vanilla/src/app.css +7 -0
  69. package/templates/vanilla/src/app.ts +59 -0
  70. package/templates/vanilla/src/env.d.ts +5 -0
  71. package/templates/vanilla/tsconfig.json +12 -0
@@ -0,0 +1,435 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schemas.wyndlass.ai/protocol/v0/app-definition.schema.json",
4
+ "title": "App definition",
5
+ "description": "The YAML definition of a web component app (scoping doc 7.8). Drives the designer's property panel, the catalog and the MCP tools.",
6
+ "type": "object",
7
+ "required": [
8
+ "id",
9
+ "version",
10
+ "name",
11
+ "element"
12
+ ],
13
+ "additionalProperties": false,
14
+ "properties": {
15
+ "id": {
16
+ "type": "string",
17
+ "pattern": "^[a-z][a-z0-9]*(\\.[a-z][a-z0-9-]*)+$",
18
+ "description": "Reverse-domain id, e.g. com.wyndlass.weather. com.wyndlass. is Wyndlass's own: an app an organization imports may not use it (WP-0100)."
19
+ },
20
+ "version": {
21
+ "$ref": "common.schema.json#/$defs/semver"
22
+ },
23
+ "name": {
24
+ "type": "string",
25
+ "minLength": 1,
26
+ "maxLength": 80
27
+ },
28
+ "description": {
29
+ "type": "string",
30
+ "maxLength": 500
31
+ },
32
+ "element": {
33
+ "type": "string",
34
+ "pattern": "^[a-z][a-z0-9]*-[a-z0-9-]+$",
35
+ "description": "The element's name. From Player API 2 (WP-0100) the host defines the module's default export under this name, a hyphen and a suffix of its own, so it is the readable part of the tag. Wyndlass's apps also define it themselves, for players older than that."
36
+ },
37
+ "params": {
38
+ "type": "object",
39
+ "propertyNames": {
40
+ "pattern": "^[a-z][a-zA-Z0-9]*$"
41
+ },
42
+ "additionalProperties": {
43
+ "$ref": "#/$defs/param"
44
+ }
45
+ },
46
+ "properties": {
47
+ "type": "object",
48
+ "additionalProperties": false,
49
+ "properties": {
50
+ "resizable": {
51
+ "type": "boolean"
52
+ },
53
+ "minDuration": {
54
+ "type": "string",
55
+ "pattern": "^[0-9]+(ms|s|m)$"
56
+ },
57
+ "offline": {
58
+ "type": "boolean"
59
+ },
60
+ "transparent": {
61
+ "type": "boolean"
62
+ },
63
+ "aspectRatio": {
64
+ "type": "string",
65
+ "pattern": "^[0-9]+:[0-9]+$"
66
+ }
67
+ }
68
+ },
69
+ "capabilities": {
70
+ "type": "object",
71
+ "additionalProperties": false,
72
+ "properties": {
73
+ "network": {
74
+ "type": "array",
75
+ "items": {
76
+ "type": "string",
77
+ "maxLength": 253
78
+ }
79
+ },
80
+ "sensors": {
81
+ "description": "Sensors the app reads on the screen. `impressions`: the live, anonymous feed of the people at the screen, where its site measures them (WP-0105): context.impressions.",
82
+ "type": "array",
83
+ "items": {
84
+ "type": "string",
85
+ "maxLength": 64
86
+ }
87
+ },
88
+ "audio": {
89
+ "type": "boolean"
90
+ },
91
+ "peers": {
92
+ "type": "boolean"
93
+ },
94
+ "player": {
95
+ "enum": [
96
+ "read",
97
+ "control"
98
+ ],
99
+ "description": "What the app may do with the player's controller (ADR 0050): read its properties and events (read, the default), or also command playback, audio and display (control). The CMS shows it when the app is added."
100
+ }
101
+ }
102
+ },
103
+ "bindings": {
104
+ "type": "array",
105
+ "items": {
106
+ "type": "string",
107
+ "maxLength": 256
108
+ }
109
+ },
110
+ "slots": {
111
+ "type": "object",
112
+ "description": "Named binding slots (ADR 0053, decision 8; DES-AP-01): each a field the app shows, mapped to a table column in a layout's binding. A layout's binding.fields names these.",
113
+ "propertyNames": {
114
+ "pattern": "^[a-z][a-zA-Z0-9]*$"
115
+ },
116
+ "additionalProperties": {
117
+ "type": "object",
118
+ "required": [
119
+ "label",
120
+ "type"
121
+ ],
122
+ "additionalProperties": false,
123
+ "properties": {
124
+ "label": {
125
+ "type": "string",
126
+ "maxLength": 80
127
+ },
128
+ "type": {
129
+ "enum": [
130
+ "text",
131
+ "number",
132
+ "currency",
133
+ "date",
134
+ "datetime",
135
+ "image",
136
+ "url",
137
+ "boolean"
138
+ ],
139
+ "description": "What the column must hold."
140
+ },
141
+ "required": {
142
+ "type": "boolean"
143
+ },
144
+ "help": {
145
+ "type": "string",
146
+ "maxLength": 300
147
+ }
148
+ }
149
+ }
150
+ },
151
+ "animation": {
152
+ "type": "object",
153
+ "additionalProperties": false,
154
+ "description": "The presets the app's enter and exit hooks take (ADR 0053, decision 8; DES-AH-01 to 07). An app without them is animated as one box.",
155
+ "properties": {
156
+ "enter": {
157
+ "type": "array",
158
+ "items": {
159
+ "type": "string",
160
+ "pattern": "^[a-z][a-z0-9-]{0,31}$"
161
+ },
162
+ "uniqueItems": true,
163
+ "description": "Presets its enter hook plays (fade, slide, typewriter...)."
164
+ },
165
+ "exit": {
166
+ "type": "array",
167
+ "items": {
168
+ "type": "string",
169
+ "pattern": "^[a-z][a-z0-9-]{0,31}$"
170
+ },
171
+ "uniqueItems": true,
172
+ "description": "Presets its exit hook plays."
173
+ },
174
+ "stagger": {
175
+ "type": "boolean",
176
+ "description": "Its items can enter one after another (DES-AN-06)."
177
+ },
178
+ "pages": {
179
+ "type": "boolean",
180
+ "description": "It pages through its items, playing exit and enter at each page (DES-DB-13): its page count comes from the snapshot the layout started with."
181
+ }
182
+ }
183
+ },
184
+ "data": {
185
+ "type": "array",
186
+ "uniqueItems": true,
187
+ "description": "The data service's sources it reads (ADR 0069): weather, news.",
188
+ "items": {
189
+ "type": "string",
190
+ "pattern": "^[a-z][a-z0-9-]{0,31}$"
191
+ }
192
+ },
193
+ "events": {
194
+ "type": "object",
195
+ "additionalProperties": false,
196
+ "properties": {
197
+ "emits": {
198
+ "type": "array",
199
+ "items": {
200
+ "type": "string",
201
+ "maxLength": 128
202
+ }
203
+ },
204
+ "consumes": {
205
+ "type": "array",
206
+ "items": {
207
+ "type": "string",
208
+ "maxLength": 128
209
+ }
210
+ }
211
+ }
212
+ },
213
+ "mobile": {
214
+ "type": "object",
215
+ "additionalProperties": false,
216
+ "properties": {
217
+ "mode": {
218
+ "enum": [
219
+ "render",
220
+ "snapshot",
221
+ "hidden"
222
+ ]
223
+ }
224
+ }
225
+ },
226
+ "locales": {
227
+ "type": "array",
228
+ "items": {
229
+ "$ref": "common.schema.json#/$defs/locale"
230
+ }
231
+ }
232
+ },
233
+ "$defs": {
234
+ "param": {
235
+ "type": "object",
236
+ "required": [
237
+ "type"
238
+ ],
239
+ "additionalProperties": false,
240
+ "properties": {
241
+ "type": {
242
+ "enum": [
243
+ "string",
244
+ "text",
245
+ "number",
246
+ "boolean",
247
+ "enum",
248
+ "color",
249
+ "font",
250
+ "media",
251
+ "location",
252
+ "datetime",
253
+ "duration",
254
+ "url",
255
+ "datatable",
256
+ "column",
257
+ "secret",
258
+ "json"
259
+ ],
260
+ "description": "A param's kind. A font param's value is a typography object (layout.schema.json#/$defs/typography): a family with its weight, style, decoration, letter case and spacing, line height, shadow and scale."
261
+ },
262
+ "label": {
263
+ "type": "string",
264
+ "maxLength": 80
265
+ },
266
+ "default": {},
267
+ "values": {
268
+ "type": "array",
269
+ "minItems": 1,
270
+ "items": {
271
+ "$ref": "#/$defs/paramValue"
272
+ },
273
+ "description": "On an enum, its choices. On any other type, suggestions the designer offers, while any valid value is still allowed (WP-0098). Each is a plain value, or labeled: shown by its label, under its group."
274
+ },
275
+ "group": {
276
+ "type": "string",
277
+ "maxLength": 64
278
+ },
279
+ "required": {
280
+ "type": "boolean"
281
+ },
282
+ "min": {
283
+ "type": "number"
284
+ },
285
+ "max": {
286
+ "type": "number"
287
+ },
288
+ "step": {
289
+ "type": "number",
290
+ "exclusiveMinimum": 0
291
+ },
292
+ "help": {
293
+ "type": "string",
294
+ "maxLength": 300
295
+ },
296
+ "advanced": {
297
+ "type": "boolean"
298
+ },
299
+ "when": {
300
+ "type": "object",
301
+ "minProperties": 1,
302
+ "maxProperties": 8,
303
+ "propertyNames": {
304
+ "pattern": "^[A-Za-z][A-Za-z0-9_]{0,63}$"
305
+ },
306
+ "additionalProperties": {
307
+ "$ref": "#/$defs/paramTest"
308
+ },
309
+ "description": "When the param applies (WP-0068 part f, after gadget.yaml's depends): each key names another param of this app, and its test must hold. A param that does not apply is not shown in the designer and is not required; its value is kept."
310
+ }
311
+ },
312
+ "if": {
313
+ "properties": {
314
+ "type": {
315
+ "const": "enum"
316
+ }
317
+ }
318
+ },
319
+ "then": {
320
+ "required": [
321
+ "values"
322
+ ]
323
+ }
324
+ },
325
+ "paramValue": {
326
+ "description": "A value as a param's values list it (WP-0098): a string, number or boolean, or labeled ({ value, label, group }) for the designer to show by its label, under its group.",
327
+ "if": {
328
+ "type": "object"
329
+ },
330
+ "then": {
331
+ "type": "object",
332
+ "required": [
333
+ "value",
334
+ "label"
335
+ ],
336
+ "additionalProperties": false,
337
+ "properties": {
338
+ "value": {
339
+ "anyOf": [
340
+ { "type": "string" },
341
+ { "type": "number" },
342
+ { "type": "boolean" }
343
+ ]
344
+ },
345
+ "label": {
346
+ "type": "string",
347
+ "minLength": 1,
348
+ "maxLength": 80
349
+ },
350
+ "group": {
351
+ "type": "string",
352
+ "minLength": 1,
353
+ "maxLength": 64
354
+ }
355
+ }
356
+ },
357
+ "else": {
358
+ "anyOf": [
359
+ { "type": "string" },
360
+ { "type": "number" },
361
+ { "type": "boolean" }
362
+ ]
363
+ }
364
+ },
365
+ "paramTest": {
366
+ "type": "object",
367
+ "additionalProperties": false,
368
+ "minProperties": 1,
369
+ "description": "A test of another param's value (WP-0068 part f): every one given must hold. Values compare as text.",
370
+ "properties": {
371
+ "anyOf": {
372
+ "type": "array",
373
+ "minItems": 1,
374
+ "maxItems": 50,
375
+ "items": {
376
+ "anyOf": [
377
+ {
378
+ "type": "string"
379
+ },
380
+ {
381
+ "type": "number"
382
+ },
383
+ {
384
+ "type": "boolean"
385
+ }
386
+ ]
387
+ },
388
+ "description": "Its value is one of these."
389
+ },
390
+ "allOf": {
391
+ "type": "array",
392
+ "minItems": 1,
393
+ "maxItems": 50,
394
+ "items": {
395
+ "anyOf": [
396
+ {
397
+ "type": "string"
398
+ },
399
+ {
400
+ "type": "number"
401
+ },
402
+ {
403
+ "type": "boolean"
404
+ }
405
+ ]
406
+ },
407
+ "description": "Its value, a list, holds every one of these."
408
+ },
409
+ "noneOf": {
410
+ "type": "array",
411
+ "minItems": 1,
412
+ "maxItems": 50,
413
+ "items": {
414
+ "anyOf": [
415
+ {
416
+ "type": "string"
417
+ },
418
+ {
419
+ "type": "number"
420
+ },
421
+ {
422
+ "type": "boolean"
423
+ }
424
+ ]
425
+ },
426
+ "description": "Its value is none of these."
427
+ },
428
+ "set": {
429
+ "type": "boolean",
430
+ "description": "true: it has a value; false: it has none (absent, empty text, or an empty list)."
431
+ }
432
+ }
433
+ }
434
+ }
435
+ }
@@ -0,0 +1,172 @@
1
+ {
2
+ "v": 0,
3
+ "note": "Customers' app packages (WP-0100 decisions 2 and 5): one zip of exactly app.json and app.js. A reader answers valid, or the code of the first check that fails, in order. The zip: over limits.zip bytes (too-large); its end of central directory, entries and local headers (not-a-zip); an encrypted entry (encrypted), a folder (folder), a name with a / or \\ (path); not exactly app.json and app.js (entries); a declared size over its limit, app.json limits.definition and app.js limits.module (too-large); unpacked, other than it declares (size-mismatch). The definition: UTF-8 JSON, an object (definition-json); app-definition.schema.json (definition-schema); an id under com.wyndlass. (definition-id); each when names another param (definition-when); a url param's values and default are https addresses (definition-url); capabilities.peers true (definition-peers); data only dataSources (definition-data). The module: UTF-8, an ES2020 module (module-syntax); no import declaration, export … from or import() (module-import); a default export, export default or export { x as default } (module-default). zip is base64. Generated by protocol/scripts/make-app-package-vectors.mjs.",
4
+ "limits": {
5
+ "zip": 6291456,
6
+ "definition": 262144,
7
+ "module": 5242880
8
+ },
9
+ "dataSources": [
10
+ "weather",
11
+ "news",
12
+ "image",
13
+ "calendar"
14
+ ],
15
+ "cases": [
16
+ {
17
+ "name": "a definition and a module",
18
+ "expect": "valid",
19
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbFoKRRWgAAAB2AAAABgAAAGFwcC5qc03NMQrCMBgF4D2neKNdvEBxsQgOOoi9QDBPLcQ/JXnBQOndRSf3D75b9KXgUlm5Tz4HsIkWCo7j+XSIfNGExQF1Dl7cWHp3WKDnVLZi05BMX7LDVXmyxw/0WN3q2OaUhcC7r1F/R+8+UEsBAhQAFAAACAgAAAAhWy5ENk5NAAAAXwAAAAgAAAAAAAAAAAAAAAAAAAAAAGFwcC5qc29uUEsBAhQAFAAACAgAAAAhWxaCkUVoAAAAdgAAAAYAAAAAAAAAAAAAAAAAcwAAAGFwcC5qc1BLBQYAAAAAAgACAGoAAAD/AAAAAAA="
20
+ },
21
+ {
22
+ "name": "every capability it may ask for, params with conditions and https suggestions, and a bundler's ES2020 module",
23
+ "expect": "valid",
24
+ "zip": "UEsDBBQAAAgIAAAAIVv0IhEMGwEAAPIBAAAIAAAAYXBwLmpzb25lkctqw0AMRX/FaD110q1/ohS6K1konut6yLw6mqlrgv+9yOmD0J1AukcH6UrO0kBjCj0+OWSP/r2h4eGcuFgy9IEiLkUa6LE/9kcyFDmABnrWse5nDB4BsdJA93ELGYvL9YZ4ceMFVbqRvYc13VRS6OqMbg91skpF6MlQ5sJBaLiSpFZGaFXXrHsRW1Av9g1CwytdXJILGZoASyddOXHzqnLrbN+tP0Qr/o4w15plOBx2i987jCkcYloUucyI9zIc16dJs7et27ZthkbOfHbeVYfdPaIuqVx07B9asYIoqewKLuQC0UuLdrhZl2iopcFQ9ryi7F+KtSR1z4DmJvaCzZDlykpZwHVG0SdhETLkAr+B1MwjWi502r4AUEsDBBQAAAgIAAAAIVtXyUVFhwAAAJgAAAAGAAAAYXBwLmpzFcyxCsIwEIDh3acInRqEoHMJGURwqJN9gWty1uL1KrmLVErfXbr+fPxfyAZ8JBAxuChyEnPr7u2VcELWNc7MGBXTBYh6iO/a7k3UFD9Onzmrm1DBlUwhVFWjr1FcAgVBdewfmkce6vOJ7bEeaO6Bul0swf1CKHbbGlz2ywoGxCR8QiHdmsMfUEsBAhQAFAAACAgAAAAhW/QiEQwbAQAA8gEAAAgAAAAAAAAAAAAAAAAAAAAAAGFwcC5qc29uUEsBAhQAFAAACAgAAAAhW1fJRUWHAAAAmAAAAAYAAAAAAAAAAAAAAAAAQQEAAGFwcC5qc1BLBQYAAAAAAgACAGoAAADsAQAAAAA="
25
+ },
26
+ {
27
+ "name": "not a zip",
28
+ "expect": "not-a-zip",
29
+ "zip": "YXBwLmpzb24gYW5kIGFwcC5qcywgYnV0IG5vdCB6aXBwZWQ="
30
+ },
31
+ {
32
+ "name": "no module",
33
+ "expect": "entries",
34
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAQIUABQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAAAAAAAAAAAAAAAAAAABhcHAuanNvblBLBQYAAAAAAQABADYAAABzAAAAAAA="
35
+ },
36
+ {
37
+ "name": "an entry more",
38
+ "expect": "entries",
39
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbFoKRRWgAAAB2AAAABgAAAGFwcC5qc03NMQrCMBgF4D2neKNdvEBxsQgOOoi9QDBPLcQ/JXnBQOndRSf3D75b9KXgUlm5Tz4HsIkWCo7j+XSIfNGExQF1Dl7cWHp3WKDnVLZi05BMX7LDVXmyxw/0WN3q2OaUhcC7r1F/R+8+UEsDBBQAAAgIAAAAIVsmfNJKEAAAAA4AAAAJAAAAUkVBRE1FLm1kU1YILE0tTVVIyk8sSuECAFBLAQIUABQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAAAAAAAAAAAAAAAAAAABhcHAuanNvblBLAQIUABQAAAgIAAAAIVsWgpFFaAAAAHYAAAAGAAAAAAAAAAAAAAAAAHMAAABhcHAuanNQSwECFAAUAAAICAAAACFbJnzSShAAAAAOAAAACQAAAAAAAAAAAAAAAAD/AAAAUkVBRE1FLm1kUEsFBgAAAAADAAMAoQAAADYBAAAAAA=="
40
+ },
41
+ {
42
+ "name": "the module twice",
43
+ "expect": "entries",
44
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbFoKRRWgAAAB2AAAABgAAAGFwcC5qc03NMQrCMBgF4D2neKNdvEBxsQgOOoi9QDBPLcQ/JXnBQOndRSf3D75b9KXgUlm5Tz4HsIkWCo7j+XSIfNGExQF1Dl7cWHp3WKDnVLZi05BMX7LDVXmyxw/0WN3q2OaUhcC7r1F/R+8+UEsDBBQAAAgIAAAAIVsWgpFFaAAAAHYAAAAGAAAAYXBwLmpzTc0xCsIwGAXgPad4o128QHGxCA46iL1AME8txD8lecFA6d1FJ/cPvlv0peBSWblPPgewiRYKjuP5dIh80YTFAXUOXtxYendYoOdUtmLTkExfssNVebLHD/RY3erY5pSFwLuvUX9H7z5QSwECFAAUAAAICAAAACFbLkQ2Tk0AAABfAAAACAAAAAAAAAAAAAAAAAAAAAAAYXBwLmpzb25QSwECFAAUAAAICAAAACFbFoKRRWgAAAB2AAAABgAAAAAAAAAAAAAAAABzAAAAYXBwLmpzUEsBAhQAFAAACAgAAAAhWxaCkUVoAAAAdgAAAAYAAAAAAAAAAAAAAAAA/wAAAGFwcC5qc1BLBQYAAAAAAwADAJ4AAACLAQAAAAA="
45
+ },
46
+ {
47
+ "name": "a folder",
48
+ "expect": "folder",
49
+ "zip": "UEsDBBQAAAgIAAAAIVsAAAAAAgAAAAAAAAAHAAAAYXNzZXRzLwMAUEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbFoKRRWgAAAB2AAAABgAAAGFwcC5qc03NMQrCMBgF4D2neKNdvEBxsQgOOoi9QDBPLcQ/JXnBQOndRSf3D75b9KXgUlm5Tz4HsIkWCo7j+XSIfNGExQF1Dl7cWHp3WKDnVLZi05BMX7LDVXmyxw/0WN3q2OaUhcC7r1F/R+8+UEsBAhQAFAAACAgAAAAhWwAAAAACAAAAAAAAAAcAAAAAAAAAAAAQAAAAAAAAAGFzc2V0cy9QSwECFAAUAAAICAAAACFbLkQ2Tk0AAABfAAAACAAAAAAAAAAAAAAAAAAnAAAAYXBwLmpzb25QSwECFAAUAAAICAAAACFbFoKRRWgAAAB2AAAABgAAAAAAAAAAAAAAAACaAAAAYXBwLmpzUEsFBgAAAAADAAMAnwAAACYBAAAAAA=="
50
+ },
51
+ {
52
+ "name": "the module in a folder",
53
+ "expect": "path",
54
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbFoKRRWgAAAB2AAAACwAAAGRpc3QvYXBwLmpzTc0xCsIwGAXgPad4o128QHGxCA46iL1AME8txD8lecFA6d1FJ/cPvlv0peBSWblPPgewiRYKjuP5dIh80YTFAXUOXtxYendYoOdUtmLTkExfssNVebLHD/RY3erY5pSFwLuvUX9H7z5QSwECFAAUAAAICAAAACFbLkQ2Tk0AAABfAAAACAAAAAAAAAAAAAAAAAAAAAAAYXBwLmpzb25QSwECFAAUAAAICAAAACFbFoKRRWgAAAB2AAAACwAAAAAAAAAAAAAAAABzAAAAZGlzdC9hcHAuanNQSwUGAAAAAAIAAgBvAAAABAEAAAAA"
55
+ },
56
+ {
57
+ "name": "a name that leaves the package",
58
+ "expect": "path",
59
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbFoKRRWgAAAB2AAAACQAAAC4uL2FwcC5qc03NMQrCMBgF4D2neKNdvEBxsQgOOoi9QDBPLcQ/JXnBQOndRSf3D75b9KXgUlm5Tz4HsIkWCo7j+XSIfNGExQF1Dl7cWHp3WKDnVLZi05BMX7LDVXmyxw/0WN3q2OaUhcC7r1F/R+8+UEsBAhQAFAAACAgAAAAhWy5ENk5NAAAAXwAAAAgAAAAAAAAAAAAAAAAAAAAAAGFwcC5qc29uUEsBAhQAFAAACAgAAAAhWxaCkUVoAAAAdgAAAAkAAAAAAAAAAAAAAAAAcwAAAC4uL2FwcC5qc1BLBQYAAAAAAgACAG0AAAACAQAAAAA="
60
+ },
61
+ {
62
+ "name": "an encrypted entry",
63
+ "expect": "encrypted",
64
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAEICAAAACFbFoKRRWgAAAB2AAAABgAAAGFwcC5qc03NMQrCMBgF4D2neKNdvEBxsQgOOoi9QDBPLcQ/JXnBQOndRSf3D75b9KXgUlm5Tz4HsIkWCo7j+XSIfNGExQF1Dl7cWHp3WKDnVLZi05BMX7LDVXmyxw/0WN3q2OaUhcC7r1F/R+8+UEsBAhQAFAAACAgAAAAhWy5ENk5NAAAAXwAAAAgAAAAAAAAAAAAAAAAAAAAAAGFwcC5qc29uUEsBAhQAFAABCAgAAAAhWxaCkUVoAAAAdgAAAAYAAAAAAAAAAAAAAAAAcwAAAGFwcC5qc1BLBQYAAAAAAgACAGoAAAD/AAAAAAA="
65
+ },
66
+ {
67
+ "name": "a module over 5 MiB",
68
+ "expect": "too-large",
69
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbiHhu82QUAAB5AFAABgAAAGFwcC5qc+zNMUrEUBRA0T6reKU2zgIGG0Ww0ELGDQTz1IH4MyQvGBhm76KVizinvnDfxn5Z4mXNNe+mfh4it8o2LPH4+vz0MOZXtopzF7Gehr7yqk3f13GO+jwuN5Vb3U+tfpPbONR8bB9/wT4u3aXL7TTNFUO+9+tY/x77brcLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOCnPTgkAAAAYBjk3z/wQtwCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwWVBLAQIUABQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAAAAAAAAAAAAAAAAAAABhcHAuanNvblBLAQIUABQAAAgIAAAAIVuIeG7zZBQAAHkAUAAGAAAAAAAAAAAAAAAAAHMAAABhcHAuanNQSwUGAAAAAAIAAgBqAAAA+xQAAAAA"
70
+ },
71
+ {
72
+ "name": "a definition over 256 KiB",
73
+ "expect": "too-large",
74
+ "zip": "UEsDBBQAAAgIAAAAIVs+8zJVZAEAAHAABAAIAAAAYXBwLmpzb27tzE0KggAUhdGtxBuX2NRdtATLNxD8Sy2EaO8R0aDWcM74u/cRbRNVXMa+yK3upy6L6y1veTiP9dzEPu45L+04RBXHoizK2MdQ9xlVnN7Z7ptll30Oa1TxO29yuczttH4uNgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAP/F8AVBLAwQUAAAICAAAACFbFoKRRWgAAAB2AAAABgAAAGFwcC5qc03NMQrCMBgF4D2neKNdvEBxsQgOOoi9QDBPLcQ/JXnBQOndRSf3D75b9KXgUlm5Tz4HsIkWCo7j+XSIfNGExQF1Dl7cWHp3WKDnVLZi05BMX7LDVXmyxw/0WN3q2OaUhcC7r1F/R+8+UEsBAhQAFAAACAgAAAAhWz7zMlVkAQAAcAAEAAgAAAAAAAAAAAAAAAAAAAAAAGFwcC5qc29uUEsBAhQAFAAACAgAAAAhWxaCkUVoAAAAdgAAAAYAAAAAAAAAAAAAAAAAigEAAGFwcC5qc1BLBQYAAAAAAgACAGoAAAAWAgAAAAA="
75
+ },
76
+ {
77
+ "name": "a module that unpacks to 6 MiB but says 1 KiB (a zip bomb)",
78
+ "expect": "size-mismatch",
79
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbrc0K1V0YAAAABAAABgAAAGFwcC5qc+zNMUrEUBRA0T6reKU2zgIGG0Ww0ELGDQTz1IH4MyQvGBhm76KVizinvnDfxn5Z4mXNNe+mfh4it8o2LPH4+vz0MOZXtopzF7Gehr7yqk3f13GO+jwuN5Vb3U+tfpPbONR8bB9/wT4u3aXL7TTNFUO+9+tY/x77brcLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOCnPTgkAAAAYBjk3z/wYtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHC1AFBLAQIUABQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAAAAAAAAAAAAAAAAAAABhcHAuanNvblBLAQIUABQAAAgIAAAAIVutzQrVXRgAAAAEAAAGAAAAAAAAAAAAAAAAAHMAAABhcHAuanNQSwUGAAAAAAIAAgBqAAAA9BgAAAAA"
80
+ },
81
+ {
82
+ "name": "a module that unpacks to less than it says",
83
+ "expect": "size-mismatch",
84
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbFoKRRWgAAACAAAAABgAAAGFwcC5qc03NMQrCMBgF4D2neKNdvEBxsQgOOoi9QDBPLcQ/JXnBQOndRSf3D75b9KXgUlm5Tz4HsIkWCo7j+XSIfNGExQF1Dl7cWHp3WKDnVLZi05BMX7LDVXmyxw/0WN3q2OaUhcC7r1F/R+8+UEsBAhQAFAAACAgAAAAhWy5ENk5NAAAAXwAAAAgAAAAAAAAAAAAAAAAAAAAAAGFwcC5qc29uUEsBAhQAFAAACAgAAAAhWxaCkUVoAAAAgAAAAAYAAAAAAAAAAAAAAAAAcwAAAGFwcC5qc1BLBQYAAAAAAgACAGoAAAD/AAAAAAA="
85
+ },
86
+ {
87
+ "name": "a definition that is not JSON",
88
+ "expect": "definition-json",
89
+ "zip": "UEsDBBQAAAgIAAAAIVuHv9AdHgAAABwAAAAIAAAAYXBwLmpzb27LTLFSSM7P1UutSMwtyEnVKyxNLU3VTcpPLErhAgBQSwMEFAAACAgAAAAhWxaCkUVoAAAAdgAAAAYAAABhcHAuanNNzTEKwjAYBeA9p3ijXbxAcbEIDjqIvUAwTy3EPyV5wUDp3UUn9w++W/Sl4FJZuU8+B7CJFgqO4/l0iHzRhMUBdQ5e3Fh6d1ig51S2YtOQTF+yw1V5sscP9Fjd6tjmlIXAu69Rf0fvPlBLAQIUABQAAAgIAAAAIVuHv9AdHgAAABwAAAAIAAAAAAAAAAAAAAAAAAAAAABhcHAuanNvblBLAQIUABQAAAgIAAAAIVsWgpFFaAAAAHYAAAAGAAAAAAAAAAAAAAAAAEQAAABhcHAuanNQSwUGAAAAAAIAAgBqAAAA0AAAAAAA"
90
+ },
91
+ {
92
+ "name": "a definition without an element",
93
+ "expect": "definition-schema",
94
+ "zip": "UEsDBBQAAAgIAAAAIVv0EkmaQwAAAEcAAAAIAAAAYXBwLmpzb26rVspMUbJSSs7P1UutSMwtyEnVKyxNLU3VTcpPLEpR0lEqSy0qzszPU7JSMtQz0DNQ0lHKS8xNVbJSCgQpU4AoqwUAUEsDBBQAAAgIAAAAIVsWgpFFaAAAAHYAAAAGAAAAYXBwLmpzTc0xCsIwGAXgPad4o128QHGxCA46iL1AME8txD8lecFA6d1FJ/cPvlv0peBSWblPPgewiRYKjuP5dIh80YTFAXUOXtxYendYoOdUtmLTkExfssNVebLHD/RY3erY5pSFwLuvUX9H7z5QSwECFAAUAAAICAAAACFb9BJJmkMAAABHAAAACAAAAAAAAAAAAAAAAAAAAAAAYXBwLmpzb25QSwECFAAUAAAICAAAACFbFoKRRWgAAAB2AAAABgAAAAAAAAAAAAAAAABpAAAAYXBwLmpzUEsFBgAAAAACAAIAagAAAPUAAAAAAA=="
95
+ },
96
+ {
97
+ "name": "a definition with a field it does not know",
98
+ "expect": "definition-schema",
99
+ "zip": "UEsDBBQAAAgIAAAAIVu5c/CtVwAAAG8AAAAIAAAAYXBwLmpzb25Vy70OQDAYBdBXkTvTsH6vYPII1d6hSX9okYp4dzEY7OdccBYCk4Ji1WHxVOvOnd2cdLZocTAXlyIEg+pVjxZRB0Iwvaz5GD0D4wbBvxeazG3kCUHF/QBQSwMEFAAACAgAAAAhWxaCkUVoAAAAdgAAAAYAAABhcHAuanNNzTEKwjAYBeA9p3ijXbxAcbEIDjqIvUAwTy3EPyV5wUDp3UUn9w++W/Sl4FJZuU8+B7CJFgqO4/l0iHzRhMUBdQ5e3Fh6d1ig51S2YtOQTF+yw1V5sscP9Fjd6tjmlIXAu69Rf0fvPlBLAQIUABQAAAgIAAAAIVu5c/CtVwAAAG8AAAAIAAAAAAAAAAAAAAAAAAAAAABhcHAuanNvblBLAQIUABQAAAgIAAAAIVsWgpFFaAAAAHYAAAAGAAAAAAAAAAAAAAAAAH0AAABhcHAuanNQSwUGAAAAAAIAAgBqAAAACQEAAAAA"
100
+ },
101
+ {
102
+ "name": "Wyndlass's own id",
103
+ "expect": "definition-id",
104
+ "zip": "UEsDBBQAAAgIAAAAIVvSVPQ7UAAAAFoAAAAIAAAAYXBwLmpzb24lyEEKgCAQBdCrxF+b2HZu0RFMZyHpDGkWEd09ord8N1IEIWix5yUx+9ZsyBpWGBxcW1IBYbLOOhiILwzC3LnzsKivEQacubDsIGzfj/8/L1BLAwQUAAAICAAAACFbFoKRRWgAAAB2AAAABgAAAGFwcC5qc03NMQrCMBgF4D2neKNdvEBxsQgOOoi9QDBPLcQ/JXnBQOndRSf3D75b9KXgUlm5Tz4HsIkWCo7j+XSIfNGExQF1Dl7cWHp3WKDnVLZi05BMX7LDVXmyxw/0WN3q2OaUhcC7r1F/R+8+UEsBAhQAFAAACAgAAAAhW9JU9DtQAAAAWgAAAAgAAAAAAAAAAAAAAAAAAAAAAGFwcC5qc29uUEsBAhQAFAAACAgAAAAhWxaCkUVoAAAAdgAAAAYAAAAAAAAAAAAAAAAAdgAAAGFwcC5qc1BLBQYAAAAAAgACAGoAAAACAQAAAAA="
105
+ },
106
+ {
107
+ "name": "a condition on a param that is not there",
108
+ "expect": "definition-when",
109
+ "zip": "UEsDBBQAAAgIAAAAIVv8oJSFdgAAAKUAAAAIAAAAYXBwLmpzb25Vi8sKwjAURH9FZh1D3eYnxLW4uDZTLORl0qil+O9yERfOZobhnA2zh8OYo+VLYgm0987O/TVL9TB4sLY5Jzgc7GAHGCSJhMNJsd0PY2BkWuDwrxepEhvchon02staVO81wOB5Y9Kz5V5H6pK0Hie485e/vDUfUEsDBBQAAAgIAAAAIVsWgpFFaAAAAHYAAAAGAAAAYXBwLmpzTc0xCsIwGAXgPad4o128QHGxCA46iL1AME8txD8lecFA6d1FJ/cPvlv0peBSWblPPgewiRYKjuP5dIh80YTFAXUOXtxYendYoOdUtmLTkExfssNVebLHD/RY3erY5pSFwLuvUX9H7z5QSwECFAAUAAAICAAAACFb/KCUhXYAAAClAAAACAAAAAAAAAAAAAAAAAAAAAAAYXBwLmpzb25QSwECFAAUAAAICAAAACFbFoKRRWgAAAB2AAAABgAAAAAAAAAAAAAAAACcAAAAYXBwLmpzUEsFBgAAAAACAAIAagAAACgBAAAAAA=="
110
+ },
111
+ {
112
+ "name": "a condition on itself",
113
+ "expect": "definition-when",
114
+ "zip": "UEsDBBQAAAgIAAAAIVuT10PMdAAAAKMAAAAIAAAAYXBwLmpzb25VizEOwjAQBL+Ctg5WaO8TiBpRGLwBS/HZ2E5IFPF35AIJtpliZzZ4B8EtBsPFhjTSPCdO3F+jzQ4dZubio0JwML3p0UFtIASnpu2+GkcGaoXgP08221AgGwbSNdY1tbzU7PWODq8H9fe3uh4HyBkLLu+2D1BLAwQUAAAICAAAACFbFoKRRWgAAAB2AAAABgAAAGFwcC5qc03NMQrCMBgF4D2neKNdvEBxsQgOOoi9QDBPLcQ/JXnBQOndRSf3D75b9KXgUlm5Tz4HsIkWCo7j+XSIfNGExQF1Dl7cWHp3WKDnVLZi05BMX7LDVXmyxw/0WN3q2OaUhcC7r1F/R+8+UEsBAhQAFAAACAgAAAAhW5PXQ8x0AAAAowAAAAgAAAAAAAAAAAAAAAAAAAAAAGFwcC5qc29uUEsBAhQAFAAACAgAAAAhWxaCkUVoAAAAdgAAAAYAAAAAAAAAAAAAAAAAmgAAAGFwcC5qc1BLBQYAAAAAAgACAGoAAAAmAQAAAAA="
115
+ },
116
+ {
117
+ "name": "an http suggestion for a url",
118
+ "expect": "definition-url",
119
+ "zip": "UEsDBBQAAAgIAAAAIVthj3q9egAAAKoAAAAIAAAAYXBwLmpzb25VjssKwjAQRX9F7romdTt/4VpcjO2IhUwS87BKyb9LBAVXd3PO4W5YZhCmoEaerNGJuVepsr8ETjMGPCTlJXgQDmY0IwZ4VgHh2LHdFxMnKr6A8K9HTqwZtOEqMvctr9j1mlyvs6uSQSfcSolk7cf+XZmCWh9WnFtrb1BLAwQUAAAICAAAACFbFoKRRWgAAAB2AAAABgAAAGFwcC5qc03NMQrCMBgF4D2neKNdvEBxsQgOOoi9QDBPLcQ/JXnBQOndRSf3D75b9KXgUlm5Tz4HsIkWCo7j+XSIfNGExQF1Dl7cWHp3WKDnVLZi05BMX7LDVXmyxw/0WN3q2OaUhcC7r1F/R+8+UEsBAhQAFAAACAgAAAAhW2GPer16AAAAqgAAAAgAAAAAAAAAAAAAAAAAAAAAAGFwcC5qc29uUEsBAhQAFAAACAgAAAAhWxaCkUVoAAAAdgAAAAYAAAAAAAAAAAAAAAAAoAAAAGFwcC5qc1BLBQYAAAAAAgACAGoAAAAsAQAAAAA="
120
+ },
121
+ {
122
+ "name": "an http default for a url",
123
+ "expect": "definition-url",
124
+ "zip": "UEsDBBQAAAgIAAAAIVvs3U8ZeAAAAKkAAAAIAAAAYXBwLmpzb25VzksOAiEQhOGrmFojjNu+hUdoh544CQ3IgI9MuLvBRBNXtfm/pHasHoQ5qZUnaw5ib02aHC+Ji4fBXcq2pgjCyU52gkFkFRDOIzt8MwmiEisI/zxzYd1AOxYRP7a+8uCtBBh4WbiFwa61ZnLuo39X5qQupgd6729QSwMEFAAACAgAAAAhWxaCkUVoAAAAdgAAAAYAAABhcHAuanNNzTEKwjAYBeA9p3ijXbxAcbEIDjqIvUAwTy3EPyV5wUDp3UUn9w++W/Sl4FJZuU8+B7CJFgqO4/l0iHzRhMUBdQ5e3Fh6d1ig51S2YtOQTF+yw1V5sscP9Fjd6tjmlIXAu69Rf0fvPlBLAQIUABQAAAgIAAAAIVvs3U8ZeAAAAKkAAAAIAAAAAAAAAAAAAAAAAAAAAABhcHAuanNvblBLAQIUABQAAAgIAAAAIVsWgpFFaAAAAHYAAAAGAAAAAAAAAAAAAAAAAJ4AAABhcHAuanNQSwUGAAAAAAIAAgBqAAAAKgEAAAAA"
125
+ },
126
+ {
127
+ "name": "peers",
128
+ "expect": "definition-peers",
129
+ "zip": "UEsDBBQAAAgIAAAAIVtPS2M5XwAAAH0AAAAIAAAAYXBwLmpzb25VyzkKhEAQBdCryI+10bRuMUco9QcFvdnLMCDeXQwMJn/vhO0QbCk4/jRkT3d0dk5r0rJjxJelWooQLG52M0ZEDYTg87DhZfQMjA2C/75p1tW8NWOFnMhkqZBWOq/rBlBLAwQUAAAICAAAACFbFoKRRWgAAAB2AAAABgAAAGFwcC5qc03NMQrCMBgF4D2neKNdvEBxsQgOOoi9QDBPLcQ/JXnBQOndRSf3D75b9KXgUlm5Tz4HsIkWCo7j+XSIfNGExQF1Dl7cWHp3WKDnVLZi05BMX7LDVXmyxw/0WN3q2OaUhcC7r1F/R+8+UEsBAhQAFAAACAgAAAAhW09LYzlfAAAAfQAAAAgAAAAAAAAAAAAAAAAAAAAAAGFwcC5qc29uUEsBAhQAFAAACAgAAAAhWxaCkUVoAAAAdgAAAAYAAAAAAAAAAAAAAAAAhQAAAGFwcC5qc1BLBQYAAAAAAgACAGoAAAARAQAAAAA="
130
+ },
131
+ {
132
+ "name": "a data source customers' apps may not read",
133
+ "expect": "definition-data",
134
+ "zip": "UEsDBBQAAAgIAAAAIVsUDfkJYAAAAHsAAAAIAAAAYXBwLmpzb25Vy7EKwjAYhdFXkW9OQ13zFs7F4ddcsNAkNk1UkL67ODi4n/NmjgSuJXm9LN0X+bWra7gUqxHHQ3WbSyZw9KMfcWRLInD6ssOPaVFSbgT+e7RmhImnrN1Ucay9NG2c9w9QSwMEFAAACAgAAAAhWxaCkUVoAAAAdgAAAAYAAABhcHAuanNNzTEKwjAYBeA9p3ijXbxAcbEIDjqIvUAwTy3EPyV5wUDp3UUn9w++W/Sl4FJZuU8+B7CJFgqO4/l0iHzRhMUBdQ5e3Fh6d1ig51S2YtOQTF+yw1V5sscP9Fjd6tjmlIXAu69Rf0fvPlBLAQIUABQAAAgIAAAAIVsUDfkJYAAAAHsAAAAIAAAAAAAAAAAAAAAAAAAAAABhcHAuanNvblBLAQIUABQAAAgIAAAAIVsWgpFFaAAAAHYAAAAGAAAAAAAAAAAAAAAAAIYAAABhcHAuanNQSwUGAAAAAAIAAgBqAAAAEgEAAAAA"
135
+ },
136
+ {
137
+ "name": "a module that is not JavaScript",
138
+ "expect": "module-syntax",
139
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbvkt36R8AAAAiAAAABgAAAGFwcC5qc7MpTi7KLCixS60oyC8qUUhJTUsszSlRMLTRh0pwAQBQSwECFAAUAAAICAAAACFbLkQ2Tk0AAABfAAAACAAAAAAAAAAAAAAAAAAAAAAAYXBwLmpzb25QSwECFAAUAAAICAAAACFbvkt36R8AAAAiAAAABgAAAAAAAAAAAAAAAABzAAAAYXBwLmpzUEsFBgAAAAACAAIAagAAALYAAAAAAA=="
140
+ },
141
+ {
142
+ "name": "ES2022: a class field",
143
+ "expect": "module-syntax",
144
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbTGIQAEkAAABQAAAABgAAAGFwcC5qc0vOSSwuVggsTS1NdcpPLEpRSK0oSc1LKVbwCPH1cc1JzU3NK1Go5lJQUM7LL1ewVTCw5qrlSq0oyC8qUUhJTUsszSlB0m3NBQBQSwECFAAUAAAICAAAACFbLkQ2Tk0AAABfAAAACAAAAAAAAAAAAAAAAAAAAAAAYXBwLmpzb25QSwECFAAUAAAICAAAACFbTGIQAEkAAABQAAAABgAAAAAAAAAAAAAAAABzAAAAYXBwLmpzUEsFBgAAAAACAAIAagAAAOAAAAAAAA=="
145
+ },
146
+ {
147
+ "name": "ES2021: logical assignment",
148
+ "expect": "module-syntax",
149
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbHyeQG0IAAABAAAAABgAAAGFwcC5qc8tJLVFIVLBVMLDmSlSoqbFVMLTmSq0oyC8qUUhJTUsszSlRSM5JLC5WSK0oSc1LKVbwCPH1cc1JzU3NK1GoruUCAFBLAQIUABQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAAAAAAAAAAAAAAAAAAABhcHAuanNvblBLAQIUABQAAAgIAAAAIVsfJ5AbQgAAAEAAAAAGAAAAAAAAAAAAAAAAAHMAAABhcHAuanNQSwUGAAAAAAIAAgBqAAAA2QAAAAAA"
150
+ },
151
+ {
152
+ "name": "an import",
153
+ "expect": "module-import",
154
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbZ+rTTX0AAACXAAAABgAAAGFwcC5qc03NvQrCMBgF0D1PcemkS32A4KIIDjqIvkAwX20kPyW5wUDpu4ud3A8cF6aUiRkjg8eCIaeArt95x/5dOq2e3pSCW5Uqh2SyhTRKtAXnx/Vy8hIkErMC6mQNZRPTZ4sZHF3pKY3HFPkje9yZXXytQGNRi5K23lYGUz3/Dq2+UEsBAhQAFAAACAgAAAAhWy5ENk5NAAAAXwAAAAgAAAAAAAAAAAAAAAAAAAAAAGFwcC5qc29uUEsBAhQAFAAACAgAAAAhW2fq0019AAAAlwAAAAYAAAAAAAAAAAAAAAAAcwAAAGFwcC5qc1BLBQYAAAAAAgACAGoAAAAUAQAAAAA="
155
+ },
156
+ {
157
+ "name": "an export from another module",
158
+ "expect": "module-import",
159
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbi0CZLHoAAACRAAAABgAAAGFwcC5qc03NOwoCMRQF0D6ruEylFnEBwUYRLLQQ3UAwd3QknyF5wcAwexe1sT9w2MaUBSv0OQV0eh1Spn6Wzqibt6XgXFm5TTY7sAmjKzhcT8e9Z2AUTAqoo7PCRUyvJSbIYyha2GSXonzIBhfJQ7x/gcGsZsXf6tjb6uXvMOoNUEsBAhQAFAAACAgAAAAhWy5ENk5NAAAAXwAAAAgAAAAAAAAAAAAAAAAAAAAAAGFwcC5qc29uUEsBAhQAFAAACAgAAAAhW4tAmSx6AAAAkQAAAAYAAAAAAAAAAAAAAAAAcwAAAGFwcC5qc1BLBQYAAAAAAgACAGoAAAARAQAAAAA="
160
+ },
161
+ {
162
+ "name": "an import()",
163
+ "expect": "module-import",
164
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbuvKmTFwAAABdAAAABgAAAGFwcC5qcxXMMQ5FQBQF0H5WcaOiYQFKkSj8zgaemSvBM37Mk0jE3sVZwOH13w9D4CSnGrxKSuBljCGhG359q9wYDbcD/B4jvTE0ojqKX/MCN+btK/KsrFSMR7mkrKjxuMe9UEsBAhQAFAAACAgAAAAhWy5ENk5NAAAAXwAAAAgAAAAAAAAAAAAAAAAAAAAAAGFwcC5qc29uUEsBAhQAFAAACAgAAAAhW7rypkxcAAAAXQAAAAYAAAAAAAAAAAAAAAAAcwAAAGFwcC5qc1BLBQYAAAAAAgACAGoAAADzAAAAAAA="
165
+ },
166
+ {
167
+ "name": "no default export",
168
+ "expect": "module-default",
169
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbkdDcdUkAAABVAAAABgAAAGFwcC5qc0utKMgvKlFIzkksLlYILE0tTXXKTyxKUUitKEnNSylW8Ajx9XHNSc1NzStRqK7lSoUqz88rLlFIhYrbKigVgnTqJoG0KllzAQBQSwECFAAUAAAICAAAACFbLkQ2Tk0AAABfAAAACAAAAAAAAAAAAAAAAAAAAAAAYXBwLmpzb25QSwECFAAUAAAICAAAACFbkdDcdUkAAABVAAAABgAAAAAAAAAAAAAAAABzAAAAYXBwLmpzUEsFBgAAAAACAAIAagAAAOAAAAAAAA=="
170
+ }
171
+ ]
172
+ }