#!/usr/bin/env bash GOROOT=${1:-../go} JSONROOT="." cp $JSONROOT/alias_gen.go $JSONROOT/alias_gen.go.bak cp $JSONROOT/options_format_global.go $JSONROOT/options_format_global.go.bak cp $JSONROOT/options_format_test.go $JSONROOT/options_format_test.go.bak rm -r $JSONROOT/*.go $JSONROOT/internal $JSONROOT/jsontext $JSONROOT/v1 mv $JSONROOT/alias_gen.go.bak $JSONROOT/alias_gen.go cp -r $GOROOT/src/encoding/json/v2/*.go $JSONROOT/ cp -r $GOROOT/src/encoding/json/internal/ $JSONROOT/internal/ cp -r $GOROOT/src/encoding/json/jsontext/ $JSONROOT/jsontext/ mkdir $JSONROOT/v1 for X in $GOROOT/src/encoding/json/v2_*.go; do cp $X $JSONROOT/v1/$(basename $X | sed "s/v2_//") done cd $JSONROOT for X in $(git ls-files --cached --others --exclude-standard | grep ".*[.]go$"); do if [ ! -e "$X" ]; then continue fi sed -i 's/go:build goexperiment.jsonv2 && !goexperiment.jsonformat$/go:build (!goexperiment.jsonv2 || !go1.25) \&\& !goexperiment.jsonformat/' $X sed -i 's/go:build goexperiment.jsonv2 && goexperiment.jsonformat$/go:build (!goexperiment.jsonv2 || !go1.25) \&\& goexperiment.jsonformat/' $X sed -i 's/go:build goexperiment.jsonv2$/go:build !goexperiment.jsonv2 || !go1.25/' $X sed -i 's|"encoding/json/v2"|"github.com/go-json-experiment/json"|' $X sed -i 's|"encoding/json/internal"|"github.com/go-json-experiment/json/internal"|' $X sed -i 's|"encoding/json/internal/jsonflags"|"github.com/go-json-experiment/json/internal/jsonflags"|' $X sed -i 's|"encoding/json/internal/jsonopts"|"github.com/go-json-experiment/json/internal/jsonopts"|' $X sed -i 's|"encoding/json/internal/jsontest"|"github.com/go-json-experiment/json/internal/jsontest"|' $X sed -i 's|"encoding/json/internal/jsonwire"|"github.com/go-json-experiment/json/internal/jsonwire"|' $X sed -i 's|"encoding/json/jsontext"|"github.com/go-json-experiment/json/jsontext"|' $X sed -i 's|"encoding/json"|"github.com/go-json-experiment/json/v1"|' $X sed -i 's|"internal/zstd"|"github.com/go-json-experiment/json/internal/zstd"|' $X goimports -w $X done sed -i 's/v2[.]struct/json.struct/' $JSONROOT/errors_test.go sed -i 's|jsonv1 "github.com/go-json-experiment/json/v1"|jsonv1 "encoding/json"|' $JSONROOT/bench_test.go sed -i '/testenv/d' $JSONROOT/jsontext/token_test.go # Remove documentation that only makes sense within the stdlib. sed -i '/This package .* is experimental/,+4d' $JSONROOT/doc.go sed -i '/This package .* is experimental/,+4d' $JSONROOT/jsontext/doc.go git checkout internal/zstd # we still need local copy of zstd for testing go run alias_gen.go "encoding/json" $JSONROOT/v1 go run alias_gen.go "encoding/json/v2" $JSONROOT go run alias_gen.go "encoding/json/jsontext" $JSONROOT/jsontext mv $JSONROOT/options_format_global.go.bak $JSONROOT/options_format_global.go mv $JSONROOT/options_format_test.go.bak $JSONROOT/options_format_test.go cp $GOROOT/src/encoding/json/internal/jsonopts/options_format.go $JSONROOT/options_format.go sed -i '/go:build goexperiment.jsonv2/d' $JSONROOT/options_format.go sed -i 's/package jsonopts/package json/' $JSONROOT/options_format.go goimports -w $JSONROOT/options_format.go sed -i -E '/^func (Marshal|MarshalWrite|MarshalEncode|Unmarshal|UnmarshalRead|UnmarshalDecode)\(/a opts = mayAppendSupportFormatTag(opts)' $JSONROOT/alias.go sed -i -E '/^func (Marshal|MarshalWrite|MarshalEncode|Unmarshal|UnmarshalRead|UnmarshalDecode)\(/a opts = mayAppendSupportFormatTag(opts)' $JSONROOT/arshal.go goimports -w $JSONROOT/alias.go goimports -w $JSONROOT/arshal.go