Skip to content

Commit 7a42ca1

Browse files
authored
Fail upon encountering unrecognized fields when parsing config structures (#697)
* Fail upon encountering unrecognized fields when parsing config structures * Roll back record and spago.yaml changes * Regenerate lockfile
1 parent 087f497 commit 7a42ca1

File tree

5 files changed

+41
-42
lines changed

5 files changed

+41
-42
lines changed

lib/src/Manifest.purs

+12-12
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import Data.Array as Array
2222
import Data.Array.NonEmpty (NonEmptyArray)
2323
import Data.Codec.JSON as CJ
2424
import Data.Codec.JSON.Common as CJ.Common
25+
import Data.Codec.JSON.Strict as CJS
2526
import Data.Map (Map)
2627
import Data.Maybe (Maybe)
2728
import Data.Newtype (class Newtype)
@@ -40,7 +41,6 @@ import Registry.Range (Range)
4041
import Registry.Range as Range
4142
import Registry.Version (Version)
4243
import Registry.Version as Version
43-
import Type.Proxy (Proxy(..))
4444

4545
-- | The manifest for a package version, which records critical information for
4646
-- | the registry, pursuit, and package managers to use.
@@ -72,14 +72,14 @@ instance Ord Manifest where
7272
-- | JSON object. The implementation uses explicitly ordered keys instead of
7373
-- | record sugar.
7474
codec :: CJ.Codec Manifest
75-
codec = Profunctor.wrapIso Manifest $ CJ.named "Manifest" $ CJ.object
76-
$ CJ.recordProp (Proxy :: _ "name") PackageName.codec
77-
$ CJ.recordProp (Proxy :: _ "version") Version.codec
78-
$ CJ.recordProp (Proxy :: _ "license") License.codec
79-
$ CJ.recordPropOptional (Proxy :: _ "description") (Internal.Codec.limitedString 300)
80-
$ CJ.recordProp (Proxy :: _ "location") Location.codec
81-
$ CJ.recordPropOptional (Proxy :: _ "owners") (CJ.Common.nonEmptyArray Owner.codec)
82-
$ CJ.recordPropOptional (Proxy :: _ "includeFiles") (CJ.Common.nonEmptyArray CJ.Common.nonEmptyString)
83-
$ CJ.recordPropOptional (Proxy :: _ "excludeFiles") (CJ.Common.nonEmptyArray CJ.Common.nonEmptyString)
84-
$ CJ.recordProp (Proxy :: _ "dependencies") (Internal.Codec.packageMap Range.codec)
85-
$ CJ.record
75+
codec = Profunctor.wrapIso Manifest $ CJ.named "Manifest" $ CJS.objectStrict
76+
$ CJS.recordProp @"name" PackageName.codec
77+
$ CJS.recordProp @"version" Version.codec
78+
$ CJS.recordProp @"license" License.codec
79+
$ CJS.recordPropOptional @"description" (Internal.Codec.limitedString 300)
80+
$ CJS.recordProp @"location" Location.codec
81+
$ CJS.recordPropOptional @"owners" (CJ.Common.nonEmptyArray Owner.codec)
82+
$ CJS.recordPropOptional @"includeFiles" (CJ.Common.nonEmptyArray CJ.Common.nonEmptyString)
83+
$ CJS.recordPropOptional @"excludeFiles" (CJ.Common.nonEmptyArray CJ.Common.nonEmptyString)
84+
$ CJS.recordProp @"dependencies" (Internal.Codec.packageMap Range.codec)
85+
$ CJS.record

lib/src/Metadata.purs

+7-7
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import Data.Array.NonEmpty (NonEmptyArray)
2424
import Data.Codec.JSON as CJ
2525
import Data.Codec.JSON.Common as CJ.Common
2626
import Data.Codec.JSON.Record as CJ.Record
27+
import Data.Codec.JSON.Strict as CJS
2728
import Data.DateTime (DateTime)
2829
import Data.Map (Map)
2930
import Data.Maybe (Maybe)
@@ -37,7 +38,6 @@ import Registry.Owner as Owner
3738
import Registry.Sha256 (Sha256)
3839
import Registry.Sha256 as Sha256
3940
import Registry.Version (Version)
40-
import Type.Proxy (Proxy(..))
4141

4242
-- | A record of all published and unpublished versions of a package, along with
4343
-- | the last-used location and any owners (public keys) authorized to take
@@ -55,12 +55,12 @@ derive instance Eq Metadata
5555
-- | A codec for encoding and decoding a `Metadata` value as JSON. Represented
5656
-- | as a JSON object. Keys are explicitly ordered.
5757
codec :: CJ.Codec Metadata
58-
codec = Profunctor.wrapIso Metadata $ CJ.named "Metadata" $ CJ.object
59-
$ CJ.recordProp (Proxy :: _ "location") Location.codec
60-
$ CJ.recordPropOptional (Proxy :: _ "owners") (CJ.Common.nonEmptyArray Owner.codec)
61-
$ CJ.recordProp (Proxy :: _ "published") (Internal.Codec.versionMap publishedMetadataCodec)
62-
$ CJ.recordProp (Proxy :: _ "unpublished") (Internal.Codec.versionMap unpublishedMetadataCodec)
63-
$ CJ.record
58+
codec = Profunctor.wrapIso Metadata $ CJ.named "Metadata" $ CJS.objectStrict
59+
$ CJS.recordProp @"location" Location.codec
60+
$ CJS.recordPropOptional @"owners" (CJ.Common.nonEmptyArray Owner.codec)
61+
$ CJS.recordProp @"published" (Internal.Codec.versionMap publishedMetadataCodec)
62+
$ CJS.recordProp @"unpublished" (Internal.Codec.versionMap unpublishedMetadataCodec)
63+
$ CJS.record
6464

6565
-- | Metadata about a published package version.
6666
-- |

lib/src/PackageSet.purs

+7-7
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ module Registry.PackageSet
1515
import Prelude
1616

1717
import Data.Codec.JSON as CJ
18+
import Data.Codec.JSON.Strict as CJS
1819
import Data.DateTime (Date)
1920
import Data.Map (Map)
2021
import Data.Newtype (class Newtype)
@@ -23,7 +24,6 @@ import Registry.Internal.Codec as Internal.Codec
2324
import Registry.PackageName (PackageName)
2425
import Registry.Version (Version)
2526
import Registry.Version as Version
26-
import Type.Proxy (Proxy(..))
2727

2828
-- | A Registry package set, which contains a set of packages at specific
2929
-- | versions known to compile together with the given compiler version.
@@ -41,9 +41,9 @@ derive newtype instance Eq PackageSet
4141
-- | JSON object. We use an explicit ordering instead of record sugar in the
4242
-- | implementation.
4343
codec :: CJ.Codec PackageSet
44-
codec = Profunctor.wrapIso PackageSet $ CJ.named "PackageSet" $ CJ.object
45-
$ CJ.recordProp (Proxy :: _ "version") Version.codec
46-
$ CJ.recordProp (Proxy :: _ "compiler") Version.codec
47-
$ CJ.recordProp (Proxy :: _ "published") Internal.Codec.iso8601Date
48-
$ CJ.recordProp (Proxy :: _ "packages") (Internal.Codec.packageMap Version.codec)
49-
$ CJ.record
44+
codec = Profunctor.wrapIso PackageSet $ CJ.named "PackageSet" $ CJS.objectStrict
45+
$ CJS.recordProp @"version" Version.codec
46+
$ CJS.recordProp @"compiler" Version.codec
47+
$ CJS.recordProp @"published" Internal.Codec.iso8601Date
48+
$ CJS.recordProp @"packages" (Internal.Codec.packageMap Version.codec)
49+
$ CJS.record

spago.lock

+14-14
Original file line numberDiff line numberDiff line change
@@ -201,9 +201,8 @@ workspace:
201201
- variant
202202
test_dependencies: []
203203
package_set:
204-
registry: 50.10.0
204+
registry: 59.0.0
205205
extra_packages:
206-
codec-json: 1.2.0
207206
dodo-printer:
208207
repo: https://github.com/natefaubion/purescript-dodo-printer.git
209208
version: v2.2.1
@@ -407,8 +406,8 @@ packages:
407406
- profunctor
408407
codec-json:
409408
type: registry
410-
version: 1.2.0
411-
integrity: sha256-59+uYYe/5uTFa/Q6EqF8ekvP/Y4SOjUNfwIqIYtNiGI=
409+
version: 2.0.0
410+
integrity: sha256-NLm5BmDZKKexQwtnoZ/NI4yI16srsqIe0M7NdlqB96U=
412411
dependencies:
413412
- codec
414413
- foreign-object
@@ -594,8 +593,8 @@ packages:
594593
- unfoldable
595594
exceptions:
596595
type: registry
597-
version: 6.0.0
598-
integrity: sha256-y/xTAEIZIARCE+50/u1di0ncebJ+CIwNOLswyOWzMTw=
596+
version: 6.1.0
597+
integrity: sha256-K0T89IHtF3vBY7eSAO7eDOqSb2J9kZGAcDN5+IKsF8E=
599598
dependencies:
600599
- effect
601600
- either
@@ -940,8 +939,8 @@ packages:
940939
- maybe
941940
json:
942941
type: registry
943-
version: 1.0.0
944-
integrity: sha256-UCHdePAoOD19UyCPLU97oZjcdxLlQZQneWFsfoUNNpE=
942+
version: 1.1.0
943+
integrity: sha256-LuN8PyX/gvRR4/7X7M9P+zL7BKbv34NcUE/7MILXQSA=
945944
dependencies:
946945
- either
947946
- foldable-traversable
@@ -1159,8 +1158,8 @@ packages:
11591158
- unsafe-reference
11601159
node-fs:
11611160
type: registry
1162-
version: 9.1.0
1163-
integrity: sha256-TzhvGdrwcM0bazDvrWSqh+M/H8GKYf1Na6aGm2Qg4+c=
1161+
version: 9.2.0
1162+
integrity: sha256-Sg0vkXycEzkEerX6hLccz21Ygd9w1+QSk1thotRZPGI=
11641163
dependencies:
11651164
- datetime
11661165
- effect
@@ -1619,8 +1618,8 @@ packages:
16191618
- unsafe-coerce
16201619
spec:
16211620
type: registry
1622-
version: 7.6.0
1623-
integrity: sha256-+merGdQbL9zWONbnt8S8J9afGJ59MQqGtS0qSd3yu4I=
1621+
version: 8.0.0
1622+
integrity: sha256-Yn7MhDai1YULlQF45+9FTOTf2rcjoda1Jf2IrEFCoeg=
16241623
dependencies:
16251624
- aff
16261625
- ansi
@@ -1705,8 +1704,8 @@ packages:
17051704
- tuples
17061705
transformers:
17071706
type: registry
1708-
version: 6.0.0
1709-
integrity: sha256-Pzw40HjthX77tdPAYzjx43LK3X5Bb7ZspYAp27wksFA=
1707+
version: 6.1.0
1708+
integrity: sha256-3Bm+Z6tsC/paG888XkywDngJ2JMos+JfOhRlkVfb7gI=
17101709
dependencies:
17111710
- control
17121711
- distributive
@@ -1719,6 +1718,7 @@ packages:
17191718
- maybe
17201719
- newtype
17211720
- prelude
1721+
- st
17221722
- tailrec
17231723
- tuples
17241724
- unfoldable

spago.yaml

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
workspace:
22
lock: true
33
package_set:
4-
registry: 50.10.0
4+
registry: 59.0.0
55
extra_packages:
6-
codec-json: 1.2.0
76
dodo-printer:
87
repo: https://github.com/natefaubion/purescript-dodo-printer.git
98
version: v2.2.1

0 commit comments

Comments
 (0)