soustack 0.4.0 → 0.4.1
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/README.md +4 -4
- package/dist/cli/index.js +4412 -1275
- package/dist/cli/index.js.map +1 -1
- package/dist/index.d.mts +106 -80
- package/dist/index.d.ts +106 -80
- package/dist/index.js +4527 -1360
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +4527 -1360
- package/dist/index.mjs.map +1 -1
- package/dist/scrape/index.d.mts +86 -74
- package/dist/scrape/index.d.ts +86 -74
- package/dist/scrape/index.js +91 -64
- package/dist/scrape/index.js.map +1 -1
- package/dist/scrape/index.mjs +91 -64
- package/dist/scrape/index.mjs.map +1 -1
- package/package.json +15 -6
- package/spec/.sync-meta.json +149 -0
- package/spec/SOUSTACK_SPEC_VERSION +1 -0
- package/spec/defs/common.schema.json +46 -0
- package/spec/defs/duration.schema.json +33 -0
- package/spec/defs/entities.schema.json +111 -0
- package/spec/defs/ingredientQuantified.schema.json +9 -0
- package/spec/defs/quantity.schema.json +16 -0
- package/spec/defs/scalingRule.schema.json +127 -0
- package/spec/defs/temperature.schema.json +63 -0
- package/spec/fixtures/content/illustrated-step.valid.json +24 -0
- package/spec/fixtures/invalid/equipment-unknown-reference.invalid.json +38 -0
- package/spec/fixtures/invalid/mise-en-place-unknown-equipment.invalid.json +37 -0
- package/spec/fixtures/invalid/mise-en-place-unknown-input.invalid.json +41 -0
- package/spec/fixtures/invalid/storage-leftovers-missing-method.invalid.json +31 -0
- package/spec/fixtures/invalid/storage-leftovers-wrong-type.invalid.json +23 -0
- package/spec/fixtures/level/base-full.valid.json +162 -0
- package/spec/fixtures/level/base-missing-yield.invalid.json +12 -0
- package/spec/fixtures/level/lite-min.valid.json +14 -0
- package/spec/fixtures/profile/profile-base.valid.json +20 -0
- package/spec/fixtures/profile/profile-equipped.valid.json +28 -0
- package/spec/fixtures/profile/profile-illustrated.valid.json +28 -0
- package/spec/fixtures/profile/profile-lite.valid.json +13 -0
- package/spec/fixtures/profile/profile-prepped.valid.json +31 -0
- package/spec/fixtures/profile/profile-scalable-missing-scaling.invalid.json +29 -0
- package/spec/fixtures/profile/profile-scalable.valid.json +49 -0
- package/spec/fixtures/profile/profile-timed-missing-structured.invalid.json +30 -0
- package/spec/fixtures/scaling/bakers-percent-missing-ref.invalid.json +41 -0
- package/spec/fixtures/scaling/bakers-percent.valid.json +51 -0
- package/spec/fixtures/scaling/discrete-range.invalid.json +36 -0
- package/spec/fixtures/scaling/missing-quantified.invalid.json +40 -0
- package/spec/fixtures/scaling/reject-bakersPercentage.invalid.json +50 -0
- package/spec/fixtures/stacks/compute-missing-timed.invalid.json +32 -0
- package/spec/fixtures/stacks/dietary-no-signal.invalid.json +16 -0
- package/spec/fixtures/stacks/illustrated-empty.invalid.json +13 -0
- package/spec/fixtures/stacks/quantified-string.invalid.json +22 -0
- package/spec/fixtures/stacks/referenced-missing-input.invalid.json +32 -0
- package/spec/fixtures/stacks/storage-min.valid.json +20 -0
- package/spec/fixtures/stacks/storage-no-duration.invalid.json +16 -0
- package/spec/fixtures/stacks/timed-implies-structured.valid.json +50 -0
- package/spec/fixtures/stacks/timed-range.invalid.json +33 -0
- package/spec/fixtures/valid/equipment-scaling-rules.valid.json +76 -0
- package/spec/fixtures/valid/equipment-strings.valid.json +31 -0
- package/spec/fixtures/valid/equipment-structured-uses.valid.json +47 -0
- package/spec/fixtures/valid/mise-en-place-basic.valid.json +31 -0
- package/spec/fixtures/valid/mise-en-place-referenced-equipment.valid.json +51 -0
- package/spec/fixtures/valid/prep-ingredient-strings.valid.json +48 -0
- package/spec/fixtures/valid/prep-ingredient-structured.valid.json +45 -0
- package/spec/fixtures/valid/profile-equipped.valid.json +29 -0
- package/spec/fixtures/valid/profile-prepped.valid.json +32 -0
- package/spec/fixtures/valid/quantified-nested-ingredient-sections.valid.json +61 -0
- package/spec/fixtures/valid/referenced-scaling.valid.json +67 -0
- package/spec/fixtures/valid/storage-leftovers-simple.valid.json +27 -0
- package/spec/fixtures/valid/storage-leftovers-structured.valid.json +43 -0
- package/spec/fixtures/valid/structured-nested-step-sections.valid.json +84 -0
- package/spec/schemas/stacks-registry.schema.json +108 -0
- package/spec/soustack.schema.json +2379 -0
- package/spec/stacks/compute.schema.json +7 -0
- package/spec/stacks/compute@1.md +22 -0
- package/spec/stacks/dietary.schema.json +45 -0
- package/spec/stacks/dietary@1.md +24 -0
- package/spec/stacks/equipment.schema.json +98 -0
- package/spec/stacks/equipment@1.md +244 -0
- package/spec/stacks/illustrated.schema.json +54 -0
- package/spec/stacks/illustrated@1.md +24 -0
- package/spec/stacks/prep.schema.json +76 -0
- package/spec/stacks/prep@1.md +276 -0
- package/spec/stacks/quantified.schema.json +74 -0
- package/spec/stacks/quantified@1.md +24 -0
- package/spec/stacks/referenced.schema.json +96 -0
- package/spec/stacks/referenced@1.md +23 -0
- package/spec/stacks/registry.json +112 -0
- package/spec/stacks/scaling.schema.json +99 -0
- package/spec/stacks/scaling@1.md +238 -0
- package/spec/stacks/storage.schema.json +132 -0
- package/spec/stacks/storage@1.md +256 -0
- package/spec/stacks/structured.schema.json +48 -0
- package/spec/stacks/structured@1.md +24 -0
- package/spec/stacks/substitutions.schema.json +43 -0
- package/spec/stacks/substitutions@1.md +24 -0
- package/spec/stacks/techniques.schema.json +28 -0
- package/spec/stacks/techniques@1.md +23 -0
- package/spec/stacks/timed.schema.json +60 -0
- package/spec/stacks/timed@1.md +23 -0
- package/src/defs/common.schema.json +46 -0
- package/src/defs/duration.schema.json +33 -0
- package/src/defs/entities.schema.json +111 -0
- package/src/defs/ingredientQuantified.schema.json +9 -0
- package/src/defs/quantity.schema.json +16 -0
- package/src/defs/scalingRule.schema.json +127 -0
- package/src/defs/temperature.schema.json +63 -0
- package/src/profiles/base.schema.json +2 -2
- package/src/profiles/equipped.schema.json +10 -0
- package/src/profiles/illustrated.schema.json +4 -4
- package/src/profiles/lite.schema.json +10 -0
- package/src/profiles/prepped.schema.json +10 -0
- package/src/profiles/scalable.schema.json +6 -6
- package/src/profiles/timed.schema.json +10 -0
- package/src/schema.json +2271 -248
- package/src/schemas/stacks-registry.schema.json +108 -0
- package/src/soustack.schema.json +2271 -248
- package/src/stacks/compute.schema.json +7 -0
- package/src/stacks/compute@1.md +22 -0
- package/src/stacks/dietary.schema.json +45 -0
- package/src/stacks/dietary@1.md +24 -0
- package/src/stacks/equipment.schema.json +98 -0
- package/src/stacks/equipment@1.md +244 -0
- package/src/stacks/illustrated.schema.json +54 -0
- package/src/stacks/illustrated@1.md +24 -0
- package/src/stacks/prep.schema.json +76 -0
- package/src/stacks/prep@1.md +276 -0
- package/src/stacks/quantified.schema.json +74 -0
- package/src/stacks/quantified@1.md +24 -0
- package/src/stacks/referenced.schema.json +96 -0
- package/src/stacks/referenced@1.md +23 -0
- package/src/stacks/registry.json +112 -0
- package/src/stacks/scaling.schema.json +99 -0
- package/src/stacks/scaling@1.md +238 -0
- package/src/stacks/storage.schema.json +132 -0
- package/src/stacks/storage@1.md +256 -0
- package/src/stacks/structured.schema.json +48 -0
- package/src/stacks/structured@1.md +24 -0
- package/src/stacks/substitutions.schema.json +43 -0
- package/src/stacks/substitutions@1.md +24 -0
- package/src/stacks/techniques.schema.json +28 -0
- package/src/stacks/techniques@1.md +23 -0
- package/src/stacks/timed.schema.json +60 -0
- package/src/stacks/timed@1.md +23 -0
- package/src/profiles/cookable.schema.json +0 -18
- package/src/profiles/quantified.schema.json +0 -43
- package/src/profiles/schedulable.schema.json +0 -43
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
{
|
|
2
|
+
"ref": "v0.0.2",
|
|
3
|
+
"specVersion": "0.0.2",
|
|
4
|
+
"syncedAt": "2025-12-23T04:25:42.587Z",
|
|
5
|
+
"files": [
|
|
6
|
+
"SOUSTACK_SPEC_VERSION",
|
|
7
|
+
"defs/common.schema.json",
|
|
8
|
+
"defs/duration.schema.json",
|
|
9
|
+
"defs/entities.schema.json",
|
|
10
|
+
"defs/ingredientQuantified.schema.json",
|
|
11
|
+
"defs/quantity.schema.json",
|
|
12
|
+
"defs/scalingRule.schema.json",
|
|
13
|
+
"defs/temperature.schema.json",
|
|
14
|
+
"fixtures/content/illustrated-step.valid.json",
|
|
15
|
+
"fixtures/invalid/equipment-unknown-reference.invalid.json",
|
|
16
|
+
"fixtures/invalid/mise-en-place-unknown-equipment.invalid.json",
|
|
17
|
+
"fixtures/invalid/mise-en-place-unknown-input.invalid.json",
|
|
18
|
+
"fixtures/invalid/storage-leftovers-missing-method.invalid.json",
|
|
19
|
+
"fixtures/invalid/storage-leftovers-wrong-type.invalid.json",
|
|
20
|
+
"fixtures/level/base-full.valid.json",
|
|
21
|
+
"fixtures/level/base-missing-yield.invalid.json",
|
|
22
|
+
"fixtures/level/lite-min.valid.json",
|
|
23
|
+
"fixtures/profile/profile-base.valid.json",
|
|
24
|
+
"fixtures/profile/profile-equipped.valid.json",
|
|
25
|
+
"fixtures/profile/profile-illustrated.valid.json",
|
|
26
|
+
"fixtures/profile/profile-lite.valid.json",
|
|
27
|
+
"fixtures/profile/profile-prepped.valid.json",
|
|
28
|
+
"fixtures/profile/profile-scalable-missing-scaling.invalid.json",
|
|
29
|
+
"fixtures/profile/profile-scalable.valid.json",
|
|
30
|
+
"fixtures/profile/profile-timed-missing-structured.invalid.json",
|
|
31
|
+
"fixtures/scaling/bakers-percent-missing-ref.invalid.json",
|
|
32
|
+
"fixtures/scaling/bakers-percent.valid.json",
|
|
33
|
+
"fixtures/scaling/discrete-range.invalid.json",
|
|
34
|
+
"fixtures/scaling/missing-quantified.invalid.json",
|
|
35
|
+
"fixtures/scaling/reject-bakersPercentage.invalid.json",
|
|
36
|
+
"fixtures/stacks/compute-missing-timed.invalid.json",
|
|
37
|
+
"fixtures/stacks/dietary-no-signal.invalid.json",
|
|
38
|
+
"fixtures/stacks/illustrated-empty.invalid.json",
|
|
39
|
+
"fixtures/stacks/quantified-string.invalid.json",
|
|
40
|
+
"fixtures/stacks/referenced-missing-input.invalid.json",
|
|
41
|
+
"fixtures/stacks/storage-min.valid.json",
|
|
42
|
+
"fixtures/stacks/storage-no-duration.invalid.json",
|
|
43
|
+
"fixtures/stacks/timed-implies-structured.valid.json",
|
|
44
|
+
"fixtures/stacks/timed-range.invalid.json",
|
|
45
|
+
"fixtures/valid/equipment-scaling-rules.valid.json",
|
|
46
|
+
"fixtures/valid/equipment-strings.valid.json",
|
|
47
|
+
"fixtures/valid/equipment-structured-uses.valid.json",
|
|
48
|
+
"fixtures/valid/mise-en-place-basic.valid.json",
|
|
49
|
+
"fixtures/valid/mise-en-place-referenced-equipment.valid.json",
|
|
50
|
+
"fixtures/valid/prep-ingredient-strings.valid.json",
|
|
51
|
+
"fixtures/valid/prep-ingredient-structured.valid.json",
|
|
52
|
+
"fixtures/valid/profile-equipped.valid.json",
|
|
53
|
+
"fixtures/valid/profile-prepped.valid.json",
|
|
54
|
+
"fixtures/valid/quantified-nested-ingredient-sections.valid.json",
|
|
55
|
+
"fixtures/valid/referenced-scaling.valid.json",
|
|
56
|
+
"fixtures/valid/storage-leftovers-simple.valid.json",
|
|
57
|
+
"fixtures/valid/storage-leftovers-structured.valid.json",
|
|
58
|
+
"fixtures/valid/structured-nested-step-sections.valid.json",
|
|
59
|
+
"schemas/stacks-registry.schema.json",
|
|
60
|
+
"soustack.schema.json",
|
|
61
|
+
"stacks/compute.schema.json",
|
|
62
|
+
"stacks/dietary.schema.json",
|
|
63
|
+
"stacks/equipment.schema.json",
|
|
64
|
+
"stacks/illustrated.schema.json",
|
|
65
|
+
"stacks/prep.schema.json",
|
|
66
|
+
"stacks/quantified.schema.json",
|
|
67
|
+
"stacks/referenced.schema.json",
|
|
68
|
+
"stacks/registry.json",
|
|
69
|
+
"stacks/scaling.schema.json",
|
|
70
|
+
"stacks/storage.schema.json",
|
|
71
|
+
"stacks/structured.schema.json",
|
|
72
|
+
"stacks/substitutions.schema.json",
|
|
73
|
+
"stacks/techniques.schema.json",
|
|
74
|
+
"stacks/timed.schema.json"
|
|
75
|
+
],
|
|
76
|
+
"checksums": {
|
|
77
|
+
"SOUSTACK_SPEC_VERSION": "a5dd346546a384362936b97a4c2f5da2d3d253043ea9679aa7b97d89550dfdbd",
|
|
78
|
+
"defs/common.schema.json": "798f7a91bb9f2f59f4803a986ecfd56a6ab8158575c92bd311f87a15a59f4c13",
|
|
79
|
+
"defs/duration.schema.json": "151b9efdede26e6806696734b9cdc747121638f5cf905f45073e5a25bec951f0",
|
|
80
|
+
"defs/entities.schema.json": "1c720a456c766c5c7fc5762a37810f097bd978188ec7fcc5811bceb1861658dc",
|
|
81
|
+
"defs/ingredientQuantified.schema.json": "23222808768642b9a35dd0e02fdd92c45f41f4b4d7061badb4bfcf0ad921e44d",
|
|
82
|
+
"defs/quantity.schema.json": "3556dd91b04c4aa85f356e572ff4bb3470ca64f3965fb7cb4764f5037cd18f17",
|
|
83
|
+
"defs/scalingRule.schema.json": "ded6128907b832a655c556520fccf9a2e67099f3fe494a8bb0a11df32ff5011e",
|
|
84
|
+
"defs/temperature.schema.json": "ff3106728fdf2ecb3354c6f66186b8888ab6d86dc32996d464b47e92a13fb115",
|
|
85
|
+
"fixtures/content/illustrated-step.valid.json": "24866d0caf5b90d715f495ea36b8944711aace084148812308eb1304b83553f9",
|
|
86
|
+
"fixtures/invalid/equipment-unknown-reference.invalid.json": "9fe0a6e769a3cdd03b7eb2be915b0a83d5c499b3c67a478d65b7253ef48305b1",
|
|
87
|
+
"fixtures/invalid/mise-en-place-unknown-equipment.invalid.json": "7274a3d2edaee3e81604463d85a45626886c63b1992f5d1fb51338c379a0e451",
|
|
88
|
+
"fixtures/invalid/mise-en-place-unknown-input.invalid.json": "1689ef33e0ce8be6f340b3ce586d46b716992ab3123e5599b1abb56a86e121db",
|
|
89
|
+
"fixtures/invalid/storage-leftovers-missing-method.invalid.json": "4c484ebc414db0967d9c9050d11e0fe07dcb56adf4adae61dee39601a42120b9",
|
|
90
|
+
"fixtures/invalid/storage-leftovers-wrong-type.invalid.json": "1711e00b7d307497843e6f85e4b84c4677aa0894d32420b1eb68cd575258c902",
|
|
91
|
+
"fixtures/level/base-full.valid.json": "6d390c0c7e4f448d03c095bab4e370363c71bdf0a9376ca1b373bed7d38c6571",
|
|
92
|
+
"fixtures/level/base-missing-yield.invalid.json": "e79da46be3f32289644ca902f751adb43a1c95679b50410dc5d903c7bfd46e10",
|
|
93
|
+
"fixtures/level/lite-min.valid.json": "4d730ef96510f447a8d4fb9c1b4a1a2695b454c238128624d13443175694d0b4",
|
|
94
|
+
"fixtures/profile/profile-base.valid.json": "6932970e315bec153ae7bbe9a178afbb4ac8c351b7803dbcd5d7ca24926e7596",
|
|
95
|
+
"fixtures/profile/profile-equipped.valid.json": "ef0d59b13f763a3224ab0c3e8fbc1c68ffda110c0d75adbeba2b175cb6a727a7",
|
|
96
|
+
"fixtures/profile/profile-illustrated.valid.json": "cdf05ca54289bb4c4dab1107bfb8f4ce2582f8959778992b88e851133763c119",
|
|
97
|
+
"fixtures/profile/profile-lite.valid.json": "045af5ebe472b550d49fa43e7961cde79978edeae343216a1c6c78f6f4c96046",
|
|
98
|
+
"fixtures/profile/profile-prepped.valid.json": "e5038db70eb90727fdc13c4d1c4528ce453e21af5f9be9f84f571b63c3b10f86",
|
|
99
|
+
"fixtures/profile/profile-scalable-missing-scaling.invalid.json": "aaaa1dd4580699820febda3d924fcd6262826ba4a58b95080fde3fae7d2947ed",
|
|
100
|
+
"fixtures/profile/profile-scalable.valid.json": "4a9ec6a48347b0595d33ff32ed4960b20dadd40fa310f20e08380f9517037758",
|
|
101
|
+
"fixtures/profile/profile-timed-missing-structured.invalid.json": "15b2cde887705f16028931bb3ca346953ad58e678b2c4327ae6c9351a494d34c",
|
|
102
|
+
"fixtures/scaling/bakers-percent-missing-ref.invalid.json": "cce59649410792c186183e910daf58cbbdb04546b68a8951b48f121f2800359b",
|
|
103
|
+
"fixtures/scaling/bakers-percent.valid.json": "4937c825c12e2f8bddf4b8f077c4d641c11a3ffc29fbfb0298431e29e8ec4553",
|
|
104
|
+
"fixtures/scaling/discrete-range.invalid.json": "1fc7a99b1a228b9a7d8ae0f9e37e71ec5f4b32c6efe6127643e39874a70fbbfe",
|
|
105
|
+
"fixtures/scaling/missing-quantified.invalid.json": "830c7b07672d7525f31472a3f84667c24f4e6815d7ed1a02ed890cac20302ef6",
|
|
106
|
+
"fixtures/scaling/reject-bakersPercentage.invalid.json": "5f92295050320b04acaae5fc01eafe6edb50689fcb7d8de7a924234aa177e3cd",
|
|
107
|
+
"fixtures/stacks/compute-missing-timed.invalid.json": "c6b0729054f682d8cdab777beea1ca2ec9af9ed24c88f9aa2194c7e25ce85f5b",
|
|
108
|
+
"fixtures/stacks/dietary-no-signal.invalid.json": "d66cdb5e4800c00e6a44d48c9ea38fd09428d64c8841f039b3cb556a78aa0bea",
|
|
109
|
+
"fixtures/stacks/illustrated-empty.invalid.json": "c1bf28b3d6423140e3c2fc3464cbba704f89050800532bd5c313e15f5e403721",
|
|
110
|
+
"fixtures/stacks/quantified-string.invalid.json": "71b3e2f1c45a53b3e4a26881edbcf218f9e30fce755d7231cd3cb8c7976c0333",
|
|
111
|
+
"fixtures/stacks/referenced-missing-input.invalid.json": "927ac2b01fa221fee22ae516b1a032fa10a2c6b25a1b94a84992fe1e66a0ea36",
|
|
112
|
+
"fixtures/stacks/storage-min.valid.json": "863904466ad1f0da1782da27ccb161395174524fa8a64da7094a84a13c4e8f02",
|
|
113
|
+
"fixtures/stacks/storage-no-duration.invalid.json": "00daac2382abdc4ffdbcd7238d9dad62bab881c6932108d86ec6ad90d32fc9cc",
|
|
114
|
+
"fixtures/stacks/timed-implies-structured.valid.json": "1b585ce97ac896734eb6e42429edab40cb3a5a11fd06e4716476ed6e321a1a4a",
|
|
115
|
+
"fixtures/stacks/timed-range.invalid.json": "f21c3d73da76b9384abaff3b4464e574ece61f10ab1bb7644b366946ee1cc6c4",
|
|
116
|
+
"fixtures/valid/equipment-scaling-rules.valid.json": "c6bf81b3124ca9c1557bec7d21f76ba0e464430d3d2ba972ce990e3be0d2b845",
|
|
117
|
+
"fixtures/valid/equipment-strings.valid.json": "45cbb29e68a3d9654e5ede0df166669d5a00c971ece050ef3a0cfdcadefd003c",
|
|
118
|
+
"fixtures/valid/equipment-structured-uses.valid.json": "7ae0a0a1d68aab3fef78c769229d4948a3f2a62fb892d06727590b8a5f2c14df",
|
|
119
|
+
"fixtures/valid/mise-en-place-basic.valid.json": "b23f29a4857b2f202bb911f0545eeb3e05fd8d73095dd6c21e9517bbaa2059d5",
|
|
120
|
+
"fixtures/valid/mise-en-place-referenced-equipment.valid.json": "59b20e32609a3e5a3e639d589e7258f8c133140eb60bec5d1926e4848627d3b2",
|
|
121
|
+
"fixtures/valid/prep-ingredient-strings.valid.json": "cc4e19de6f31b54039e45019e331d91cf9eb2153cdb7cc88583bf2eeb6ea73a0",
|
|
122
|
+
"fixtures/valid/prep-ingredient-structured.valid.json": "ccd5dd79eeb57432b86d97af4062d217bf902fe575670a12c7d3cbd969cbf6b3",
|
|
123
|
+
"fixtures/valid/profile-equipped.valid.json": "cdc9ae800b103c919c8cbe27c983bd5add15ce86ce11e7eb04955ecfc000f1ce",
|
|
124
|
+
"fixtures/valid/profile-prepped.valid.json": "bda63616dbb41c3544a51d3f5d7a8c4947075e7e36060c3ee3bcc5b2a0180b0a",
|
|
125
|
+
"fixtures/valid/quantified-nested-ingredient-sections.valid.json": "b826e6f2d902884a380e80193adff31bd026008845343257650bcefb789e12d0",
|
|
126
|
+
"fixtures/valid/referenced-scaling.valid.json": "801ecaafe3b18c2ba09ac368d5bd86d39d8073b9ee00247330928470cab807cb",
|
|
127
|
+
"fixtures/valid/storage-leftovers-simple.valid.json": "0e2b8eb149c794ac1d423ea336fdec7b028659a880838336a69ab2cfd26b1336",
|
|
128
|
+
"fixtures/valid/storage-leftovers-structured.valid.json": "9a750cf2b2091c30dd02ea3829cbe45e50257a3119278eea08092a57e2439f5c",
|
|
129
|
+
"fixtures/valid/structured-nested-step-sections.valid.json": "616fbb4e1b27d333838ab341988c83f65f3b6145a8ddab02dff445c491eaf461",
|
|
130
|
+
"schemas/stacks-registry.schema.json": "733b94164edb464418acded685fea365388680e42f42f52cc22b1fbd1767d757",
|
|
131
|
+
"soustack.schema.json": "9f7a2dbcaa37eafcd11e7ef9326d98dd6519593f6d68968e966a8799c326d515",
|
|
132
|
+
"stacks/compute.schema.json": "5b40126ed039b9a75cf42ff6dcef5602f131569cf25071c7fdfc7a4707ee857a",
|
|
133
|
+
"stacks/dietary.schema.json": "b46ddd1bf76eae6024adeb7ad95cf2c743cea00948a9096f1dc927f12b58f638",
|
|
134
|
+
"stacks/equipment.schema.json": "92ab0e4baff8cb8bdf6573fd2cd4e21a85ad9fba6950dea90a9eb4ae2d5d8608",
|
|
135
|
+
"stacks/illustrated.schema.json": "4b1b4260d441ea77fca5aaf014f5548c854e21d9a8f503d965501651ea361692",
|
|
136
|
+
"stacks/prep.schema.json": "1cc274db5d431e0d4e75f2363d410698c135a060533319cae88386407c3d3ac4",
|
|
137
|
+
"stacks/quantified.schema.json": "abf271ff948218dd0eb016c83d482696919eb2141c39531ab0a43b18d4f160d2",
|
|
138
|
+
"stacks/referenced.schema.json": "46b087127fe30bcdd256617efc51289cd59d4c1f97ea2b23ab326ebdbc5fdce3",
|
|
139
|
+
"stacks/registry.json": "7df3b607781143e57272c6847cdd44d9d580cc4b85693807fadaab6e784d38d5",
|
|
140
|
+
"stacks/scaling.schema.json": "781ad1aebdd6c366839abac53c0ed7f9fa37483d8d9a43a80327d3dd87623ba3",
|
|
141
|
+
"stacks/storage.schema.json": "cd4536cfc7ba51f0690d88db184f599dc68d9e6b16d90cba4fcbfe4365882835",
|
|
142
|
+
"stacks/structured.schema.json": "35c0c38647c1e3ccbe1f522c861cc0f72ca0d2675339a1e90cc5e159d121eec2",
|
|
143
|
+
"stacks/substitutions.schema.json": "6a44148c4e4b63732c8db377e148d270c6b3f472b9c3b97e62f8d2149318f888",
|
|
144
|
+
"stacks/techniques.schema.json": "a72da1bfcb91d8422e4ae934fe9be38d2a20b728b9eaa5374b8017c09c70f999",
|
|
145
|
+
"stacks/timed.schema.json": "d3a1b610f9de9f844d859fbfd5ca7c3f7fb9ea30a7b29c4a40bda001e4ab0229"
|
|
146
|
+
},
|
|
147
|
+
"sourceRepo": "https://github.com/RichardHerold/soustack-spec.git",
|
|
148
|
+
"commit": "213717ffc282a322e6040f33441e5c66b21d1701"
|
|
149
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.0.2
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://soustack.spec/defs/common.schema.json",
|
|
4
|
+
"title": "Common definitions for Soustack",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"stackId": {
|
|
8
|
+
"type": "string",
|
|
9
|
+
"anyOf": [
|
|
10
|
+
{
|
|
11
|
+
"enum": [
|
|
12
|
+
"quantified@1",
|
|
13
|
+
"structured@1",
|
|
14
|
+
"timed@1",
|
|
15
|
+
"referenced@1",
|
|
16
|
+
"compute@1",
|
|
17
|
+
"storage@1",
|
|
18
|
+
"dietary@1",
|
|
19
|
+
"substitutions@1",
|
|
20
|
+
"techniques@1",
|
|
21
|
+
"illustrated@1",
|
|
22
|
+
"scaling@1",
|
|
23
|
+
"nutrition@1"
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"pattern": "^x-[A-Za-z0-9_-]+@[0-9]+$",
|
|
28
|
+
"description": "Extension stacks must use x- prefix and include a major version"
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
"extensionLane": {
|
|
33
|
+
"type": "string",
|
|
34
|
+
"pattern": "^x-[A-Za-z0-9_-]+$"
|
|
35
|
+
},
|
|
36
|
+
"extensionLaneValue": {
|
|
37
|
+
"description": "Accept any JSON value for extension lanes while keeping the top-level property name constrained.",
|
|
38
|
+
"type": ["object", "array", "string", "number", "boolean", "null"]
|
|
39
|
+
},
|
|
40
|
+
"uri": {
|
|
41
|
+
"type": "string",
|
|
42
|
+
"format": "uri"
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"additionalProperties": false
|
|
46
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://soustack.spec/defs/duration.schema.json",
|
|
4
|
+
"title": "Durations",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"DurationMinutes": {
|
|
8
|
+
"type": "object",
|
|
9
|
+
"properties": {
|
|
10
|
+
"minutes": { "type": "number", "exclusiveMinimum": 0 },
|
|
11
|
+
"metadata": { "type": "object", "additionalProperties": true }
|
|
12
|
+
},
|
|
13
|
+
"required": ["minutes"],
|
|
14
|
+
"additionalProperties": false,
|
|
15
|
+
"patternProperties": {
|
|
16
|
+
"^x-": { "$ref": "./common.schema.json#/properties/extensionLaneValue" }
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"StorageDuration": {
|
|
20
|
+
"type": "object",
|
|
21
|
+
"properties": {
|
|
22
|
+
"iso8601": { "type": "string", "pattern": "^P" },
|
|
23
|
+
"metadata": { "type": "object", "additionalProperties": true }
|
|
24
|
+
},
|
|
25
|
+
"required": ["iso8601"],
|
|
26
|
+
"additionalProperties": false,
|
|
27
|
+
"patternProperties": {
|
|
28
|
+
"^x-": { "$ref": "./common.schema.json#/properties/extensionLaneValue" }
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"additionalProperties": false
|
|
33
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://soustack.spec/defs/entities.schema.json",
|
|
4
|
+
"title": "Soustack entity bases",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"$defs": {
|
|
7
|
+
"IngredientBase": {
|
|
8
|
+
"type": "object",
|
|
9
|
+
"properties": {
|
|
10
|
+
"id": { "type": "string" },
|
|
11
|
+
"name": { "type": "string" },
|
|
12
|
+
"quantity": { "$ref": "./quantity.schema.json" },
|
|
13
|
+
"temperature": { "$ref": "./temperature.schema.json" },
|
|
14
|
+
"notes": { "type": "string" },
|
|
15
|
+
"prep": {
|
|
16
|
+
"oneOf": [
|
|
17
|
+
{ "type": "string", "minLength": 1 },
|
|
18
|
+
{
|
|
19
|
+
"type": "array",
|
|
20
|
+
"minItems": 1,
|
|
21
|
+
"items": {
|
|
22
|
+
"anyOf": [
|
|
23
|
+
{ "type": "string", "minLength": 1 },
|
|
24
|
+
{ "$ref": "../stacks/prep.schema.json#/$defs/prepItem" }
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
"metadata": { "type": "object", "additionalProperties": true },
|
|
31
|
+
"scaling": { "$ref": "./scalingRule.schema.json" }
|
|
32
|
+
},
|
|
33
|
+
"required": ["name"],
|
|
34
|
+
"additionalProperties": false,
|
|
35
|
+
"patternProperties": {
|
|
36
|
+
"^x-": { "$ref": "./common.schema.json#/properties/extensionLaneValue" }
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"StepBase": {
|
|
40
|
+
"type": "object",
|
|
41
|
+
"properties": {
|
|
42
|
+
"id": { "type": "string" },
|
|
43
|
+
"text": { "type": "string" },
|
|
44
|
+
"dependsOn": {
|
|
45
|
+
"type": "array",
|
|
46
|
+
"items": { "type": "string" },
|
|
47
|
+
"uniqueItems": true
|
|
48
|
+
},
|
|
49
|
+
"inputs": {
|
|
50
|
+
"type": "array",
|
|
51
|
+
"items": { "type": "string" },
|
|
52
|
+
"uniqueItems": true
|
|
53
|
+
},
|
|
54
|
+
"techniqueIds": {
|
|
55
|
+
"type": "array",
|
|
56
|
+
"items": { "type": "string" },
|
|
57
|
+
"uniqueItems": true
|
|
58
|
+
},
|
|
59
|
+
"usesEquipment": {
|
|
60
|
+
"type": "array",
|
|
61
|
+
"items": {
|
|
62
|
+
"type": "string",
|
|
63
|
+
"pattern": "^[A-Za-z0-9._-]+$"
|
|
64
|
+
},
|
|
65
|
+
"uniqueItems": true
|
|
66
|
+
},
|
|
67
|
+
"temperature": { "$ref": "./temperature.schema.json" },
|
|
68
|
+
"timing": {
|
|
69
|
+
"type": "object",
|
|
70
|
+
"properties": {
|
|
71
|
+
"activity": { "type": "string", "enum": ["active", "passive"] },
|
|
72
|
+
"duration": {
|
|
73
|
+
"type": "object",
|
|
74
|
+
"oneOf": [
|
|
75
|
+
{ "$ref": "./duration.schema.json#/properties/DurationMinutes" },
|
|
76
|
+
{
|
|
77
|
+
"type": "object",
|
|
78
|
+
"properties": {
|
|
79
|
+
"minMinutes": { "type": "number", "exclusiveMinimum": 0 },
|
|
80
|
+
"maxMinutes": { "type": "number", "exclusiveMinimum": 0 }
|
|
81
|
+
},
|
|
82
|
+
"required": ["minMinutes", "maxMinutes"],
|
|
83
|
+
"additionalProperties": false
|
|
84
|
+
}
|
|
85
|
+
]
|
|
86
|
+
},
|
|
87
|
+
"completionCue": { "type": "string" },
|
|
88
|
+
"metadata": { "type": "object", "additionalProperties": true }
|
|
89
|
+
},
|
|
90
|
+
"anyOf": [
|
|
91
|
+
{ "required": ["duration"] },
|
|
92
|
+
{ "required": ["completionCue"] }
|
|
93
|
+
],
|
|
94
|
+
"additionalProperties": false,
|
|
95
|
+
"patternProperties": {
|
|
96
|
+
"^x-": { "$ref": "./common.schema.json#/properties/extensionLaneValue" }
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
"images": { "type": "array", "items": { "$ref": "./common.schema.json#/properties/uri" } },
|
|
100
|
+
"videos": { "type": "array", "items": { "$ref": "./common.schema.json#/properties/uri" } },
|
|
101
|
+
"metadata": { "type": "object", "additionalProperties": true }
|
|
102
|
+
},
|
|
103
|
+
"required": ["text"],
|
|
104
|
+
"additionalProperties": false,
|
|
105
|
+
"patternProperties": {
|
|
106
|
+
"^x-": { "$ref": "./common.schema.json#/properties/extensionLaneValue" }
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
"additionalProperties": false
|
|
111
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://soustack.spec/defs/ingredientQuantified.schema.json",
|
|
4
|
+
"title": "Quantified Ingredient",
|
|
5
|
+
"allOf": [
|
|
6
|
+
{ "$ref": "./entities.schema.json#/$defs/IngredientBase" },
|
|
7
|
+
{ "required": ["id", "quantity"] }
|
|
8
|
+
]
|
|
9
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://soustack.spec/defs/quantity.schema.json",
|
|
4
|
+
"title": "Quantity",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"amount": { "type": "number" },
|
|
8
|
+
"unit": { "type": "string", "minLength": 1 },
|
|
9
|
+
"metadata": { "type": "object", "additionalProperties": true }
|
|
10
|
+
},
|
|
11
|
+
"required": ["amount", "unit"],
|
|
12
|
+
"additionalProperties": false,
|
|
13
|
+
"patternProperties": {
|
|
14
|
+
"^x-": { "$ref": "./common.schema.json#/properties/extensionLaneValue" }
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$id": "https://soustack.spec/defs/scalingRule.schema.json",
|
|
3
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
4
|
+
"title": "Soustack ScalingRule",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["mode"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"mode": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"enum": ["linear", "fixed", "discrete", "toTaste", "bakersPercent"]
|
|
12
|
+
},
|
|
13
|
+
|
|
14
|
+
"step": {
|
|
15
|
+
"type": "number",
|
|
16
|
+
"exclusiveMinimum": 0
|
|
17
|
+
},
|
|
18
|
+
"rounding": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"enum": ["nearest", "ceil", "floor"]
|
|
21
|
+
},
|
|
22
|
+
"min": {
|
|
23
|
+
"type": "number"
|
|
24
|
+
},
|
|
25
|
+
"max": {
|
|
26
|
+
"type": "number"
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
"percent": {
|
|
30
|
+
"type": "number",
|
|
31
|
+
"exclusiveMinimum": 0
|
|
32
|
+
},
|
|
33
|
+
"of": {
|
|
34
|
+
"type": "string",
|
|
35
|
+
"minLength": 1
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
"allOf": [
|
|
41
|
+
{
|
|
42
|
+
"if": {
|
|
43
|
+
"properties": { "mode": { "const": "linear" } },
|
|
44
|
+
"required": ["mode"]
|
|
45
|
+
},
|
|
46
|
+
"then": {
|
|
47
|
+
"not": {
|
|
48
|
+
"anyOf": [
|
|
49
|
+
{ "required": ["step"] },
|
|
50
|
+
{ "required": ["rounding"] },
|
|
51
|
+
{ "required": ["min"] },
|
|
52
|
+
{ "required": ["max"] },
|
|
53
|
+
{ "required": ["percent"] },
|
|
54
|
+
{ "required": ["of"] }
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"if": {
|
|
61
|
+
"properties": { "mode": { "const": "fixed" } },
|
|
62
|
+
"required": ["mode"]
|
|
63
|
+
},
|
|
64
|
+
"then": {
|
|
65
|
+
"not": {
|
|
66
|
+
"anyOf": [
|
|
67
|
+
{ "required": ["step"] },
|
|
68
|
+
{ "required": ["rounding"] },
|
|
69
|
+
{ "required": ["min"] },
|
|
70
|
+
{ "required": ["max"] },
|
|
71
|
+
{ "required": ["percent"] },
|
|
72
|
+
{ "required": ["of"] }
|
|
73
|
+
]
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"if": {
|
|
79
|
+
"properties": { "mode": { "const": "toTaste" } },
|
|
80
|
+
"required": ["mode"]
|
|
81
|
+
},
|
|
82
|
+
"then": {
|
|
83
|
+
"not": {
|
|
84
|
+
"anyOf": [
|
|
85
|
+
{ "required": ["step"] },
|
|
86
|
+
{ "required": ["rounding"] },
|
|
87
|
+
{ "required": ["min"] },
|
|
88
|
+
{ "required": ["max"] },
|
|
89
|
+
{ "required": ["percent"] },
|
|
90
|
+
{ "required": ["of"] }
|
|
91
|
+
]
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"if": {
|
|
97
|
+
"properties": { "mode": { "const": "discrete" } },
|
|
98
|
+
"required": ["mode"]
|
|
99
|
+
},
|
|
100
|
+
"then": {
|
|
101
|
+
"not": {
|
|
102
|
+
"anyOf": [
|
|
103
|
+
{ "required": ["percent"] },
|
|
104
|
+
{ "required": ["of"] }
|
|
105
|
+
]
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"if": {
|
|
111
|
+
"properties": { "mode": { "const": "bakersPercent" } },
|
|
112
|
+
"required": ["mode"]
|
|
113
|
+
},
|
|
114
|
+
"then": {
|
|
115
|
+
"required": ["percent", "of"],
|
|
116
|
+
"not": {
|
|
117
|
+
"anyOf": [
|
|
118
|
+
{ "required": ["step"] },
|
|
119
|
+
{ "required": ["rounding"] },
|
|
120
|
+
{ "required": ["min"] },
|
|
121
|
+
{ "required": ["max"] }
|
|
122
|
+
]
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
]
|
|
127
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://soustack.spec/defs/temperature.schema.json",
|
|
4
|
+
"title": "Temperature",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"oneOf": [
|
|
7
|
+
{
|
|
8
|
+
"type": "object",
|
|
9
|
+
"properties": {
|
|
10
|
+
"target": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"enum": ["oven", "stovetop", "pan", "oil", "water", "grill", "broiler", "internal", "ambient", "surface"]
|
|
13
|
+
},
|
|
14
|
+
"level": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"enum": ["veryLow", "low", "medium", "mediumHigh", "high", "veryHigh"]
|
|
17
|
+
},
|
|
18
|
+
"metadata": { "type": "object", "additionalProperties": true }
|
|
19
|
+
},
|
|
20
|
+
"required": ["target", "level"],
|
|
21
|
+
"additionalProperties": false,
|
|
22
|
+
"patternProperties": {
|
|
23
|
+
"^x-": { "$ref": "./common.schema.json#/properties/extensionLaneValue" }
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"type": "object",
|
|
28
|
+
"properties": {
|
|
29
|
+
"target": {
|
|
30
|
+
"type": "string",
|
|
31
|
+
"enum": ["oven", "stovetop", "pan", "oil", "water", "grill", "broiler", "internal", "ambient", "surface"]
|
|
32
|
+
},
|
|
33
|
+
"unit": { "type": "string", "enum": ["celsius", "fahrenheit"] },
|
|
34
|
+
"value": { "type": "number" },
|
|
35
|
+
"approximate": { "type": "boolean" },
|
|
36
|
+
"metadata": { "type": "object", "additionalProperties": true }
|
|
37
|
+
},
|
|
38
|
+
"required": ["target", "unit", "value"],
|
|
39
|
+
"additionalProperties": false,
|
|
40
|
+
"patternProperties": {
|
|
41
|
+
"^x-": { "$ref": "./common.schema.json#/properties/extensionLaneValue" }
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"type": "object",
|
|
46
|
+
"properties": {
|
|
47
|
+
"target": {
|
|
48
|
+
"type": "string",
|
|
49
|
+
"enum": ["oven", "stovetop", "pan", "oil", "water", "grill", "broiler", "internal", "ambient", "surface"]
|
|
50
|
+
},
|
|
51
|
+
"unit": { "type": "string", "enum": ["celsius", "fahrenheit"] },
|
|
52
|
+
"minValue": { "type": "number" },
|
|
53
|
+
"maxValue": { "type": "number" },
|
|
54
|
+
"metadata": { "type": "object", "additionalProperties": true }
|
|
55
|
+
},
|
|
56
|
+
"required": ["target", "unit", "minValue", "maxValue"],
|
|
57
|
+
"additionalProperties": false,
|
|
58
|
+
"patternProperties": {
|
|
59
|
+
"^x-": { "$ref": "./common.schema.json#/properties/extensionLaneValue" }
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
]
|
|
63
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://soustack.spec/soustack.schema.json",
|
|
3
|
+
"stacks": {
|
|
4
|
+
"structured": 1,
|
|
5
|
+
"illustrated": 1
|
|
6
|
+
},
|
|
7
|
+
"name": "Picture Smoothie",
|
|
8
|
+
"ingredients": [
|
|
9
|
+
"fruit",
|
|
10
|
+
"yogurt"
|
|
11
|
+
],
|
|
12
|
+
"instructions": [
|
|
13
|
+
{
|
|
14
|
+
"id": "s1",
|
|
15
|
+
"text": "blend",
|
|
16
|
+
"images": [
|
|
17
|
+
"http://example.com/blend.jpg"
|
|
18
|
+
]
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"images": [
|
|
22
|
+
"http://example.com/cover2.jpg"
|
|
23
|
+
]
|
|
24
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://soustack.spec/soustack.schema.json",
|
|
3
|
+
"stacks": {
|
|
4
|
+
"equipment": 1,
|
|
5
|
+
"structured": 1
|
|
6
|
+
},
|
|
7
|
+
"name": "Recipe with Invalid Equipment Reference",
|
|
8
|
+
"yield": {
|
|
9
|
+
"amount": 1,
|
|
10
|
+
"unit": "serving"
|
|
11
|
+
},
|
|
12
|
+
"time": {
|
|
13
|
+
"total": {
|
|
14
|
+
"minutes": 30
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"equipment": [
|
|
18
|
+
{
|
|
19
|
+
"id": "skillet",
|
|
20
|
+
"name": "8-inch skillet"
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"ingredients": [
|
|
24
|
+
{
|
|
25
|
+
"id": "meat",
|
|
26
|
+
"name": "Meat"
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"instructions": [
|
|
30
|
+
{
|
|
31
|
+
"id": "sear",
|
|
32
|
+
"text": "Sear the meat",
|
|
33
|
+
"usesEquipment": [
|
|
34
|
+
"nonexistent"
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://soustack.spec/soustack.schema.json",
|
|
3
|
+
"stacks": {
|
|
4
|
+
"prep": 1,
|
|
5
|
+
"equipment": 1
|
|
6
|
+
},
|
|
7
|
+
"name": "Recipe with Unknown Equipment Reference",
|
|
8
|
+
"yield": {
|
|
9
|
+
"amount": 1,
|
|
10
|
+
"unit": "serving"
|
|
11
|
+
},
|
|
12
|
+
"time": {
|
|
13
|
+
"total": {
|
|
14
|
+
"minutes": 30
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"equipment": [
|
|
18
|
+
{
|
|
19
|
+
"id": "knife",
|
|
20
|
+
"name": "Chef's knife"
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"ingredients": [
|
|
24
|
+
"onion"
|
|
25
|
+
],
|
|
26
|
+
"instructions": [
|
|
27
|
+
"Cook"
|
|
28
|
+
],
|
|
29
|
+
"miseEnPlace": [
|
|
30
|
+
{
|
|
31
|
+
"text": "Use the missing equipment",
|
|
32
|
+
"usesEquipment": [
|
|
33
|
+
"missing-equipment"
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
]
|
|
37
|
+
}
|