mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	Update cel-go to v0.21.0
This commit is contained in:
		
							
								
								
									
										2
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.mod
									
									
									
									
									
								
							@@ -35,7 +35,7 @@ require (
 | 
			
		||||
	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da
 | 
			
		||||
	github.com/golang/protobuf v1.5.4
 | 
			
		||||
	github.com/google/cadvisor v0.50.0
 | 
			
		||||
	github.com/google/cel-go v0.20.1
 | 
			
		||||
	github.com/google/cel-go v0.21.0
 | 
			
		||||
	github.com/google/gnostic-models v0.6.8
 | 
			
		||||
	github.com/google/go-cmp v0.6.0
 | 
			
		||||
	github.com/google/gofuzz v1.2.0
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								go.sum
									
									
									
									
									
								
							@@ -335,8 +335,8 @@ github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=
 | 
			
		||||
github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
 | 
			
		||||
github.com/google/cadvisor v0.50.0 h1:7w/hKIbJKBWqQsRTy+Hpj2vj+fnxrLXcEXFy+LW0Bsg=
 | 
			
		||||
github.com/google/cadvisor v0.50.0/go.mod h1:VxCDwZalpFyENvmfabFqaIGsqNKLtDzE62a19rfVTB8=
 | 
			
		||||
github.com/google/cel-go v0.20.1 h1:nDx9r8S3L4pE61eDdt8igGj8rf5kjYR3ILxWIpWNi84=
 | 
			
		||||
github.com/google/cel-go v0.20.1/go.mod h1:kWcIzTsPX0zmQ+H3TirHstLLf9ep5QTsZBN9u4dOYLg=
 | 
			
		||||
github.com/google/cel-go v0.21.0 h1:cl6uW/gxN+Hy50tNYvI691+sXxioCnstFzLp2WO4GCI=
 | 
			
		||||
github.com/google/cel-go v0.21.0/go.mod h1:rHUlWCcBKgyEk+eV03RPdZUekPp6YcJwV0FxuUksYxc=
 | 
			
		||||
github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
 | 
			
		||||
github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
 | 
			
		||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ godebug default=go1.23
 | 
			
		||||
require (
 | 
			
		||||
	github.com/emicklei/go-restful/v3 v3.11.0
 | 
			
		||||
	github.com/gogo/protobuf v1.3.2
 | 
			
		||||
	github.com/google/cel-go v0.20.1
 | 
			
		||||
	github.com/google/cel-go v0.21.0
 | 
			
		||||
	github.com/google/gnostic-models v0.6.8
 | 
			
		||||
	github.com/google/go-cmp v0.6.0
 | 
			
		||||
	github.com/google/gofuzz v1.2.0
 | 
			
		||||
 
 | 
			
		||||
@@ -214,8 +214,8 @@ github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek
 | 
			
		||||
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 | 
			
		||||
github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=
 | 
			
		||||
github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
 | 
			
		||||
github.com/google/cel-go v0.20.1 h1:nDx9r8S3L4pE61eDdt8igGj8rf5kjYR3ILxWIpWNi84=
 | 
			
		||||
github.com/google/cel-go v0.20.1/go.mod h1:kWcIzTsPX0zmQ+H3TirHstLLf9ep5QTsZBN9u4dOYLg=
 | 
			
		||||
github.com/google/cel-go v0.21.0 h1:cl6uW/gxN+Hy50tNYvI691+sXxioCnstFzLp2WO4GCI=
 | 
			
		||||
github.com/google/cel-go v0.21.0/go.mod h1:rHUlWCcBKgyEk+eV03RPdZUekPp6YcJwV0FxuUksYxc=
 | 
			
		||||
github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
 | 
			
		||||
github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
 | 
			
		||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ require (
 | 
			
		||||
	github.com/fsnotify/fsnotify v1.7.0
 | 
			
		||||
	github.com/go-logr/logr v1.4.2
 | 
			
		||||
	github.com/gogo/protobuf v1.3.2
 | 
			
		||||
	github.com/google/cel-go v0.20.1
 | 
			
		||||
	github.com/google/cel-go v0.21.0
 | 
			
		||||
	github.com/google/gnostic-models v0.6.8
 | 
			
		||||
	github.com/google/go-cmp v0.6.0
 | 
			
		||||
	github.com/google/gofuzz v1.2.0
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/apiserver/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/apiserver/go.sum
									
									
									
										generated
									
									
									
								
							@@ -215,8 +215,8 @@ github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek
 | 
			
		||||
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 | 
			
		||||
github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=
 | 
			
		||||
github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
 | 
			
		||||
github.com/google/cel-go v0.20.1 h1:nDx9r8S3L4pE61eDdt8igGj8rf5kjYR3ILxWIpWNi84=
 | 
			
		||||
github.com/google/cel-go v0.20.1/go.mod h1:kWcIzTsPX0zmQ+H3TirHstLLf9ep5QTsZBN9u4dOYLg=
 | 
			
		||||
github.com/google/cel-go v0.21.0 h1:cl6uW/gxN+Hy50tNYvI691+sXxioCnstFzLp2WO4GCI=
 | 
			
		||||
github.com/google/cel-go v0.21.0/go.mod h1:rHUlWCcBKgyEk+eV03RPdZUekPp6YcJwV0FxuUksYxc=
 | 
			
		||||
github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
 | 
			
		||||
github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
 | 
			
		||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
 | 
			
		||||
 
 | 
			
		||||
@@ -47,7 +47,7 @@ require (
 | 
			
		||||
	github.com/gogo/protobuf v1.3.2 // indirect
 | 
			
		||||
	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
 | 
			
		||||
	github.com/golang/protobuf v1.5.4 // indirect
 | 
			
		||||
	github.com/google/cel-go v0.20.1 // indirect
 | 
			
		||||
	github.com/google/cel-go v0.21.0 // indirect
 | 
			
		||||
	github.com/google/gnostic-models v0.6.8 // indirect
 | 
			
		||||
	github.com/google/gofuzz v1.2.0 // indirect
 | 
			
		||||
	github.com/google/uuid v1.6.0 // indirect
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/cloud-provider/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/cloud-provider/go.sum
									
									
									
										generated
									
									
									
								
							@@ -78,8 +78,8 @@ github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek
 | 
			
		||||
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 | 
			
		||||
github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=
 | 
			
		||||
github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
 | 
			
		||||
github.com/google/cel-go v0.20.1 h1:nDx9r8S3L4pE61eDdt8igGj8rf5kjYR3ILxWIpWNi84=
 | 
			
		||||
github.com/google/cel-go v0.20.1/go.mod h1:kWcIzTsPX0zmQ+H3TirHstLLf9ep5QTsZBN9u4dOYLg=
 | 
			
		||||
github.com/google/cel-go v0.21.0 h1:cl6uW/gxN+Hy50tNYvI691+sXxioCnstFzLp2WO4GCI=
 | 
			
		||||
github.com/google/cel-go v0.21.0/go.mod h1:rHUlWCcBKgyEk+eV03RPdZUekPp6YcJwV0FxuUksYxc=
 | 
			
		||||
github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
 | 
			
		||||
github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
 | 
			
		||||
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ require (
 | 
			
		||||
	github.com/gogo/protobuf v1.3.2 // indirect
 | 
			
		||||
	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
 | 
			
		||||
	github.com/golang/protobuf v1.5.4 // indirect
 | 
			
		||||
	github.com/google/cel-go v0.20.1 // indirect
 | 
			
		||||
	github.com/google/cel-go v0.21.0 // indirect
 | 
			
		||||
	github.com/google/gnostic-models v0.6.8 // indirect
 | 
			
		||||
	github.com/google/go-cmp v0.6.0 // indirect
 | 
			
		||||
	github.com/google/gofuzz v1.2.0 // indirect
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/controller-manager/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/controller-manager/go.sum
									
									
									
										generated
									
									
									
								
							@@ -75,8 +75,8 @@ github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek
 | 
			
		||||
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 | 
			
		||||
github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=
 | 
			
		||||
github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
 | 
			
		||||
github.com/google/cel-go v0.20.1 h1:nDx9r8S3L4pE61eDdt8igGj8rf5kjYR3ILxWIpWNi84=
 | 
			
		||||
github.com/google/cel-go v0.20.1/go.mod h1:kWcIzTsPX0zmQ+H3TirHstLLf9ep5QTsZBN9u4dOYLg=
 | 
			
		||||
github.com/google/cel-go v0.21.0 h1:cl6uW/gxN+Hy50tNYvI691+sXxioCnstFzLp2WO4GCI=
 | 
			
		||||
github.com/google/cel-go v0.21.0/go.mod h1:rHUlWCcBKgyEk+eV03RPdZUekPp6YcJwV0FxuUksYxc=
 | 
			
		||||
github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
 | 
			
		||||
github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
 | 
			
		||||
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ godebug default=go1.23
 | 
			
		||||
require (
 | 
			
		||||
	github.com/blang/semver/v4 v4.0.0
 | 
			
		||||
	github.com/go-logr/logr v1.4.2
 | 
			
		||||
	github.com/google/cel-go v0.20.1
 | 
			
		||||
	github.com/google/cel-go v0.21.0
 | 
			
		||||
	github.com/google/go-cmp v0.6.0
 | 
			
		||||
	github.com/onsi/gomega v1.33.1
 | 
			
		||||
	github.com/stretchr/testify v1.9.0
 | 
			
		||||
 
 | 
			
		||||
@@ -61,8 +61,8 @@ github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4er
 | 
			
		||||
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
 | 
			
		||||
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 | 
			
		||||
github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
 | 
			
		||||
github.com/google/cel-go v0.20.1 h1:nDx9r8S3L4pE61eDdt8igGj8rf5kjYR3ILxWIpWNi84=
 | 
			
		||||
github.com/google/cel-go v0.20.1/go.mod h1:kWcIzTsPX0zmQ+H3TirHstLLf9ep5QTsZBN9u4dOYLg=
 | 
			
		||||
github.com/google/cel-go v0.21.0 h1:cl6uW/gxN+Hy50tNYvI691+sXxioCnstFzLp2WO4GCI=
 | 
			
		||||
github.com/google/cel-go v0.21.0/go.mod h1:rHUlWCcBKgyEk+eV03RPdZUekPp6YcJwV0FxuUksYxc=
 | 
			
		||||
github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
 | 
			
		||||
github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
 | 
			
		||||
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 | 
			
		||||
 
 | 
			
		||||
@@ -51,7 +51,7 @@ require (
 | 
			
		||||
	github.com/go-openapi/swag v0.23.0 // indirect
 | 
			
		||||
	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
 | 
			
		||||
	github.com/golang/protobuf v1.5.4 // indirect
 | 
			
		||||
	github.com/google/cel-go v0.20.1 // indirect
 | 
			
		||||
	github.com/google/cel-go v0.21.0 // indirect
 | 
			
		||||
	github.com/google/gnostic-models v0.6.8 // indirect
 | 
			
		||||
	github.com/google/uuid v1.6.0 // indirect
 | 
			
		||||
	github.com/gorilla/websocket v1.5.0 // indirect
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/kube-aggregator/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/kube-aggregator/go.sum
									
									
									
										generated
									
									
									
								
							@@ -76,8 +76,8 @@ github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek
 | 
			
		||||
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 | 
			
		||||
github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=
 | 
			
		||||
github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
 | 
			
		||||
github.com/google/cel-go v0.20.1 h1:nDx9r8S3L4pE61eDdt8igGj8rf5kjYR3ILxWIpWNi84=
 | 
			
		||||
github.com/google/cel-go v0.20.1/go.mod h1:kWcIzTsPX0zmQ+H3TirHstLLf9ep5QTsZBN9u4dOYLg=
 | 
			
		||||
github.com/google/cel-go v0.21.0 h1:cl6uW/gxN+Hy50tNYvI691+sXxioCnstFzLp2WO4GCI=
 | 
			
		||||
github.com/google/cel-go v0.21.0/go.mod h1:rHUlWCcBKgyEk+eV03RPdZUekPp6YcJwV0FxuUksYxc=
 | 
			
		||||
github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
 | 
			
		||||
github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
 | 
			
		||||
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 | 
			
		||||
 
 | 
			
		||||
@@ -31,7 +31,7 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
 | 
			
		||||
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
 | 
			
		||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 | 
			
		||||
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 | 
			
		||||
github.com/google/cel-go v0.20.1/go.mod h1:kWcIzTsPX0zmQ+H3TirHstLLf9ep5QTsZBN9u4dOYLg=
 | 
			
		||||
github.com/google/cel-go v0.21.0/go.mod h1:rHUlWCcBKgyEk+eV03RPdZUekPp6YcJwV0FxuUksYxc=
 | 
			
		||||
github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
 | 
			
		||||
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 | 
			
		||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								staging/src/k8s.io/kubelet/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								staging/src/k8s.io/kubelet/go.sum
									
									
									
										generated
									
									
									
								
							@@ -57,7 +57,7 @@ github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4er
 | 
			
		||||
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
 | 
			
		||||
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 | 
			
		||||
github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
 | 
			
		||||
github.com/google/cel-go v0.20.1/go.mod h1:kWcIzTsPX0zmQ+H3TirHstLLf9ep5QTsZBN9u4dOYLg=
 | 
			
		||||
github.com/google/cel-go v0.21.0/go.mod h1:rHUlWCcBKgyEk+eV03RPdZUekPp6YcJwV0FxuUksYxc=
 | 
			
		||||
github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
 | 
			
		||||
github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
 | 
			
		||||
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 | 
			
		||||
 
 | 
			
		||||
@@ -45,7 +45,7 @@ require (
 | 
			
		||||
	github.com/gogo/protobuf v1.3.2 // indirect
 | 
			
		||||
	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
 | 
			
		||||
	github.com/golang/protobuf v1.5.4 // indirect
 | 
			
		||||
	github.com/google/cel-go v0.20.1 // indirect
 | 
			
		||||
	github.com/google/cel-go v0.21.0 // indirect
 | 
			
		||||
	github.com/google/gnostic-models v0.6.8 // indirect
 | 
			
		||||
	github.com/google/gofuzz v1.2.0 // indirect
 | 
			
		||||
	github.com/google/uuid v1.6.0 // indirect
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/pod-security-admission/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/pod-security-admission/go.sum
									
									
									
										generated
									
									
									
								
							@@ -75,8 +75,8 @@ github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek
 | 
			
		||||
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 | 
			
		||||
github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=
 | 
			
		||||
github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
 | 
			
		||||
github.com/google/cel-go v0.20.1 h1:nDx9r8S3L4pE61eDdt8igGj8rf5kjYR3ILxWIpWNi84=
 | 
			
		||||
github.com/google/cel-go v0.20.1/go.mod h1:kWcIzTsPX0zmQ+H3TirHstLLf9ep5QTsZBN9u4dOYLg=
 | 
			
		||||
github.com/google/cel-go v0.21.0 h1:cl6uW/gxN+Hy50tNYvI691+sXxioCnstFzLp2WO4GCI=
 | 
			
		||||
github.com/google/cel-go v0.21.0/go.mod h1:rHUlWCcBKgyEk+eV03RPdZUekPp6YcJwV0FxuUksYxc=
 | 
			
		||||
github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
 | 
			
		||||
github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
 | 
			
		||||
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 | 
			
		||||
 
 | 
			
		||||
@@ -43,7 +43,7 @@ require (
 | 
			
		||||
	github.com/gogo/protobuf v1.3.2 // indirect
 | 
			
		||||
	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
 | 
			
		||||
	github.com/golang/protobuf v1.5.4 // indirect
 | 
			
		||||
	github.com/google/cel-go v0.20.1 // indirect
 | 
			
		||||
	github.com/google/cel-go v0.21.0 // indirect
 | 
			
		||||
	github.com/google/gnostic-models v0.6.8 // indirect
 | 
			
		||||
	github.com/google/go-cmp v0.6.0 // indirect
 | 
			
		||||
	github.com/google/uuid v1.6.0 // indirect
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/sample-apiserver/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/sample-apiserver/go.sum
									
									
									
										generated
									
									
									
								
							@@ -75,8 +75,8 @@ github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek
 | 
			
		||||
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 | 
			
		||||
github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=
 | 
			
		||||
github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
 | 
			
		||||
github.com/google/cel-go v0.20.1 h1:nDx9r8S3L4pE61eDdt8igGj8rf5kjYR3ILxWIpWNi84=
 | 
			
		||||
github.com/google/cel-go v0.20.1/go.mod h1:kWcIzTsPX0zmQ+H3TirHstLLf9ep5QTsZBN9u4dOYLg=
 | 
			
		||||
github.com/google/cel-go v0.21.0 h1:cl6uW/gxN+Hy50tNYvI691+sXxioCnstFzLp2WO4GCI=
 | 
			
		||||
github.com/google/cel-go v0.21.0/go.mod h1:rHUlWCcBKgyEk+eV03RPdZUekPp6YcJwV0FxuUksYxc=
 | 
			
		||||
github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
 | 
			
		||||
github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
 | 
			
		||||
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										49
									
								
								vendor/github.com/google/cel-go/cel/env.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										49
									
								
								vendor/github.com/google/cel-go/cel/env.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -44,6 +44,9 @@ type Ast struct {
 | 
			
		||||
 | 
			
		||||
// NativeRep converts the AST to a Go-native representation.
 | 
			
		||||
func (ast *Ast) NativeRep() *celast.AST {
 | 
			
		||||
	if ast == nil {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	return ast.impl
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -55,16 +58,13 @@ func (ast *Ast) Expr() *exprpb.Expr {
 | 
			
		||||
	if ast == nil {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	pbExpr, _ := celast.ExprToProto(ast.impl.Expr())
 | 
			
		||||
	pbExpr, _ := celast.ExprToProto(ast.NativeRep().Expr())
 | 
			
		||||
	return pbExpr
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsChecked returns whether the Ast value has been successfully type-checked.
 | 
			
		||||
func (ast *Ast) IsChecked() bool {
 | 
			
		||||
	if ast == nil {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	return ast.impl.IsChecked()
 | 
			
		||||
	return ast.NativeRep().IsChecked()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SourceInfo returns character offset and newline position information about expression elements.
 | 
			
		||||
@@ -72,7 +72,7 @@ func (ast *Ast) SourceInfo() *exprpb.SourceInfo {
 | 
			
		||||
	if ast == nil {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	pbInfo, _ := celast.SourceInfoToProto(ast.impl.SourceInfo())
 | 
			
		||||
	pbInfo, _ := celast.SourceInfoToProto(ast.NativeRep().SourceInfo())
 | 
			
		||||
	return pbInfo
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -95,7 +95,7 @@ func (ast *Ast) OutputType() *Type {
 | 
			
		||||
	if ast == nil {
 | 
			
		||||
		return types.ErrorType
 | 
			
		||||
	}
 | 
			
		||||
	return ast.impl.GetType(ast.impl.Expr().ID())
 | 
			
		||||
	return ast.NativeRep().GetType(ast.NativeRep().Expr().ID())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Source returns a view of the input used to create the Ast. This source may be complete or
 | 
			
		||||
@@ -218,12 +218,12 @@ func (e *Env) Check(ast *Ast) (*Ast, *Issues) {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		errs := common.NewErrors(ast.Source())
 | 
			
		||||
		errs.ReportError(common.NoLocation, err.Error())
 | 
			
		||||
		return nil, NewIssuesWithSourceInfo(errs, ast.impl.SourceInfo())
 | 
			
		||||
		return nil, NewIssuesWithSourceInfo(errs, ast.NativeRep().SourceInfo())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	checked, errs := checker.Check(ast.impl, ast.Source(), chk)
 | 
			
		||||
	checked, errs := checker.Check(ast.NativeRep(), ast.Source(), chk)
 | 
			
		||||
	if len(errs.GetErrors()) > 0 {
 | 
			
		||||
		return nil, NewIssuesWithSourceInfo(errs, ast.impl.SourceInfo())
 | 
			
		||||
		return nil, NewIssuesWithSourceInfo(errs, ast.NativeRep().SourceInfo())
 | 
			
		||||
	}
 | 
			
		||||
	// Manually create the Ast to ensure that the Ast source information (which may be more
 | 
			
		||||
	// detailed than the information provided by Check), is returned to the caller.
 | 
			
		||||
@@ -244,7 +244,7 @@ func (e *Env) Check(ast *Ast) (*Ast, *Issues) {
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	// Apply additional validators on the type-checked result.
 | 
			
		||||
	iss := NewIssuesWithSourceInfo(errs, ast.impl.SourceInfo())
 | 
			
		||||
	iss := NewIssuesWithSourceInfo(errs, ast.NativeRep().SourceInfo())
 | 
			
		||||
	for _, v := range e.validators {
 | 
			
		||||
		v.Validate(e, vConfig, checked, iss)
 | 
			
		||||
	}
 | 
			
		||||
@@ -309,17 +309,13 @@ func (e *Env) Extend(opts ...EnvOption) (*Env, error) {
 | 
			
		||||
	copy(chkOptsCopy, e.chkOpts)
 | 
			
		||||
 | 
			
		||||
	// Copy the declarations if needed.
 | 
			
		||||
	varsCopy := []*decls.VariableDecl{}
 | 
			
		||||
	if chk != nil {
 | 
			
		||||
		// If the type-checker has already been instantiated, then the e.declarations have been
 | 
			
		||||
		// validated within the chk instance.
 | 
			
		||||
		chkOptsCopy = append(chkOptsCopy, checker.ValidatedDeclarations(chk))
 | 
			
		||||
	} else {
 | 
			
		||||
		// If the type-checker has not been instantiated, ensure the unvalidated declarations are
 | 
			
		||||
		// provided to the extended Env instance.
 | 
			
		||||
		varsCopy = make([]*decls.VariableDecl, len(e.variables))
 | 
			
		||||
		copy(varsCopy, e.variables)
 | 
			
		||||
	}
 | 
			
		||||
	varsCopy := make([]*decls.VariableDecl, len(e.variables))
 | 
			
		||||
	copy(varsCopy, e.variables)
 | 
			
		||||
 | 
			
		||||
	// Copy macros and program options
 | 
			
		||||
	macsCopy := make([]parser.Macro, len(e.macros))
 | 
			
		||||
@@ -416,6 +412,17 @@ func (e *Env) Libraries() []string {
 | 
			
		||||
	return libraries
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// HasFunction returns whether a specific function has been configured in the environment
 | 
			
		||||
func (e *Env) HasFunction(functionName string) bool {
 | 
			
		||||
	_, ok := e.functions[functionName]
 | 
			
		||||
	return ok
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Functions returns map of Functions, keyed by function name, that have been configured in the environment.
 | 
			
		||||
func (e *Env) Functions() map[string]*decls.FunctionDecl {
 | 
			
		||||
	return e.functions
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// HasValidator returns whether a specific ASTValidator has been configured in the environment.
 | 
			
		||||
func (e *Env) HasValidator(name string) bool {
 | 
			
		||||
	for _, v := range e.validators {
 | 
			
		||||
@@ -753,10 +760,10 @@ func (i *Issues) Append(other *Issues) *Issues {
 | 
			
		||||
	if i == nil {
 | 
			
		||||
		return other
 | 
			
		||||
	}
 | 
			
		||||
	if other == nil {
 | 
			
		||||
	if other == nil || i == other {
 | 
			
		||||
		return i
 | 
			
		||||
	}
 | 
			
		||||
	return NewIssues(i.errs.Append(other.errs.GetErrors()))
 | 
			
		||||
	return NewIssuesWithSourceInfo(i.errs.Append(other.errs.GetErrors()), i.info)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// String converts the issues to a suitable display string.
 | 
			
		||||
@@ -790,7 +797,7 @@ type interopCELTypeProvider struct {
 | 
			
		||||
 | 
			
		||||
// FindStructType returns a types.Type instance for the given fully-qualified typeName if one exists.
 | 
			
		||||
//
 | 
			
		||||
// This method proxies to the underyling ref.TypeProvider's FindType method and converts protobuf type
 | 
			
		||||
// This method proxies to the underlying ref.TypeProvider's FindType method and converts protobuf type
 | 
			
		||||
// into a native type representation. If the conversion fails, the type is listed as not found.
 | 
			
		||||
func (p *interopCELTypeProvider) FindStructType(typeName string) (*types.Type, bool) {
 | 
			
		||||
	if et, found := p.FindType(typeName); found {
 | 
			
		||||
@@ -813,7 +820,7 @@ func (p *interopCELTypeProvider) FindStructFieldNames(typeName string) ([]string
 | 
			
		||||
// FindStructFieldType returns a types.FieldType instance for the given fully-qualified typeName and field
 | 
			
		||||
// name, if one exists.
 | 
			
		||||
//
 | 
			
		||||
// This method proxies to the underyling ref.TypeProvider's FindFieldType method and converts protobuf type
 | 
			
		||||
// This method proxies to the underlying ref.TypeProvider's FindFieldType method and converts protobuf type
 | 
			
		||||
// into a native type representation. If the conversion fails, the type is listed as not found.
 | 
			
		||||
func (p *interopCELTypeProvider) FindStructFieldType(structType, fieldName string) (*types.FieldType, bool) {
 | 
			
		||||
	if ft, found := p.FindFieldType(structType, fieldName); found {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								vendor/github.com/google/cel-go/cel/library.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								vendor/github.com/google/cel-go/cel/library.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -403,7 +403,7 @@ func optMap(meh MacroExprFactory, target ast.Expr, args []ast.Expr) (ast.Expr, *
 | 
			
		||||
				meh.NewList(),
 | 
			
		||||
				unusedIterVar,
 | 
			
		||||
				varName,
 | 
			
		||||
				meh.NewMemberCall(valueFunc, target),
 | 
			
		||||
				meh.NewMemberCall(valueFunc, meh.Copy(target)),
 | 
			
		||||
				meh.NewLiteral(types.False),
 | 
			
		||||
				meh.NewIdent(varName),
 | 
			
		||||
				mapExpr,
 | 
			
		||||
@@ -430,7 +430,7 @@ func optFlatMap(meh MacroExprFactory, target ast.Expr, args []ast.Expr) (ast.Exp
 | 
			
		||||
			meh.NewList(),
 | 
			
		||||
			unusedIterVar,
 | 
			
		||||
			varName,
 | 
			
		||||
			meh.NewMemberCall(valueFunc, target),
 | 
			
		||||
			meh.NewMemberCall(valueFunc, meh.Copy(target)),
 | 
			
		||||
			meh.NewLiteral(types.False),
 | 
			
		||||
			meh.NewIdent(varName),
 | 
			
		||||
			mapExpr,
 | 
			
		||||
@@ -446,6 +446,12 @@ func enableOptionalSyntax() EnvOption {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// EnableErrorOnBadPresenceTest enables error generation when a presence test or optional field
 | 
			
		||||
// selection is performed on a primitive type.
 | 
			
		||||
func EnableErrorOnBadPresenceTest(value bool) EnvOption {
 | 
			
		||||
	return features(featureEnableErrorOnBadPresenceTest, value)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func decorateOptionalOr(i interpreter.Interpretable) (interpreter.Interpretable, error) {
 | 
			
		||||
	call, ok := i.(interpreter.InterpretableCall)
 | 
			
		||||
	if !ok {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										22
									
								
								vendor/github.com/google/cel-go/cel/optimizer.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										22
									
								
								vendor/github.com/google/cel-go/cel/optimizer.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -15,6 +15,8 @@
 | 
			
		||||
package cel
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"sort"
 | 
			
		||||
 | 
			
		||||
	"github.com/google/cel-go/common"
 | 
			
		||||
	"github.com/google/cel-go/common/ast"
 | 
			
		||||
	"github.com/google/cel-go/common/types"
 | 
			
		||||
@@ -98,14 +100,21 @@ func (opt *StaticOptimizer) Optimize(env *Env, a *Ast) (*Ast, *Issues) {
 | 
			
		||||
// that the ids within the expression correspond to the ids within macros.
 | 
			
		||||
func normalizeIDs(idGen ast.IDGenerator, optimized ast.Expr, info *ast.SourceInfo) {
 | 
			
		||||
	optimized.RenumberIDs(idGen)
 | 
			
		||||
 | 
			
		||||
	if len(info.MacroCalls()) == 0 {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Sort the macro ids to make sure that the renumbering of macro-specific variables
 | 
			
		||||
	// is stable across normalization calls.
 | 
			
		||||
	sortedMacroIDs := []int64{}
 | 
			
		||||
	for id := range info.MacroCalls() {
 | 
			
		||||
		sortedMacroIDs = append(sortedMacroIDs, id)
 | 
			
		||||
	}
 | 
			
		||||
	sort.Slice(sortedMacroIDs, func(i, j int) bool { return sortedMacroIDs[i] < sortedMacroIDs[j] })
 | 
			
		||||
 | 
			
		||||
	// First, update the macro call ids themselves.
 | 
			
		||||
	callIDMap := map[int64]int64{}
 | 
			
		||||
	for id := range info.MacroCalls() {
 | 
			
		||||
	for _, id := range sortedMacroIDs {
 | 
			
		||||
		callIDMap[id] = idGen(id)
 | 
			
		||||
	}
 | 
			
		||||
	// Then update the macro call definitions which refer to these ids, but
 | 
			
		||||
@@ -116,7 +125,8 @@ func normalizeIDs(idGen ast.IDGenerator, optimized ast.Expr, info *ast.SourceInf
 | 
			
		||||
		call ast.Expr
 | 
			
		||||
	}
 | 
			
		||||
	macroUpdates := []macroUpdate{}
 | 
			
		||||
	for oldID, newID := range callIDMap {
 | 
			
		||||
	for _, oldID := range sortedMacroIDs {
 | 
			
		||||
		newID := callIDMap[oldID]
 | 
			
		||||
		call, found := info.GetMacroCall(oldID)
 | 
			
		||||
		if !found {
 | 
			
		||||
			continue
 | 
			
		||||
@@ -134,6 +144,7 @@ func cleanupMacroRefs(expr ast.Expr, info *ast.SourceInfo) {
 | 
			
		||||
	if len(info.MacroCalls()) == 0 {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Sanitize the macro call references once the optimized expression has been computed
 | 
			
		||||
	// and the ids normalized between the expression and the macros.
 | 
			
		||||
	exprRefMap := make(map[int64]struct{})
 | 
			
		||||
@@ -253,6 +264,11 @@ func (opt *optimizerExprFactory) SetMacroCall(id int64, expr ast.Expr) {
 | 
			
		||||
	opt.sourceInfo.SetMacroCall(id, expr)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MacroCalls returns the map of macro calls currently in the context.
 | 
			
		||||
func (opt *optimizerExprFactory) MacroCalls() map[int64]ast.Expr {
 | 
			
		||||
	return opt.sourceInfo.MacroCalls()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewBindMacro creates an AST expression representing the expanded bind() macro, and a macro expression
 | 
			
		||||
// representing the unexpanded call signature to be inserted into the source info macro call metadata.
 | 
			
		||||
func (opt *optimizerExprFactory) NewBindMacro(macroID int64, varName string, varInit, remaining ast.Expr) (astExpr, macroExpr ast.Expr) {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										24
									
								
								vendor/github.com/google/cel-go/cel/options.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										24
									
								
								vendor/github.com/google/cel-go/cel/options.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -61,6 +61,10 @@ const (
 | 
			
		||||
	// compressing the logic graph to a single call when multiple like-operator
 | 
			
		||||
	// expressions occur: e.g. a && b && c && d -> call(_&&_, [a, b, c, d])
 | 
			
		||||
	featureVariadicLogicalASTs
 | 
			
		||||
 | 
			
		||||
	// Enable error generation when a presence test or optional field selection is
 | 
			
		||||
	// performed on a primitive type.
 | 
			
		||||
	featureEnableErrorOnBadPresenceTest
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// EnvOption is a functional interface for configuring the environment.
 | 
			
		||||
@@ -243,6 +247,13 @@ func Abbrevs(qualifiedNames ...string) EnvOption {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// customTypeRegistry is an internal-only interface containing the minimum methods required to support
 | 
			
		||||
// custom types. It is a subset of methods from ref.TypeRegistry.
 | 
			
		||||
type customTypeRegistry interface {
 | 
			
		||||
	RegisterDescriptor(protoreflect.FileDescriptor) error
 | 
			
		||||
	RegisterType(...ref.Type) error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Types adds one or more type declarations to the environment, allowing for construction of
 | 
			
		||||
// type-literals whose definitions are included in the common expression built-in set.
 | 
			
		||||
//
 | 
			
		||||
@@ -255,12 +266,7 @@ func Abbrevs(qualifiedNames ...string) EnvOption {
 | 
			
		||||
// Note: This option must be specified after the CustomTypeProvider option when used together.
 | 
			
		||||
func Types(addTypes ...any) EnvOption {
 | 
			
		||||
	return func(e *Env) (*Env, error) {
 | 
			
		||||
		var reg ref.TypeRegistry
 | 
			
		||||
		var isReg bool
 | 
			
		||||
		reg, isReg = e.provider.(*types.Registry)
 | 
			
		||||
		if !isReg {
 | 
			
		||||
			reg, isReg = e.provider.(ref.TypeRegistry)
 | 
			
		||||
		}
 | 
			
		||||
		reg, isReg := e.provider.(customTypeRegistry)
 | 
			
		||||
		if !isReg {
 | 
			
		||||
			return nil, fmt.Errorf("custom types not supported by provider: %T", e.provider)
 | 
			
		||||
		}
 | 
			
		||||
@@ -297,7 +303,7 @@ func Types(addTypes ...any) EnvOption {
 | 
			
		||||
// extension or by re-using the same EnvOption with another NewEnv() call.
 | 
			
		||||
func TypeDescs(descs ...any) EnvOption {
 | 
			
		||||
	return func(e *Env) (*Env, error) {
 | 
			
		||||
		reg, isReg := e.provider.(ref.TypeRegistry)
 | 
			
		||||
		reg, isReg := e.provider.(customTypeRegistry)
 | 
			
		||||
		if !isReg {
 | 
			
		||||
			return nil, fmt.Errorf("custom types not supported by provider: %T", e.provider)
 | 
			
		||||
		}
 | 
			
		||||
@@ -345,7 +351,7 @@ func TypeDescs(descs ...any) EnvOption {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func registerFileSet(reg ref.TypeRegistry, fileSet *descpb.FileDescriptorSet) error {
 | 
			
		||||
func registerFileSet(reg customTypeRegistry, fileSet *descpb.FileDescriptorSet) error {
 | 
			
		||||
	files, err := protodesc.NewFiles(fileSet)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return fmt.Errorf("protodesc.NewFiles(%v) failed: %v", fileSet, err)
 | 
			
		||||
@@ -353,7 +359,7 @@ func registerFileSet(reg ref.TypeRegistry, fileSet *descpb.FileDescriptorSet) er
 | 
			
		||||
	return registerFiles(reg, files)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func registerFiles(reg ref.TypeRegistry, files *protoregistry.Files) error {
 | 
			
		||||
func registerFiles(reg customTypeRegistry, files *protoregistry.Files) error {
 | 
			
		||||
	var err error
 | 
			
		||||
	files.RangeFiles(func(fd protoreflect.FileDescriptor) bool {
 | 
			
		||||
		err = reg.RegisterDescriptor(fd)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								vendor/github.com/google/cel-go/cel/program.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								vendor/github.com/google/cel-go/cel/program.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -187,10 +187,13 @@ func newProgram(e *Env, a *Ast, opts []ProgramOption) (Program, error) {
 | 
			
		||||
 | 
			
		||||
	// Set the attribute factory after the options have been set.
 | 
			
		||||
	var attrFactory interpreter.AttributeFactory
 | 
			
		||||
	attrFactorOpts := []interpreter.AttrFactoryOption{
 | 
			
		||||
		interpreter.EnableErrorOnBadPresenceTest(p.HasFeature(featureEnableErrorOnBadPresenceTest)),
 | 
			
		||||
	}
 | 
			
		||||
	if p.evalOpts&OptPartialEval == OptPartialEval {
 | 
			
		||||
		attrFactory = interpreter.NewPartialAttributeFactory(e.Container, e.adapter, e.provider)
 | 
			
		||||
		attrFactory = interpreter.NewPartialAttributeFactory(e.Container, e.adapter, e.provider, attrFactorOpts...)
 | 
			
		||||
	} else {
 | 
			
		||||
		attrFactory = interpreter.NewAttributeFactory(e.Container, e.adapter, e.provider)
 | 
			
		||||
		attrFactory = interpreter.NewAttributeFactory(e.Container, e.adapter, e.provider, attrFactorOpts...)
 | 
			
		||||
	}
 | 
			
		||||
	interp := interpreter.NewInterpreter(disp, e.Container, e.provider, e.adapter, attrFactory)
 | 
			
		||||
	p.interpreter = interp
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/github.com/google/cel-go/checker/BUILD.bazel
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/google/cel-go/checker/BUILD.bazel
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -16,7 +16,6 @@ go_library(
 | 
			
		||||
        "options.go",
 | 
			
		||||
        "printer.go",
 | 
			
		||||
        "scopes.go",
 | 
			
		||||
        "standard.go",
 | 
			
		||||
        "types.go",
 | 
			
		||||
    ],
 | 
			
		||||
    importpath = "github.com/google/cel-go/checker",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										35
									
								
								vendor/github.com/google/cel-go/checker/standard.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										35
									
								
								vendor/github.com/google/cel-go/checker/standard.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,35 +0,0 @@
 | 
			
		||||
// Copyright 2018 Google LLC
 | 
			
		||||
//
 | 
			
		||||
// Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
// you may not use this file except in compliance with the License.
 | 
			
		||||
// You may obtain a copy of the License at
 | 
			
		||||
//
 | 
			
		||||
//      http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
//
 | 
			
		||||
// Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
// distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
// See the License for the specific language governing permissions and
 | 
			
		||||
// limitations under the License.
 | 
			
		||||
 | 
			
		||||
package checker
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/google/cel-go/common/stdlib"
 | 
			
		||||
 | 
			
		||||
	exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// StandardFunctions returns the Decls for all functions in the evaluator.
 | 
			
		||||
//
 | 
			
		||||
// Deprecated: prefer stdlib.FunctionExprDecls()
 | 
			
		||||
func StandardFunctions() []*exprpb.Decl {
 | 
			
		||||
	return stdlib.FunctionExprDecls()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StandardTypes returns the set of type identifiers for standard library types.
 | 
			
		||||
//
 | 
			
		||||
// Deprecated: prefer stdlib.TypeExprDecls()
 | 
			
		||||
func StandardTypes() []*exprpb.Decl {
 | 
			
		||||
	return stdlib.TypeExprDecls()
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/github.com/google/cel-go/common/BUILD.bazel
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/google/cel-go/common/BUILD.bazel
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -18,7 +18,6 @@ go_library(
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//common/runes:go_default_library",
 | 
			
		||||
        "@org_golang_google_genproto_googleapis_api//expr/v1alpha1:go_default_library",
 | 
			
		||||
        "@org_golang_x_text//width:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										45
									
								
								vendor/github.com/google/cel-go/common/ast/ast.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										45
									
								
								vendor/github.com/google/cel-go/common/ast/ast.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -310,21 +310,18 @@ func (s *SourceInfo) SetOffsetRange(id int64, o OffsetRange) {
 | 
			
		||||
	s.offsetRanges[id] = o
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ClearOffsetRange removes the OffsetRange for the given expression id.
 | 
			
		||||
func (s *SourceInfo) ClearOffsetRange(id int64) {
 | 
			
		||||
	if s != nil {
 | 
			
		||||
		delete(s.offsetRanges, id)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetStartLocation calculates the human-readable 1-based line and 0-based column of the first character
 | 
			
		||||
// of the expression node at the id.
 | 
			
		||||
func (s *SourceInfo) GetStartLocation(id int64) common.Location {
 | 
			
		||||
	if o, found := s.GetOffsetRange(id); found {
 | 
			
		||||
		line := 1
 | 
			
		||||
		col := int(o.Start)
 | 
			
		||||
		for _, lineOffset := range s.LineOffsets() {
 | 
			
		||||
			if lineOffset < o.Start {
 | 
			
		||||
				line++
 | 
			
		||||
				col = int(o.Start - lineOffset)
 | 
			
		||||
			} else {
 | 
			
		||||
				break
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return common.NewLocation(line, col)
 | 
			
		||||
		return s.GetLocationByOffset(o.Start)
 | 
			
		||||
	}
 | 
			
		||||
	return common.NoLocation
 | 
			
		||||
}
 | 
			
		||||
@@ -336,21 +333,25 @@ func (s *SourceInfo) GetStartLocation(id int64) common.Location {
 | 
			
		||||
// be identical to the start location for the expression.
 | 
			
		||||
func (s *SourceInfo) GetStopLocation(id int64) common.Location {
 | 
			
		||||
	if o, found := s.GetOffsetRange(id); found {
 | 
			
		||||
		line := 1
 | 
			
		||||
		col := int(o.Stop)
 | 
			
		||||
		for _, lineOffset := range s.LineOffsets() {
 | 
			
		||||
			if lineOffset < o.Stop {
 | 
			
		||||
				line++
 | 
			
		||||
				col = int(o.Stop - lineOffset)
 | 
			
		||||
			} else {
 | 
			
		||||
				break
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return common.NewLocation(line, col)
 | 
			
		||||
		return s.GetLocationByOffset(o.Stop)
 | 
			
		||||
	}
 | 
			
		||||
	return common.NoLocation
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetLocationByOffset returns the line and column information for a given character offset.
 | 
			
		||||
func (s *SourceInfo) GetLocationByOffset(offset int32) common.Location {
 | 
			
		||||
	line := 1
 | 
			
		||||
	col := int(offset)
 | 
			
		||||
	for _, lineOffset := range s.LineOffsets() {
 | 
			
		||||
		if lineOffset > offset {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		line++
 | 
			
		||||
		col = int(offset - lineOffset)
 | 
			
		||||
	}
 | 
			
		||||
	return common.NewLocation(line, col)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ComputeOffset calculates the 0-based character offset from a 1-based line and 0-based column.
 | 
			
		||||
func (s *SourceInfo) ComputeOffset(line, col int32) int32 {
 | 
			
		||||
	if s != nil {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/github.com/google/cel-go/common/ast/expr.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/google/cel-go/common/ast/expr.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -158,7 +158,7 @@ type EntryExpr interface {
 | 
			
		||||
// IDGenerator produces unique ids suitable for tagging expression nodes
 | 
			
		||||
type IDGenerator func(originalID int64) int64
 | 
			
		||||
 | 
			
		||||
// CallExpr defines an interface for inspecting a function call and its arugments.
 | 
			
		||||
// CallExpr defines an interface for inspecting a function call and its arguments.
 | 
			
		||||
type CallExpr interface {
 | 
			
		||||
	// FunctionName returns the name of the function.
 | 
			
		||||
	FunctionName() string
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/github.com/google/cel-go/common/decls/decls.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/google/cel-go/common/decls/decls.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -162,7 +162,9 @@ func (f *FunctionDecl) AddOverload(overload *OverloadDecl) error {
 | 
			
		||||
		if oID == overload.ID() {
 | 
			
		||||
			if o.SignatureEquals(overload) && o.IsNonStrict() == overload.IsNonStrict() {
 | 
			
		||||
				// Allow redefinition of an overload implementation so long as the signatures match.
 | 
			
		||||
				if overload.hasBinding() {
 | 
			
		||||
					f.overloads[oID] = overload
 | 
			
		||||
				}
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
			return fmt.Errorf("overload redefinition in function. %s: %s has multiple definitions", f.Name(), oID)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										9
									
								
								vendor/github.com/google/cel-go/common/error.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								vendor/github.com/google/cel-go/common/error.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -18,8 +18,6 @@ import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"unicode/utf8"
 | 
			
		||||
 | 
			
		||||
	"golang.org/x/text/width"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// NewError creates an error associated with an expression id with the given message at the given location.
 | 
			
		||||
@@ -37,16 +35,13 @@ type Error struct {
 | 
			
		||||
const (
 | 
			
		||||
	dot     = "."
 | 
			
		||||
	ind     = "^"
 | 
			
		||||
	wideDot = "\uff0e"
 | 
			
		||||
	wideInd = "\uff3e"
 | 
			
		||||
 | 
			
		||||
	// maxSnippetLength is the largest number of characters which can be rendered in an error message snippet.
 | 
			
		||||
	maxSnippetLength = 16384
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	wideDot = width.Widen.String(dot)
 | 
			
		||||
	wideInd = width.Widen.String(ind)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// ToDisplayString decorates the error message with the source location.
 | 
			
		||||
func (e *Error) ToDisplayString(source Source) string {
 | 
			
		||||
	var result = fmt.Sprintf("ERROR: %s:%d:%d: %s",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										56
									
								
								vendor/github.com/google/cel-go/common/runes/buffer.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										56
									
								
								vendor/github.com/google/cel-go/common/runes/buffer.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -127,20 +127,48 @@ var nilBuffer = &emptyBuffer{}
 | 
			
		||||
// elements of the byte or uint16 array, and continue. The underlying storage is an rune array
 | 
			
		||||
// containing any Unicode character.
 | 
			
		||||
func NewBuffer(data string) Buffer {
 | 
			
		||||
	buf, _ := newBuffer(data, false)
 | 
			
		||||
	return buf
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewBufferAndLineOffsets returns an efficient implementation of Buffer for the given text based on
 | 
			
		||||
// the ranges of the encoded code points contained within, as well as returning the line offsets.
 | 
			
		||||
//
 | 
			
		||||
// Code points are represented as an array of byte, uint16, or rune. This approach ensures that
 | 
			
		||||
// each index represents a code point by itself without needing to use an array of rune. At first
 | 
			
		||||
// we assume all code points are less than or equal to '\u007f'. If this holds true, the
 | 
			
		||||
// underlying storage is a byte array containing only ASCII characters. If we encountered a code
 | 
			
		||||
// point above this range but less than or equal to '\uffff' we allocate a uint16 array, copy the
 | 
			
		||||
// elements of previous byte array to the uint16 array, and continue. If this holds true, the
 | 
			
		||||
// underlying storage is a uint16 array containing only Unicode characters in the Basic Multilingual
 | 
			
		||||
// Plane. If we encounter a code point above '\uffff' we allocate an rune array, copy the previous
 | 
			
		||||
// elements of the byte or uint16 array, and continue. The underlying storage is an rune array
 | 
			
		||||
// containing any Unicode character.
 | 
			
		||||
func NewBufferAndLineOffsets(data string) (Buffer, []int32) {
 | 
			
		||||
	return newBuffer(data, true)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func newBuffer(data string, lines bool) (Buffer, []int32) {
 | 
			
		||||
	if len(data) == 0 {
 | 
			
		||||
		return nilBuffer
 | 
			
		||||
		return nilBuffer, []int32{0}
 | 
			
		||||
	}
 | 
			
		||||
	var (
 | 
			
		||||
		idx         = 0
 | 
			
		||||
		off   int32 = 0
 | 
			
		||||
		buf8        = make([]byte, 0, len(data))
 | 
			
		||||
		buf16 []uint16
 | 
			
		||||
		buf32 []rune
 | 
			
		||||
		offs  []int32
 | 
			
		||||
	)
 | 
			
		||||
	for idx < len(data) {
 | 
			
		||||
		r, s := utf8.DecodeRuneInString(data[idx:])
 | 
			
		||||
		idx += s
 | 
			
		||||
		if lines && r == '\n' {
 | 
			
		||||
			offs = append(offs, off+1)
 | 
			
		||||
		}
 | 
			
		||||
		if r < utf8.RuneSelf {
 | 
			
		||||
			buf8 = append(buf8, byte(r))
 | 
			
		||||
			off++
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		if r <= 0xffff {
 | 
			
		||||
@@ -150,6 +178,7 @@ func NewBuffer(data string) Buffer {
 | 
			
		||||
			}
 | 
			
		||||
			buf8 = nil
 | 
			
		||||
			buf16 = append(buf16, uint16(r))
 | 
			
		||||
			off++
 | 
			
		||||
			goto copy16
 | 
			
		||||
		}
 | 
			
		||||
		buf32 = make([]rune, len(buf8), len(data))
 | 
			
		||||
@@ -158,17 +187,25 @@ func NewBuffer(data string) Buffer {
 | 
			
		||||
		}
 | 
			
		||||
		buf8 = nil
 | 
			
		||||
		buf32 = append(buf32, r)
 | 
			
		||||
		off++
 | 
			
		||||
		goto copy32
 | 
			
		||||
	}
 | 
			
		||||
	if lines {
 | 
			
		||||
		offs = append(offs, off+1)
 | 
			
		||||
	}
 | 
			
		||||
	return &asciiBuffer{
 | 
			
		||||
		arr: buf8,
 | 
			
		||||
	}
 | 
			
		||||
	}, offs
 | 
			
		||||
copy16:
 | 
			
		||||
	for idx < len(data) {
 | 
			
		||||
		r, s := utf8.DecodeRuneInString(data[idx:])
 | 
			
		||||
		idx += s
 | 
			
		||||
		if lines && r == '\n' {
 | 
			
		||||
			offs = append(offs, off+1)
 | 
			
		||||
		}
 | 
			
		||||
		if r <= 0xffff {
 | 
			
		||||
			buf16 = append(buf16, uint16(r))
 | 
			
		||||
			off++
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		buf32 = make([]rune, len(buf16), len(data))
 | 
			
		||||
@@ -177,18 +214,29 @@ copy16:
 | 
			
		||||
		}
 | 
			
		||||
		buf16 = nil
 | 
			
		||||
		buf32 = append(buf32, r)
 | 
			
		||||
		off++
 | 
			
		||||
		goto copy32
 | 
			
		||||
	}
 | 
			
		||||
	if lines {
 | 
			
		||||
		offs = append(offs, off+1)
 | 
			
		||||
	}
 | 
			
		||||
	return &basicBuffer{
 | 
			
		||||
		arr: buf16,
 | 
			
		||||
	}
 | 
			
		||||
	}, offs
 | 
			
		||||
copy32:
 | 
			
		||||
	for idx < len(data) {
 | 
			
		||||
		r, s := utf8.DecodeRuneInString(data[idx:])
 | 
			
		||||
		idx += s
 | 
			
		||||
		if lines && r == '\n' {
 | 
			
		||||
			offs = append(offs, off+1)
 | 
			
		||||
		}
 | 
			
		||||
		buf32 = append(buf32, r)
 | 
			
		||||
		off++
 | 
			
		||||
	}
 | 
			
		||||
	if lines {
 | 
			
		||||
		offs = append(offs, off+1)
 | 
			
		||||
	}
 | 
			
		||||
	return &supplementalBuffer{
 | 
			
		||||
		arr: buf32,
 | 
			
		||||
	}
 | 
			
		||||
	}, offs
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								vendor/github.com/google/cel-go/common/source.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								vendor/github.com/google/cel-go/common/source.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -15,9 +15,6 @@
 | 
			
		||||
package common
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"strings"
 | 
			
		||||
	"unicode/utf8"
 | 
			
		||||
 | 
			
		||||
	"github.com/google/cel-go/common/runes"
 | 
			
		||||
 | 
			
		||||
	exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1"
 | 
			
		||||
@@ -80,17 +77,11 @@ func NewTextSource(text string) Source {
 | 
			
		||||
// NewStringSource creates a new Source from the given contents and description.
 | 
			
		||||
func NewStringSource(contents string, description string) Source {
 | 
			
		||||
	// Compute line offsets up front as they are referred to frequently.
 | 
			
		||||
	lines := strings.Split(contents, "\n")
 | 
			
		||||
	offsets := make([]int32, len(lines))
 | 
			
		||||
	var offset int32
 | 
			
		||||
	for i, line := range lines {
 | 
			
		||||
		offset = offset + int32(utf8.RuneCountInString(line)) + 1
 | 
			
		||||
		offsets[int32(i)] = offset
 | 
			
		||||
	}
 | 
			
		||||
	buf, offs := runes.NewBufferAndLineOffsets(contents)
 | 
			
		||||
	return &sourceImpl{
 | 
			
		||||
		Buffer:      runes.NewBuffer(contents),
 | 
			
		||||
		Buffer:      buf,
 | 
			
		||||
		description: description,
 | 
			
		||||
		lineOffsets: offsets,
 | 
			
		||||
		lineOffsets: offs,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -172,9 +163,8 @@ func (s *sourceImpl) findLine(characterOffset int32) (int32, int32) {
 | 
			
		||||
	for _, lineOffset := range s.lineOffsets {
 | 
			
		||||
		if lineOffset > characterOffset {
 | 
			
		||||
			break
 | 
			
		||||
		} else {
 | 
			
		||||
			line++
 | 
			
		||||
		}
 | 
			
		||||
		line++
 | 
			
		||||
	}
 | 
			
		||||
	if line == 1 {
 | 
			
		||||
		return line, 0
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/github.com/google/cel-go/common/stdlib/BUILD.bazel
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/google/cel-go/common/stdlib/BUILD.bazel
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -12,7 +12,6 @@ go_library(
 | 
			
		||||
    ],
 | 
			
		||||
    importpath = "github.com/google/cel-go/common/stdlib",
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//checker/decls:go_default_library",
 | 
			
		||||
        "//common/decls:go_default_library",
 | 
			
		||||
        "//common/functions:go_default_library",
 | 
			
		||||
        "//common/operators:go_default_library",
 | 
			
		||||
@@ -20,6 +19,5 @@ go_library(
 | 
			
		||||
        "//common/types:go_default_library",
 | 
			
		||||
        "//common/types/ref:go_default_library",
 | 
			
		||||
        "//common/types/traits:go_default_library",
 | 
			
		||||
        "@org_golang_google_genproto_googleapis_api//expr/v1alpha1:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										41
									
								
								vendor/github.com/google/cel-go/common/stdlib/standard.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										41
									
								
								vendor/github.com/google/cel-go/common/stdlib/standard.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -23,15 +23,11 @@ import (
 | 
			
		||||
	"github.com/google/cel-go/common/types"
 | 
			
		||||
	"github.com/google/cel-go/common/types/ref"
 | 
			
		||||
	"github.com/google/cel-go/common/types/traits"
 | 
			
		||||
 | 
			
		||||
	exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	stdFunctions []*decls.FunctionDecl
 | 
			
		||||
	stdFnDecls   []*exprpb.Decl
 | 
			
		||||
	stdTypes     []*decls.VariableDecl
 | 
			
		||||
	stdTypeDecls []*exprpb.Decl
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
@@ -55,15 +51,6 @@ func init() {
 | 
			
		||||
		decls.TypeVariable(types.UintType),
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	stdTypeDecls = make([]*exprpb.Decl, 0, len(stdTypes))
 | 
			
		||||
	for _, stdType := range stdTypes {
 | 
			
		||||
		typeVar, err := decls.VariableDeclToExprDecl(stdType)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			panic(err)
 | 
			
		||||
		}
 | 
			
		||||
		stdTypeDecls = append(stdTypeDecls, typeVar)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	stdFunctions = []*decls.FunctionDecl{
 | 
			
		||||
		// Logical operators. Special-cased within the interpreter.
 | 
			
		||||
		// Note, the singleton binding prevents extensions from overriding the operator behavior.
 | 
			
		||||
@@ -576,18 +563,6 @@ func init() {
 | 
			
		||||
			decls.MemberOverload(overloads.DurationToMilliseconds,
 | 
			
		||||
				argTypes(types.DurationType), types.IntType)),
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	stdFnDecls = make([]*exprpb.Decl, 0, len(stdFunctions))
 | 
			
		||||
	for _, fn := range stdFunctions {
 | 
			
		||||
		if fn.IsDeclarationDisabled() {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		ed, err := decls.FunctionDeclToExprDecl(fn)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			panic(err)
 | 
			
		||||
		}
 | 
			
		||||
		stdFnDecls = append(stdFnDecls, ed)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Functions returns the set of standard library function declarations and definitions for CEL.
 | 
			
		||||
@@ -595,27 +570,11 @@ func Functions() []*decls.FunctionDecl {
 | 
			
		||||
	return stdFunctions
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// FunctionExprDecls returns the legacy style protobuf-typed declarations for all functions and overloads
 | 
			
		||||
// in the CEL standard environment.
 | 
			
		||||
//
 | 
			
		||||
// Deprecated: use Functions
 | 
			
		||||
func FunctionExprDecls() []*exprpb.Decl {
 | 
			
		||||
	return stdFnDecls
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Types returns the set of standard library types for CEL.
 | 
			
		||||
func Types() []*decls.VariableDecl {
 | 
			
		||||
	return stdTypes
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// TypeExprDecls returns the legacy style protobuf-typed declarations for all types in the CEL
 | 
			
		||||
// standard environment.
 | 
			
		||||
//
 | 
			
		||||
// Deprecated: use Types
 | 
			
		||||
func TypeExprDecls() []*exprpb.Decl {
 | 
			
		||||
	return stdTypeDecls
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func notStrictlyFalse(value ref.Val) ref.Val {
 | 
			
		||||
	if types.IsBool(value) {
 | 
			
		||||
		return value
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								vendor/github.com/google/cel-go/common/types/bytes.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/github.com/google/cel-go/common/types/bytes.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -58,7 +58,17 @@ func (b Bytes) Compare(other ref.Val) ref.Val {
 | 
			
		||||
// ConvertToNative implements the ref.Val interface method.
 | 
			
		||||
func (b Bytes) ConvertToNative(typeDesc reflect.Type) (any, error) {
 | 
			
		||||
	switch typeDesc.Kind() {
 | 
			
		||||
	case reflect.Array, reflect.Slice:
 | 
			
		||||
	case reflect.Array:
 | 
			
		||||
		if len(b) != typeDesc.Len() {
 | 
			
		||||
			return nil, fmt.Errorf("[%d]byte not assignable to [%d]byte array", len(b), typeDesc.Len())
 | 
			
		||||
		}
 | 
			
		||||
		refArrPtr := reflect.New(reflect.ArrayOf(len(b), typeDesc.Elem()))
 | 
			
		||||
		refArr := refArrPtr.Elem()
 | 
			
		||||
		for i, byt := range b {
 | 
			
		||||
			refArr.Index(i).Set(reflect.ValueOf(byt).Convert(typeDesc.Elem()))
 | 
			
		||||
		}
 | 
			
		||||
		return refArr.Interface(), nil
 | 
			
		||||
	case reflect.Slice:
 | 
			
		||||
		return reflect.ValueOf(b).Convert(typeDesc).Interface(), nil
 | 
			
		||||
	case reflect.Ptr:
 | 
			
		||||
		switch typeDesc {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										27
									
								
								vendor/github.com/google/cel-go/common/types/pb/type.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										27
									
								
								vendor/github.com/google/cel-go/common/types/pb/type.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -427,22 +427,49 @@ func unwrap(desc description, msg proto.Message) (any, bool, error) {
 | 
			
		||||
			return structpb.NullValue_NULL_VALUE, true, nil
 | 
			
		||||
		}
 | 
			
		||||
	case *wrapperspb.BoolValue:
 | 
			
		||||
		if v == nil {
 | 
			
		||||
			return nil, true, nil
 | 
			
		||||
		}
 | 
			
		||||
		return v.GetValue(), true, nil
 | 
			
		||||
	case *wrapperspb.BytesValue:
 | 
			
		||||
		if v == nil {
 | 
			
		||||
			return nil, true, nil
 | 
			
		||||
		}
 | 
			
		||||
		return v.GetValue(), true, nil
 | 
			
		||||
	case *wrapperspb.DoubleValue:
 | 
			
		||||
		if v == nil {
 | 
			
		||||
			return nil, true, nil
 | 
			
		||||
		}
 | 
			
		||||
		return v.GetValue(), true, nil
 | 
			
		||||
	case *wrapperspb.FloatValue:
 | 
			
		||||
		if v == nil {
 | 
			
		||||
			return nil, true, nil
 | 
			
		||||
		}
 | 
			
		||||
		return float64(v.GetValue()), true, nil
 | 
			
		||||
	case *wrapperspb.Int32Value:
 | 
			
		||||
		if v == nil {
 | 
			
		||||
			return nil, true, nil
 | 
			
		||||
		}
 | 
			
		||||
		return int64(v.GetValue()), true, nil
 | 
			
		||||
	case *wrapperspb.Int64Value:
 | 
			
		||||
		if v == nil {
 | 
			
		||||
			return nil, true, nil
 | 
			
		||||
		}
 | 
			
		||||
		return v.GetValue(), true, nil
 | 
			
		||||
	case *wrapperspb.StringValue:
 | 
			
		||||
		if v == nil {
 | 
			
		||||
			return nil, true, nil
 | 
			
		||||
		}
 | 
			
		||||
		return v.GetValue(), true, nil
 | 
			
		||||
	case *wrapperspb.UInt32Value:
 | 
			
		||||
		if v == nil {
 | 
			
		||||
			return nil, true, nil
 | 
			
		||||
		}
 | 
			
		||||
		return uint64(v.GetValue()), true, nil
 | 
			
		||||
	case *wrapperspb.UInt64Value:
 | 
			
		||||
		if v == nil {
 | 
			
		||||
			return nil, true, nil
 | 
			
		||||
		}
 | 
			
		||||
		return v.GetValue(), true, nil
 | 
			
		||||
	}
 | 
			
		||||
	return msg, false, nil
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								vendor/github.com/google/cel-go/common/types/provider.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/github.com/google/cel-go/common/types/provider.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -585,6 +585,14 @@ func nativeToValue(a Adapter, value any) (ref.Val, bool) {
 | 
			
		||||
		refKind := refValue.Kind()
 | 
			
		||||
		switch refKind {
 | 
			
		||||
		case reflect.Array, reflect.Slice:
 | 
			
		||||
			if refValue.Type().Elem() == reflect.TypeOf(byte(0)) {
 | 
			
		||||
				if refValue.CanAddr() {
 | 
			
		||||
					return Bytes(refValue.Bytes()), true
 | 
			
		||||
				}
 | 
			
		||||
				tmp := reflect.New(refValue.Type())
 | 
			
		||||
				tmp.Elem().Set(refValue)
 | 
			
		||||
				return Bytes(tmp.Elem().Bytes()), true
 | 
			
		||||
			}
 | 
			
		||||
			return NewDynamicList(a, v), true
 | 
			
		||||
		case reflect.Map:
 | 
			
		||||
			return NewDynamicMap(a, v), true
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										241
									
								
								vendor/github.com/google/cel-go/ext/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										241
									
								
								vendor/github.com/google/cel-go/ext/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -100,7 +100,8 @@ argument. Simple numeric and list literals are supported as valid argument
 | 
			
		||||
types; however, other literals will be flagged as errors during macro
 | 
			
		||||
expansion. If the argument expression does not resolve to a numeric or
 | 
			
		||||
list(numeric) type during type-checking, or during runtime then an error
 | 
			
		||||
will be produced. If a list argument is empty, this too will produce an error.
 | 
			
		||||
will be produced. If a list argument is empty, this too will produce an
 | 
			
		||||
error.
 | 
			
		||||
 | 
			
		||||
    math.least(<arg>, ...) -> <double|int|uint>
 | 
			
		||||
 | 
			
		||||
@@ -117,6 +118,244 @@ Examples:
 | 
			
		||||
    math.least(a, b)     // check-time error if a or b is non-numeric
 | 
			
		||||
    math.least(dyn('string')) // runtime error
 | 
			
		||||
 | 
			
		||||
### Math.BitOr
 | 
			
		||||
 | 
			
		||||
Introduced at version: 1
 | 
			
		||||
 | 
			
		||||
Performs a bitwise-OR operation over two int or uint values.
 | 
			
		||||
 | 
			
		||||
    math.bitOr(<int>, <int>) -> <int>
 | 
			
		||||
    math.bitOr(<uint>, <uint>) -> <uint>
 | 
			
		||||
 | 
			
		||||
Examples:
 | 
			
		||||
 | 
			
		||||
    math.bitOr(1u, 2u)    // returns 3u
 | 
			
		||||
    math.bitOr(-2, -4)    // returns -2
 | 
			
		||||
 | 
			
		||||
### Math.BitAnd
 | 
			
		||||
 | 
			
		||||
Introduced at version: 1
 | 
			
		||||
 | 
			
		||||
Performs a bitwise-AND operation over two int or uint values.
 | 
			
		||||
 | 
			
		||||
    math.bitAnd(<int>, <int>) -> <int>
 | 
			
		||||
    math.bitAnd(<uint>, <uint>) -> <uint>
 | 
			
		||||
 | 
			
		||||
Examples:
 | 
			
		||||
 | 
			
		||||
    math.bitAnd(3u, 2u)   // return 2u
 | 
			
		||||
    math.bitAnd(3, 5)     // returns 3
 | 
			
		||||
    math.bitAnd(-3, -5)   // returns -7
 | 
			
		||||
 | 
			
		||||
### Math.BitXor
 | 
			
		||||
 | 
			
		||||
Introduced at version: 1
 | 
			
		||||
 | 
			
		||||
    math.bitXor(<int>, <int>) -> <int>
 | 
			
		||||
    math.bitXor(<uint>, <uint>) -> <uint>
 | 
			
		||||
 | 
			
		||||
Performs a bitwise-XOR operation over two int or uint values.
 | 
			
		||||
 | 
			
		||||
Examples:
 | 
			
		||||
 | 
			
		||||
    math.bitXor(3u, 5u) // returns 6u
 | 
			
		||||
    math.bitXor(1, 3)   // returns 2
 | 
			
		||||
 | 
			
		||||
### Math.BitNot
 | 
			
		||||
 | 
			
		||||
Introduced at version: 1
 | 
			
		||||
 | 
			
		||||
Function which accepts a single int or uint and performs a bitwise-NOT
 | 
			
		||||
ones-complement of the given binary value.
 | 
			
		||||
 | 
			
		||||
    math.bitNot(<int>) -> <int>
 | 
			
		||||
    math.bitNot(<uint>) -> <uint>
 | 
			
		||||
 | 
			
		||||
Examples
 | 
			
		||||
 | 
			
		||||
    math.bitNot(1)  // returns -1
 | 
			
		||||
    math.bitNot(-1) // return 0
 | 
			
		||||
    math.bitNot(0u) // returns 18446744073709551615u
 | 
			
		||||
 | 
			
		||||
### Math.BitShiftLeft
 | 
			
		||||
 | 
			
		||||
Introduced at version: 1
 | 
			
		||||
 | 
			
		||||
Perform a left shift of bits on the first parameter, by the amount of bits
 | 
			
		||||
specified in the second parameter. The first parameter is either a uint or
 | 
			
		||||
an int. The second parameter must be an int.
 | 
			
		||||
 | 
			
		||||
When the second parameter is 64 or greater, 0 will be always be returned
 | 
			
		||||
since the number of bits shifted is greater than or equal to the total bit
 | 
			
		||||
length of the number being shifted. Negative valued bit shifts will result
 | 
			
		||||
in a runtime error.
 | 
			
		||||
 | 
			
		||||
    math.bitShiftLeft(<int>, <int>) -> <int>
 | 
			
		||||
    math.bitShiftLeft(<uint>, <int>) -> <uint>
 | 
			
		||||
 | 
			
		||||
Examples
 | 
			
		||||
 | 
			
		||||
    math.bitShiftLeft(1, 2)    // returns 4
 | 
			
		||||
    math.bitShiftLeft(-1, 2)   // returns -4
 | 
			
		||||
    math.bitShiftLeft(1u, 2)   // return 4u
 | 
			
		||||
    math.bitShiftLeft(1u, 200) // returns 0u
 | 
			
		||||
 | 
			
		||||
### Math.BitShiftRight
 | 
			
		||||
 | 
			
		||||
Introduced at version: 1
 | 
			
		||||
 | 
			
		||||
Perform a right shift of bits on the first parameter, by the amount of bits
 | 
			
		||||
specified in the second parameter. The first parameter is either a uint or
 | 
			
		||||
an int. The second parameter must be an int.
 | 
			
		||||
 | 
			
		||||
When the second parameter is 64 or greater, 0 will always be returned since
 | 
			
		||||
the number of bits shifted is greater than or equal to the total bit length
 | 
			
		||||
of the number being shifted. Negative valued bit shifts will result in a
 | 
			
		||||
runtime error.
 | 
			
		||||
 | 
			
		||||
The sign bit extension will not be preserved for this operation: vacant bits
 | 
			
		||||
on the left are filled with 0.
 | 
			
		||||
 | 
			
		||||
    math.bitShiftRight(<int>, <int>) -> <int>
 | 
			
		||||
    math.bitShiftRight(<uint>, <int>) -> <uint>
 | 
			
		||||
 | 
			
		||||
Examples
 | 
			
		||||
 | 
			
		||||
    math.bitShiftRight(1024, 2)    // returns 256
 | 
			
		||||
    math.bitShiftRight(1024u, 2)   // returns 256u
 | 
			
		||||
    math.bitShiftRight(1024u, 64)  // returns 0u
 | 
			
		||||
 | 
			
		||||
### Math.Ceil
 | 
			
		||||
 | 
			
		||||
Introduced at version: 1
 | 
			
		||||
 | 
			
		||||
Compute the ceiling of a double value.
 | 
			
		||||
 | 
			
		||||
    math.ceil(<double>) -> <double>
 | 
			
		||||
 | 
			
		||||
Examples:
 | 
			
		||||
 | 
			
		||||
    math.ceil(1.2)   // returns 2.0
 | 
			
		||||
    math.ceil(-1.2)  // returns -1.0
 | 
			
		||||
 | 
			
		||||
### Math.Floor
 | 
			
		||||
 | 
			
		||||
Introduced at version: 1
 | 
			
		||||
 | 
			
		||||
Compute the floor of a double value.
 | 
			
		||||
 | 
			
		||||
    math.floor(<double>) -> <double>
 | 
			
		||||
 | 
			
		||||
Examples:
 | 
			
		||||
 | 
			
		||||
    math.floor(1.2)   // returns 1.0
 | 
			
		||||
    math.floor(-1.2)  // returns -2.0
 | 
			
		||||
 | 
			
		||||
### Math.Round
 | 
			
		||||
 | 
			
		||||
Introduced at version: 1
 | 
			
		||||
 | 
			
		||||
Rounds the double value to the nearest whole number with ties rounding away
 | 
			
		||||
from zero, e.g. 1.5 -> 2.0, -1.5 -> -2.0.
 | 
			
		||||
 | 
			
		||||
    math.round(<double>) -> <double>
 | 
			
		||||
 | 
			
		||||
Examples:
 | 
			
		||||
 | 
			
		||||
    math.round(1.2)  // returns 1.0
 | 
			
		||||
    math.round(1.5)  // returns 2.0
 | 
			
		||||
    math.round(-1.5) // returns -2.0
 | 
			
		||||
 | 
			
		||||
### Math.Trunc
 | 
			
		||||
 | 
			
		||||
Introduced at version: 1
 | 
			
		||||
 | 
			
		||||
Truncates the fractional portion of the double value.
 | 
			
		||||
 | 
			
		||||
    math.trunc(<double>) -> <double>
 | 
			
		||||
 | 
			
		||||
Examples:
 | 
			
		||||
 | 
			
		||||
    math.trunc(-1.3)  // returns -1.0
 | 
			
		||||
    math.trunc(1.3)   // returns 1.0
 | 
			
		||||
 | 
			
		||||
### Math.Abs
 | 
			
		||||
 | 
			
		||||
Introduced at version: 1
 | 
			
		||||
 | 
			
		||||
Returns the absolute value of the numeric type provided as input. If the
 | 
			
		||||
value is NaN, the output is NaN. If the input is int64 min, the function
 | 
			
		||||
will result in an overflow error.
 | 
			
		||||
 | 
			
		||||
    math.abs(<double>) -> <double>
 | 
			
		||||
    math.abs(<int>) -> <int>
 | 
			
		||||
    math.abs(<uint>) -> <uint>
 | 
			
		||||
 | 
			
		||||
Examples:
 | 
			
		||||
 | 
			
		||||
    math.abs(-1)  // returns 1
 | 
			
		||||
    math.abs(1)   // returns 1
 | 
			
		||||
    math.abs(-9223372036854775808) // overlflow error
 | 
			
		||||
 | 
			
		||||
### Math.Sign
 | 
			
		||||
 | 
			
		||||
Introduced at version: 1
 | 
			
		||||
 | 
			
		||||
Returns the sign of the numeric type, either -1, 0, 1 as an int, double, or
 | 
			
		||||
uint depending on the overload. For floating point values, if NaN is
 | 
			
		||||
provided as input, the output is also NaN. The implementation does not
 | 
			
		||||
differentiate between positive and negative zero.
 | 
			
		||||
 | 
			
		||||
    math.sign(<double>) -> <double>
 | 
			
		||||
    math.sign(<int>) -> <int>
 | 
			
		||||
    math.sign(<uint>) -> <uint>
 | 
			
		||||
 | 
			
		||||
Examples:
 | 
			
		||||
 | 
			
		||||
    math.sign(-42) // returns -1
 | 
			
		||||
    math.sign(0)   // returns 0
 | 
			
		||||
    math.sign(42)  // returns 1
 | 
			
		||||
 | 
			
		||||
### Math.IsInf
 | 
			
		||||
 | 
			
		||||
Introduced at version: 1
 | 
			
		||||
 | 
			
		||||
Returns true if the input double value is -Inf or +Inf.
 | 
			
		||||
 | 
			
		||||
    math.isInf(<double>) -> <bool>
 | 
			
		||||
 | 
			
		||||
Examples:
 | 
			
		||||
 | 
			
		||||
    math.isInf(1.0/0.0)  // returns true
 | 
			
		||||
    math.isInf(1.2)      // returns false
 | 
			
		||||
 | 
			
		||||
### Math.IsNaN
 | 
			
		||||
 | 
			
		||||
Introduced at version: 1
 | 
			
		||||
 | 
			
		||||
Returns true if the input double value is NaN, false otherwise.
 | 
			
		||||
 | 
			
		||||
    math.isNaN(<double>) -> <bool>
 | 
			
		||||
 | 
			
		||||
Examples:
 | 
			
		||||
 | 
			
		||||
    math.isNaN(0.0/0.0)  // returns true
 | 
			
		||||
    math.isNaN(1.2)      // returns false
 | 
			
		||||
 | 
			
		||||
### Math.IsFinite
 | 
			
		||||
 | 
			
		||||
Introduced at version: 1
 | 
			
		||||
 | 
			
		||||
Returns true if the value is a finite number. Equivalent in behavior to:
 | 
			
		||||
!math.isNaN(double) && !math.isInf(double)
 | 
			
		||||
 | 
			
		||||
    math.isFinite(<double>) -> <bool>
 | 
			
		||||
 | 
			
		||||
Examples:
 | 
			
		||||
 | 
			
		||||
    math.isFinite(0.0/0.0)  // returns false
 | 
			
		||||
    math.isFinite(1.2)      // returns true
 | 
			
		||||
 | 
			
		||||
## Protos
 | 
			
		||||
 | 
			
		||||
Protos configure extended macros and functions for proto manipulation.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/github.com/google/cel-go/ext/formatting.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/google/cel-go/ext/formatting.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -484,7 +484,7 @@ func matchConstantFormatStringWithListLiteralArgs(a *ast.AST) ast.ExprMatcher {
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		formatString := call.Target()
 | 
			
		||||
		if formatString.Kind() != ast.LiteralKind && formatString.AsLiteral().Type() != cel.StringType {
 | 
			
		||||
		if formatString.Kind() != ast.LiteralKind || formatString.AsLiteral().Type() != cel.StringType {
 | 
			
		||||
			return false
 | 
			
		||||
		}
 | 
			
		||||
		args := call.Args()
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										547
									
								
								vendor/github.com/google/cel-go/ext/math.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										547
									
								
								vendor/github.com/google/cel-go/ext/math.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -16,6 +16,7 @@ package ext
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"math"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/google/cel-go/cel"
 | 
			
		||||
@@ -86,28 +87,306 @@ import (
 | 
			
		||||
//	math.least('string') // parse error
 | 
			
		||||
//	math.least(a, b)     // check-time error if a or b is non-numeric
 | 
			
		||||
//	math.least(dyn('string')) // runtime error
 | 
			
		||||
//
 | 
			
		||||
// # Math.BitOr
 | 
			
		||||
//
 | 
			
		||||
// Introduced at version: 1
 | 
			
		||||
//
 | 
			
		||||
// Performs a bitwise-OR operation over two int or uint values.
 | 
			
		||||
//
 | 
			
		||||
//	math.bitOr(<int>, <int>) -> <int>
 | 
			
		||||
//	math.bitOr(<uint>, <uint>) -> <uint>
 | 
			
		||||
//
 | 
			
		||||
// Examples:
 | 
			
		||||
//
 | 
			
		||||
//	math.bitOr(1u, 2u)    // returns 3u
 | 
			
		||||
//	math.bitOr(-2, -4)    // returns -2
 | 
			
		||||
//
 | 
			
		||||
// # Math.BitAnd
 | 
			
		||||
//
 | 
			
		||||
// Introduced at version: 1
 | 
			
		||||
//
 | 
			
		||||
// Performs a bitwise-AND operation over two int or uint values.
 | 
			
		||||
//
 | 
			
		||||
//	math.bitAnd(<int>, <int>) -> <int>
 | 
			
		||||
//	math.bitAnd(<uint>, <uint>) -> <uint>
 | 
			
		||||
//
 | 
			
		||||
// Examples:
 | 
			
		||||
//
 | 
			
		||||
//	math.bitAnd(3u, 2u)   // return 2u
 | 
			
		||||
//	math.bitAnd(3, 5)     // returns 3
 | 
			
		||||
//	math.bitAnd(-3, -5)   // returns -7
 | 
			
		||||
//
 | 
			
		||||
// # Math.BitXor
 | 
			
		||||
//
 | 
			
		||||
// Introduced at version: 1
 | 
			
		||||
//
 | 
			
		||||
//	math.bitXor(<int>, <int>) -> <int>
 | 
			
		||||
//	math.bitXor(<uint>, <uint>) -> <uint>
 | 
			
		||||
//
 | 
			
		||||
// Performs a bitwise-XOR operation over two int or uint values.
 | 
			
		||||
//
 | 
			
		||||
// Examples:
 | 
			
		||||
//
 | 
			
		||||
//	math.bitXor(3u, 5u) // returns 6u
 | 
			
		||||
//	math.bitXor(1, 3)   // returns 2
 | 
			
		||||
//
 | 
			
		||||
// # Math.BitNot
 | 
			
		||||
//
 | 
			
		||||
// Introduced at version: 1
 | 
			
		||||
//
 | 
			
		||||
// Function which accepts a single int or uint and performs a bitwise-NOT
 | 
			
		||||
// ones-complement of the given binary value.
 | 
			
		||||
//
 | 
			
		||||
//	math.bitNot(<int>) -> <int>
 | 
			
		||||
//	math.bitNot(<uint>) -> <uint>
 | 
			
		||||
//
 | 
			
		||||
// Examples
 | 
			
		||||
//
 | 
			
		||||
//	math.bitNot(1)  // returns -1
 | 
			
		||||
//	math.bitNot(-1) // return 0
 | 
			
		||||
//	math.bitNot(0u) // returns 18446744073709551615u
 | 
			
		||||
//
 | 
			
		||||
// # Math.BitShiftLeft
 | 
			
		||||
//
 | 
			
		||||
// Introduced at version: 1
 | 
			
		||||
//
 | 
			
		||||
// Perform a left shift of bits on the first parameter, by the amount of bits
 | 
			
		||||
// specified in the second parameter. The first parameter is either a uint or
 | 
			
		||||
// an int. The second parameter must be an int.
 | 
			
		||||
//
 | 
			
		||||
// When the second parameter is 64 or greater, 0 will be always be returned
 | 
			
		||||
// since the number of bits shifted is greater than or equal to the total bit
 | 
			
		||||
// length of the number being shifted. Negative valued bit shifts will result
 | 
			
		||||
// in a runtime error.
 | 
			
		||||
//
 | 
			
		||||
//	math.bitShiftLeft(<int>, <int>) -> <int>
 | 
			
		||||
//	math.bitShiftLeft(<uint>, <int>) -> <uint>
 | 
			
		||||
//
 | 
			
		||||
// Examples
 | 
			
		||||
//
 | 
			
		||||
//	math.bitShiftLeft(1, 2)    // returns 4
 | 
			
		||||
//	math.bitShiftLeft(-1, 2)   // returns -4
 | 
			
		||||
//	math.bitShiftLeft(1u, 2)   // return 4u
 | 
			
		||||
//	math.bitShiftLeft(1u, 200) // returns 0u
 | 
			
		||||
//
 | 
			
		||||
// # Math.BitShiftRight
 | 
			
		||||
//
 | 
			
		||||
// Introduced at version: 1
 | 
			
		||||
//
 | 
			
		||||
// Perform a right shift of bits on the first parameter, by the amount of bits
 | 
			
		||||
// specified in the second parameter. The first parameter is either a uint or
 | 
			
		||||
// an int. The second parameter must be an int.
 | 
			
		||||
//
 | 
			
		||||
// When the second parameter is 64 or greater, 0 will always be returned since
 | 
			
		||||
// the number of bits shifted is greater than or equal to the total bit length
 | 
			
		||||
// of the number being shifted. Negative valued bit shifts will result in a
 | 
			
		||||
// runtime error.
 | 
			
		||||
//
 | 
			
		||||
// The sign bit extension will not be preserved for this operation: vacant bits
 | 
			
		||||
// on the left are filled with 0.
 | 
			
		||||
//
 | 
			
		||||
//	math.bitShiftRight(<int>, <int>) -> <int>
 | 
			
		||||
//	math.bitShiftRight(<uint>, <int>) -> <uint>
 | 
			
		||||
//
 | 
			
		||||
// Examples
 | 
			
		||||
//
 | 
			
		||||
//	math.bitShiftRight(1024, 2)    // returns 256
 | 
			
		||||
//	math.bitShiftRight(1024u, 2)   // returns 256u
 | 
			
		||||
//	math.bitShiftRight(1024u, 64)  // returns 0u
 | 
			
		||||
//
 | 
			
		||||
// # Math.Ceil
 | 
			
		||||
//
 | 
			
		||||
// Introduced at version: 1
 | 
			
		||||
//
 | 
			
		||||
// Compute the ceiling of a double value.
 | 
			
		||||
//
 | 
			
		||||
//	math.ceil(<double>) -> <double>
 | 
			
		||||
//
 | 
			
		||||
// Examples:
 | 
			
		||||
//
 | 
			
		||||
//	math.ceil(1.2)   // returns 2.0
 | 
			
		||||
//	math.ceil(-1.2)  // returns -1.0
 | 
			
		||||
//
 | 
			
		||||
// # Math.Floor
 | 
			
		||||
//
 | 
			
		||||
// Introduced at version: 1
 | 
			
		||||
//
 | 
			
		||||
// Compute the floor of a double value.
 | 
			
		||||
//
 | 
			
		||||
//	math.floor(<double>) -> <double>
 | 
			
		||||
//
 | 
			
		||||
// Examples:
 | 
			
		||||
//
 | 
			
		||||
//	math.floor(1.2)   // returns 1.0
 | 
			
		||||
//	math.floor(-1.2)  // returns -2.0
 | 
			
		||||
//
 | 
			
		||||
// # Math.Round
 | 
			
		||||
//
 | 
			
		||||
// Introduced at version: 1
 | 
			
		||||
//
 | 
			
		||||
// Rounds the double value to the nearest whole number with ties rounding away
 | 
			
		||||
// from zero, e.g. 1.5 -> 2.0, -1.5 -> -2.0.
 | 
			
		||||
//
 | 
			
		||||
//	math.round(<double>) -> <double>
 | 
			
		||||
//
 | 
			
		||||
// Examples:
 | 
			
		||||
//
 | 
			
		||||
//	math.round(1.2)  // returns 1.0
 | 
			
		||||
//	math.round(1.5)  // returns 2.0
 | 
			
		||||
//	math.round(-1.5) // returns -2.0
 | 
			
		||||
//
 | 
			
		||||
// # Math.Trunc
 | 
			
		||||
//
 | 
			
		||||
// Introduced at version: 1
 | 
			
		||||
//
 | 
			
		||||
// Truncates the fractional portion of the double value.
 | 
			
		||||
//
 | 
			
		||||
//	math.trunc(<double>) -> <double>
 | 
			
		||||
//
 | 
			
		||||
// Examples:
 | 
			
		||||
//
 | 
			
		||||
//	math.trunc(-1.3)  // returns -1.0
 | 
			
		||||
//	math.trunc(1.3)   // returns 1.0
 | 
			
		||||
//
 | 
			
		||||
// # Math.Abs
 | 
			
		||||
//
 | 
			
		||||
// Introduced at version: 1
 | 
			
		||||
//
 | 
			
		||||
// Returns the absolute value of the numeric type provided as input. If the
 | 
			
		||||
// value is NaN, the output is NaN. If the input is int64 min, the function
 | 
			
		||||
// will result in an overflow error.
 | 
			
		||||
//
 | 
			
		||||
//	math.abs(<double>) -> <double>
 | 
			
		||||
//	math.abs(<int>) -> <int>
 | 
			
		||||
//	math.abs(<uint>) -> <uint>
 | 
			
		||||
//
 | 
			
		||||
// Examples:
 | 
			
		||||
//
 | 
			
		||||
//	math.abs(-1)  // returns 1
 | 
			
		||||
//	math.abs(1)   // returns 1
 | 
			
		||||
//	math.abs(-9223372036854775808) // overflow error
 | 
			
		||||
//
 | 
			
		||||
// # Math.Sign
 | 
			
		||||
//
 | 
			
		||||
// Introduced at version: 1
 | 
			
		||||
//
 | 
			
		||||
// Returns the sign of the numeric type, either -1, 0, 1 as an int, double, or
 | 
			
		||||
// uint depending on the overload. For floating point values, if NaN is
 | 
			
		||||
// provided as input, the output is also NaN. The implementation does not
 | 
			
		||||
// differentiate between positive and negative zero.
 | 
			
		||||
//
 | 
			
		||||
//	math.sign(<double>) -> <double>
 | 
			
		||||
//	math.sign(<int>) -> <int>
 | 
			
		||||
//	math.sign(<uint>) -> <uint>
 | 
			
		||||
//
 | 
			
		||||
// Examples:
 | 
			
		||||
//
 | 
			
		||||
//	math.sign(-42) // returns -1
 | 
			
		||||
//	math.sign(0)   // returns 0
 | 
			
		||||
//	math.sign(42)  // returns 1
 | 
			
		||||
//
 | 
			
		||||
// # Math.IsInf
 | 
			
		||||
//
 | 
			
		||||
// Introduced at version: 1
 | 
			
		||||
//
 | 
			
		||||
// Returns true if the input double value is -Inf or +Inf.
 | 
			
		||||
//
 | 
			
		||||
//	math.isInf(<double>) -> <bool>
 | 
			
		||||
//
 | 
			
		||||
// Examples:
 | 
			
		||||
//
 | 
			
		||||
//	math.isInf(1.0/0.0)  // returns true
 | 
			
		||||
//	math.isInf(1.2)      // returns false
 | 
			
		||||
//
 | 
			
		||||
// # Math.IsNaN
 | 
			
		||||
//
 | 
			
		||||
// Introduced at version: 1
 | 
			
		||||
//
 | 
			
		||||
// Returns true if the input double value is NaN, false otherwise.
 | 
			
		||||
//
 | 
			
		||||
//	math.isNaN(<double>) -> <bool>
 | 
			
		||||
//
 | 
			
		||||
// Examples:
 | 
			
		||||
//
 | 
			
		||||
//	math.isNaN(0.0/0.0)  // returns true
 | 
			
		||||
//	math.isNaN(1.2)      // returns false
 | 
			
		||||
//
 | 
			
		||||
// # Math.IsFinite
 | 
			
		||||
//
 | 
			
		||||
// Introduced at version: 1
 | 
			
		||||
//
 | 
			
		||||
// Returns true if the value is a finite number. Equivalent in behavior to:
 | 
			
		||||
// !math.isNaN(double) && !math.isInf(double)
 | 
			
		||||
//
 | 
			
		||||
//	math.isFinite(<double>) -> <bool>
 | 
			
		||||
//
 | 
			
		||||
// Examples:
 | 
			
		||||
//
 | 
			
		||||
//	math.isFinite(0.0/0.0)  // returns false
 | 
			
		||||
//	math.isFinite(1.2)      // returns true
 | 
			
		||||
func Math() cel.EnvOption {
 | 
			
		||||
	return cel.Lib(mathLib{})
 | 
			
		||||
	return cel.Lib(&mathLib{version: math.MaxUint32})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	mathNamespace = "math"
 | 
			
		||||
	leastMacro    = "least"
 | 
			
		||||
	greatestMacro = "greatest"
 | 
			
		||||
 | 
			
		||||
	// Min-max functions
 | 
			
		||||
	minFunc = "math.@min"
 | 
			
		||||
	maxFunc = "math.@max"
 | 
			
		||||
 | 
			
		||||
	// Rounding functions
 | 
			
		||||
	ceilFunc  = "math.ceil"
 | 
			
		||||
	floorFunc = "math.floor"
 | 
			
		||||
	roundFunc = "math.round"
 | 
			
		||||
	truncFunc = "math.trunc"
 | 
			
		||||
 | 
			
		||||
	// Floating point helper functions
 | 
			
		||||
	isInfFunc    = "math.isInf"
 | 
			
		||||
	isNanFunc    = "math.isNaN"
 | 
			
		||||
	isFiniteFunc = "math.isFinite"
 | 
			
		||||
 | 
			
		||||
	// Signedness functions
 | 
			
		||||
	absFunc  = "math.abs"
 | 
			
		||||
	signFunc = "math.sign"
 | 
			
		||||
 | 
			
		||||
	// Bitwise functions
 | 
			
		||||
	bitAndFunc        = "math.bitAnd"
 | 
			
		||||
	bitOrFunc         = "math.bitOr"
 | 
			
		||||
	bitXorFunc        = "math.bitXor"
 | 
			
		||||
	bitNotFunc        = "math.bitNot"
 | 
			
		||||
	bitShiftLeftFunc  = "math.bitShiftLeft"
 | 
			
		||||
	bitShiftRightFunc = "math.bitShiftRight"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type mathLib struct{}
 | 
			
		||||
var (
 | 
			
		||||
	errIntOverflow = types.NewErr("integer overflow")
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type MathOption func(*mathLib) *mathLib
 | 
			
		||||
 | 
			
		||||
func MathVersion(version uint32) MathOption {
 | 
			
		||||
	return func(lib *mathLib) *mathLib {
 | 
			
		||||
		lib.version = version
 | 
			
		||||
		return lib
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type mathLib struct {
 | 
			
		||||
	version uint32
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// LibraryName implements the SingletonLibrary interface method.
 | 
			
		||||
func (mathLib) LibraryName() string {
 | 
			
		||||
func (*mathLib) LibraryName() string {
 | 
			
		||||
	return "cel.lib.ext.math"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CompileOptions implements the Library interface method.
 | 
			
		||||
func (mathLib) CompileOptions() []cel.EnvOption {
 | 
			
		||||
	return []cel.EnvOption{
 | 
			
		||||
func (lib *mathLib) CompileOptions() []cel.EnvOption {
 | 
			
		||||
	opts := []cel.EnvOption{
 | 
			
		||||
		cel.Macros(
 | 
			
		||||
			// math.least(num, ...)
 | 
			
		||||
			cel.ReceiverVarArgMacro(leastMacro, mathLeast),
 | 
			
		||||
@@ -179,10 +458,95 @@ func (mathLib) CompileOptions() []cel.EnvOption {
 | 
			
		||||
				cel.UnaryBinding(maxList)),
 | 
			
		||||
		),
 | 
			
		||||
	}
 | 
			
		||||
	if lib.version >= 1 {
 | 
			
		||||
		opts = append(opts,
 | 
			
		||||
			// Rounding function declarations
 | 
			
		||||
			cel.Function(ceilFunc,
 | 
			
		||||
				cel.Overload("math_ceil_double", []*cel.Type{cel.DoubleType}, cel.DoubleType,
 | 
			
		||||
					cel.UnaryBinding(ceil))),
 | 
			
		||||
			cel.Function(floorFunc,
 | 
			
		||||
				cel.Overload("math_floor_double", []*cel.Type{cel.DoubleType}, cel.DoubleType,
 | 
			
		||||
					cel.UnaryBinding(floor))),
 | 
			
		||||
			cel.Function(roundFunc,
 | 
			
		||||
				cel.Overload("math_round_double", []*cel.Type{cel.DoubleType}, cel.DoubleType,
 | 
			
		||||
					cel.UnaryBinding(round))),
 | 
			
		||||
			cel.Function(truncFunc,
 | 
			
		||||
				cel.Overload("math_trunc_double", []*cel.Type{cel.DoubleType}, cel.DoubleType,
 | 
			
		||||
					cel.UnaryBinding(trunc))),
 | 
			
		||||
 | 
			
		||||
			// Floating point helpers
 | 
			
		||||
			cel.Function(isInfFunc,
 | 
			
		||||
				cel.Overload("math_isInf_double", []*cel.Type{cel.DoubleType}, cel.BoolType,
 | 
			
		||||
					cel.UnaryBinding(isInf))),
 | 
			
		||||
			cel.Function(isNanFunc,
 | 
			
		||||
				cel.Overload("math_isNaN_double", []*cel.Type{cel.DoubleType}, cel.BoolType,
 | 
			
		||||
					cel.UnaryBinding(isNaN))),
 | 
			
		||||
			cel.Function(isFiniteFunc,
 | 
			
		||||
				cel.Overload("math_isFinite_double", []*cel.Type{cel.DoubleType}, cel.BoolType,
 | 
			
		||||
					cel.UnaryBinding(isFinite))),
 | 
			
		||||
 | 
			
		||||
			// Signedness functions
 | 
			
		||||
			cel.Function(absFunc,
 | 
			
		||||
				cel.Overload("math_abs_double", []*cel.Type{cel.DoubleType}, cel.DoubleType,
 | 
			
		||||
					cel.UnaryBinding(absDouble)),
 | 
			
		||||
				cel.Overload("math_abs_int", []*cel.Type{cel.IntType}, cel.IntType,
 | 
			
		||||
					cel.UnaryBinding(absInt)),
 | 
			
		||||
				cel.Overload("math_abs_uint", []*cel.Type{cel.UintType}, cel.UintType,
 | 
			
		||||
					cel.UnaryBinding(identity)),
 | 
			
		||||
			),
 | 
			
		||||
			cel.Function(signFunc,
 | 
			
		||||
				cel.Overload("math_sign_double", []*cel.Type{cel.DoubleType}, cel.DoubleType,
 | 
			
		||||
					cel.UnaryBinding(sign)),
 | 
			
		||||
				cel.Overload("math_sign_int", []*cel.Type{cel.IntType}, cel.IntType,
 | 
			
		||||
					cel.UnaryBinding(sign)),
 | 
			
		||||
				cel.Overload("math_sign_uint", []*cel.Type{cel.UintType}, cel.UintType,
 | 
			
		||||
					cel.UnaryBinding(sign)),
 | 
			
		||||
			),
 | 
			
		||||
 | 
			
		||||
			// Bitwise operator declarations
 | 
			
		||||
			cel.Function(bitAndFunc,
 | 
			
		||||
				cel.Overload("math_bitAnd_int_int", []*cel.Type{cel.IntType, cel.IntType}, cel.IntType,
 | 
			
		||||
					cel.BinaryBinding(bitAndPairInt)),
 | 
			
		||||
				cel.Overload("math_bitAnd_uint_uint", []*cel.Type{cel.UintType, cel.UintType}, cel.UintType,
 | 
			
		||||
					cel.BinaryBinding(bitAndPairUint)),
 | 
			
		||||
			),
 | 
			
		||||
			cel.Function(bitOrFunc,
 | 
			
		||||
				cel.Overload("math_bitOr_int_int", []*cel.Type{cel.IntType, cel.IntType}, cel.IntType,
 | 
			
		||||
					cel.BinaryBinding(bitOrPairInt)),
 | 
			
		||||
				cel.Overload("math_bitOr_uint_uint", []*cel.Type{cel.UintType, cel.UintType}, cel.UintType,
 | 
			
		||||
					cel.BinaryBinding(bitOrPairUint)),
 | 
			
		||||
			),
 | 
			
		||||
			cel.Function(bitXorFunc,
 | 
			
		||||
				cel.Overload("math_bitXor_int_int", []*cel.Type{cel.IntType, cel.IntType}, cel.IntType,
 | 
			
		||||
					cel.BinaryBinding(bitXorPairInt)),
 | 
			
		||||
				cel.Overload("math_bitXor_uint_uint", []*cel.Type{cel.UintType, cel.UintType}, cel.UintType,
 | 
			
		||||
					cel.BinaryBinding(bitXorPairUint)),
 | 
			
		||||
			),
 | 
			
		||||
			cel.Function(bitNotFunc,
 | 
			
		||||
				cel.Overload("math_bitNot_int_int", []*cel.Type{cel.IntType}, cel.IntType,
 | 
			
		||||
					cel.UnaryBinding(bitNotInt)),
 | 
			
		||||
				cel.Overload("math_bitNot_uint_uint", []*cel.Type{cel.UintType}, cel.UintType,
 | 
			
		||||
					cel.UnaryBinding(bitNotUint)),
 | 
			
		||||
			),
 | 
			
		||||
			cel.Function(bitShiftLeftFunc,
 | 
			
		||||
				cel.Overload("math_bitShiftLeft_int_int", []*cel.Type{cel.IntType, cel.IntType}, cel.IntType,
 | 
			
		||||
					cel.BinaryBinding(bitShiftLeftIntInt)),
 | 
			
		||||
				cel.Overload("math_bitShiftLeft_uint_int", []*cel.Type{cel.UintType, cel.IntType}, cel.UintType,
 | 
			
		||||
					cel.BinaryBinding(bitShiftLeftUintInt)),
 | 
			
		||||
			),
 | 
			
		||||
			cel.Function(bitShiftRightFunc,
 | 
			
		||||
				cel.Overload("math_bitShiftRight_int_int", []*cel.Type{cel.IntType, cel.IntType}, cel.IntType,
 | 
			
		||||
					cel.BinaryBinding(bitShiftRightIntInt)),
 | 
			
		||||
				cel.Overload("math_bitShiftRight_uint_int", []*cel.Type{cel.UintType, cel.IntType}, cel.UintType,
 | 
			
		||||
					cel.BinaryBinding(bitShiftRightUintInt)),
 | 
			
		||||
			),
 | 
			
		||||
		)
 | 
			
		||||
	}
 | 
			
		||||
	return opts
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ProgramOptions implements the Library interface method.
 | 
			
		||||
func (mathLib) ProgramOptions() []cel.ProgramOption {
 | 
			
		||||
func (*mathLib) ProgramOptions() []cel.ProgramOption {
 | 
			
		||||
	return []cel.ProgramOption{}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -194,7 +558,7 @@ func mathLeast(meh cel.MacroExprFactory, target ast.Expr, args []ast.Expr) (ast.
 | 
			
		||||
	case 0:
 | 
			
		||||
		return nil, meh.NewError(target.ID(), "math.least() requires at least one argument")
 | 
			
		||||
	case 1:
 | 
			
		||||
		if isListLiteralWithValidArgs(args[0]) || isValidArgType(args[0]) {
 | 
			
		||||
		if isListLiteralWithNumericArgs(args[0]) || isNumericArgType(args[0]) {
 | 
			
		||||
			return meh.NewCall(minFunc, args[0]), nil
 | 
			
		||||
		}
 | 
			
		||||
		return nil, meh.NewError(args[0].ID(), "math.least() invalid single argument value")
 | 
			
		||||
@@ -221,7 +585,7 @@ func mathGreatest(mef cel.MacroExprFactory, target ast.Expr, args []ast.Expr) (a
 | 
			
		||||
	case 0:
 | 
			
		||||
		return nil, mef.NewError(target.ID(), "math.greatest() requires at least one argument")
 | 
			
		||||
	case 1:
 | 
			
		||||
		if isListLiteralWithValidArgs(args[0]) || isValidArgType(args[0]) {
 | 
			
		||||
		if isListLiteralWithNumericArgs(args[0]) || isNumericArgType(args[0]) {
 | 
			
		||||
			return mef.NewCall(maxFunc, args[0]), nil
 | 
			
		||||
		}
 | 
			
		||||
		return nil, mef.NewError(args[0].ID(), "math.greatest() invalid single argument value")
 | 
			
		||||
@@ -244,6 +608,165 @@ func identity(val ref.Val) ref.Val {
 | 
			
		||||
	return val
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func ceil(val ref.Val) ref.Val {
 | 
			
		||||
	v := val.(types.Double)
 | 
			
		||||
	return types.Double(math.Ceil(float64(v)))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func floor(val ref.Val) ref.Val {
 | 
			
		||||
	v := val.(types.Double)
 | 
			
		||||
	return types.Double(math.Floor(float64(v)))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func round(val ref.Val) ref.Val {
 | 
			
		||||
	v := val.(types.Double)
 | 
			
		||||
	return types.Double(math.Round(float64(v)))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func trunc(val ref.Val) ref.Val {
 | 
			
		||||
	v := val.(types.Double)
 | 
			
		||||
	return types.Double(math.Trunc(float64(v)))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func isInf(val ref.Val) ref.Val {
 | 
			
		||||
	v := val.(types.Double)
 | 
			
		||||
	return types.Bool(math.IsInf(float64(v), 0))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func isFinite(val ref.Val) ref.Val {
 | 
			
		||||
	v := float64(val.(types.Double))
 | 
			
		||||
	return types.Bool(!math.IsInf(v, 0) && !math.IsNaN(v))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func isNaN(val ref.Val) ref.Val {
 | 
			
		||||
	v := val.(types.Double)
 | 
			
		||||
	return types.Bool(math.IsNaN(float64(v)))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func absDouble(val ref.Val) ref.Val {
 | 
			
		||||
	v := float64(val.(types.Double))
 | 
			
		||||
	return types.Double(math.Abs(v))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func absInt(val ref.Val) ref.Val {
 | 
			
		||||
	v := int64(val.(types.Int))
 | 
			
		||||
	if v == math.MinInt64 {
 | 
			
		||||
		return errIntOverflow
 | 
			
		||||
	}
 | 
			
		||||
	if v >= 0 {
 | 
			
		||||
		return val
 | 
			
		||||
	}
 | 
			
		||||
	return -types.Int(v)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func sign(val ref.Val) ref.Val {
 | 
			
		||||
	switch v := val.(type) {
 | 
			
		||||
	case types.Double:
 | 
			
		||||
		if isNaN(v) == types.True {
 | 
			
		||||
			return v
 | 
			
		||||
		}
 | 
			
		||||
		zero := types.Double(0)
 | 
			
		||||
		if v > zero {
 | 
			
		||||
			return types.Double(1)
 | 
			
		||||
		}
 | 
			
		||||
		if v < zero {
 | 
			
		||||
			return types.Double(-1)
 | 
			
		||||
		}
 | 
			
		||||
		return zero
 | 
			
		||||
	case types.Int:
 | 
			
		||||
		return v.Compare(types.IntZero)
 | 
			
		||||
	case types.Uint:
 | 
			
		||||
		if v == types.Uint(0) {
 | 
			
		||||
			return types.Uint(0)
 | 
			
		||||
		}
 | 
			
		||||
		return types.Uint(1)
 | 
			
		||||
	default:
 | 
			
		||||
		return maybeSuffixError(val, "math.sign")
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func bitAndPairInt(first, second ref.Val) ref.Val {
 | 
			
		||||
	l := first.(types.Int)
 | 
			
		||||
	r := second.(types.Int)
 | 
			
		||||
	return l & r
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func bitAndPairUint(first, second ref.Val) ref.Val {
 | 
			
		||||
	l := first.(types.Uint)
 | 
			
		||||
	r := second.(types.Uint)
 | 
			
		||||
	return l & r
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func bitOrPairInt(first, second ref.Val) ref.Val {
 | 
			
		||||
	l := first.(types.Int)
 | 
			
		||||
	r := second.(types.Int)
 | 
			
		||||
	return l | r
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func bitOrPairUint(first, second ref.Val) ref.Val {
 | 
			
		||||
	l := first.(types.Uint)
 | 
			
		||||
	r := second.(types.Uint)
 | 
			
		||||
	return l | r
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func bitXorPairInt(first, second ref.Val) ref.Val {
 | 
			
		||||
	l := first.(types.Int)
 | 
			
		||||
	r := second.(types.Int)
 | 
			
		||||
	return l ^ r
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func bitXorPairUint(first, second ref.Val) ref.Val {
 | 
			
		||||
	l := first.(types.Uint)
 | 
			
		||||
	r := second.(types.Uint)
 | 
			
		||||
	return l ^ r
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func bitNotInt(value ref.Val) ref.Val {
 | 
			
		||||
	v := value.(types.Int)
 | 
			
		||||
	return ^v
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func bitNotUint(value ref.Val) ref.Val {
 | 
			
		||||
	v := value.(types.Uint)
 | 
			
		||||
	return ^v
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func bitShiftLeftIntInt(value, bits ref.Val) ref.Val {
 | 
			
		||||
	v := value.(types.Int)
 | 
			
		||||
	bs := bits.(types.Int)
 | 
			
		||||
	if bs < types.IntZero {
 | 
			
		||||
		return types.NewErr("math.bitShiftLeft() negative offset: %d", bs)
 | 
			
		||||
	}
 | 
			
		||||
	return v << bs
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func bitShiftLeftUintInt(value, bits ref.Val) ref.Val {
 | 
			
		||||
	v := value.(types.Uint)
 | 
			
		||||
	bs := bits.(types.Int)
 | 
			
		||||
	if bs < types.IntZero {
 | 
			
		||||
		return types.NewErr("math.bitShiftLeft() negative offset: %d", bs)
 | 
			
		||||
	}
 | 
			
		||||
	return v << bs
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func bitShiftRightIntInt(value, bits ref.Val) ref.Val {
 | 
			
		||||
	v := value.(types.Int)
 | 
			
		||||
	bs := bits.(types.Int)
 | 
			
		||||
	if bs < types.IntZero {
 | 
			
		||||
		return types.NewErr("math.bitShiftRight() negative offset: %d", bs)
 | 
			
		||||
	}
 | 
			
		||||
	return types.Int(types.Uint(v) >> bs)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func bitShiftRightUintInt(value, bits ref.Val) ref.Val {
 | 
			
		||||
	v := value.(types.Uint)
 | 
			
		||||
	bs := bits.(types.Int)
 | 
			
		||||
	if bs < types.IntZero {
 | 
			
		||||
		return types.NewErr("math.bitShiftRight() negative offset: %d", bs)
 | 
			
		||||
	}
 | 
			
		||||
	return v >> bs
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func minPair(first, second ref.Val) ref.Val {
 | 
			
		||||
	cmp, ok := first.(traits.Comparer)
 | 
			
		||||
	if !ok {
 | 
			
		||||
@@ -321,13 +844,13 @@ func checkInvalidArgs(meh cel.MacroExprFactory, funcName string, args []ast.Expr
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func checkInvalidArgLiteral(funcName string, arg ast.Expr) error {
 | 
			
		||||
	if !isValidArgType(arg) {
 | 
			
		||||
	if !isNumericArgType(arg) {
 | 
			
		||||
		return fmt.Errorf("%s simple literal arguments must be numeric", funcName)
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func isValidArgType(arg ast.Expr) bool {
 | 
			
		||||
func isNumericArgType(arg ast.Expr) bool {
 | 
			
		||||
	switch arg.Kind() {
 | 
			
		||||
	case ast.LiteralKind:
 | 
			
		||||
		c := ref.Val(arg.AsLiteral())
 | 
			
		||||
@@ -344,7 +867,7 @@ func isValidArgType(arg ast.Expr) bool {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func isListLiteralWithValidArgs(arg ast.Expr) bool {
 | 
			
		||||
func isListLiteralWithNumericArgs(arg ast.Expr) bool {
 | 
			
		||||
	switch arg.Kind() {
 | 
			
		||||
	case ast.ListKind:
 | 
			
		||||
		list := arg.AsList()
 | 
			
		||||
@@ -352,7 +875,7 @@ func isListLiteralWithValidArgs(arg ast.Expr) bool {
 | 
			
		||||
			return false
 | 
			
		||||
		}
 | 
			
		||||
		for _, e := range list.Elements() {
 | 
			
		||||
			if !isValidArgType(e) {
 | 
			
		||||
			if !isNumericArgType(e) {
 | 
			
		||||
				return false
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										174
									
								
								vendor/github.com/google/cel-go/ext/native.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										174
									
								
								vendor/github.com/google/cel-go/ext/native.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -15,6 +15,7 @@
 | 
			
		||||
package ext
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"reflect"
 | 
			
		||||
	"strings"
 | 
			
		||||
@@ -77,12 +78,45 @@ var (
 | 
			
		||||
// same advice holds if you are using custom type adapters and type providers. The native type
 | 
			
		||||
// provider composes over whichever type adapter and provider is configured in the cel.Env at
 | 
			
		||||
// the time that it is invoked.
 | 
			
		||||
func NativeTypes(refTypes ...any) cel.EnvOption {
 | 
			
		||||
//
 | 
			
		||||
// There is also the possibility to rename the fields of native structs by setting the `cel` tag
 | 
			
		||||
// for fields you want to override. In order to enable this feature, pass in the `EnableStructTag`
 | 
			
		||||
// option. Here is an example to see it in action:
 | 
			
		||||
//
 | 
			
		||||
// ```go
 | 
			
		||||
// package identity
 | 
			
		||||
//
 | 
			
		||||
//	type Account struct {
 | 
			
		||||
//	  ID int
 | 
			
		||||
//	  OwnerName string `cel:"owner"`
 | 
			
		||||
//	}
 | 
			
		||||
//
 | 
			
		||||
// ```
 | 
			
		||||
//
 | 
			
		||||
// The `OwnerName` field is now accessible in CEL via `owner`, e.g. `identity.Account{owner: 'bob'}`.
 | 
			
		||||
// In case there are duplicated field names in the struct, an error will be returned.
 | 
			
		||||
func NativeTypes(args ...any) cel.EnvOption {
 | 
			
		||||
	return func(env *cel.Env) (*cel.Env, error) {
 | 
			
		||||
		tp, err := newNativeTypeProvider(env.CELTypeAdapter(), env.CELTypeProvider(), refTypes...)
 | 
			
		||||
		nativeTypes := make([]any, 0, len(args))
 | 
			
		||||
		tpOptions := nativeTypeOptions{}
 | 
			
		||||
 | 
			
		||||
		for _, v := range args {
 | 
			
		||||
			switch v := v.(type) {
 | 
			
		||||
			case NativeTypesOption:
 | 
			
		||||
				err := v(&tpOptions)
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					return nil, err
 | 
			
		||||
				}
 | 
			
		||||
			default:
 | 
			
		||||
				nativeTypes = append(nativeTypes, v)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		tp, err := newNativeTypeProvider(tpOptions, env.CELTypeAdapter(), env.CELTypeProvider(), nativeTypes...)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		env, err = cel.CustomTypeAdapter(tp)(env)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
@@ -91,12 +125,29 @@ func NativeTypes(refTypes ...any) cel.EnvOption {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func newNativeTypeProvider(adapter types.Adapter, provider types.Provider, refTypes ...any) (*nativeTypeProvider, error) {
 | 
			
		||||
// NativeTypesOption is a functional interface for configuring handling of native types.
 | 
			
		||||
type NativeTypesOption func(*nativeTypeOptions) error
 | 
			
		||||
 | 
			
		||||
type nativeTypeOptions struct {
 | 
			
		||||
	// parseStructTags controls if CEL should support struct field renames, by parsing
 | 
			
		||||
	// struct field tags.
 | 
			
		||||
	parseStructTags bool
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ParseStructTags configures if native types field names should be overridable by CEL struct tags.
 | 
			
		||||
func ParseStructTags(enabled bool) NativeTypesOption {
 | 
			
		||||
	return func(ntp *nativeTypeOptions) error {
 | 
			
		||||
		ntp.parseStructTags = true
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func newNativeTypeProvider(tpOptions nativeTypeOptions, adapter types.Adapter, provider types.Provider, refTypes ...any) (*nativeTypeProvider, error) {
 | 
			
		||||
	nativeTypes := make(map[string]*nativeType, len(refTypes))
 | 
			
		||||
	for _, refType := range refTypes {
 | 
			
		||||
		switch rt := refType.(type) {
 | 
			
		||||
		case reflect.Type:
 | 
			
		||||
			result, err := newNativeTypes(rt)
 | 
			
		||||
			result, err := newNativeTypes(tpOptions.parseStructTags, rt)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return nil, err
 | 
			
		||||
			}
 | 
			
		||||
@@ -104,7 +155,7 @@ func newNativeTypeProvider(adapter types.Adapter, provider types.Provider, refTy
 | 
			
		||||
				nativeTypes[result[idx].TypeName()] = result[idx]
 | 
			
		||||
			}
 | 
			
		||||
		case reflect.Value:
 | 
			
		||||
			result, err := newNativeTypes(rt.Type())
 | 
			
		||||
			result, err := newNativeTypes(tpOptions.parseStructTags, rt.Type())
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return nil, err
 | 
			
		||||
			}
 | 
			
		||||
@@ -119,6 +170,7 @@ func newNativeTypeProvider(adapter types.Adapter, provider types.Provider, refTy
 | 
			
		||||
		nativeTypes:  nativeTypes,
 | 
			
		||||
		baseAdapter:  adapter,
 | 
			
		||||
		baseProvider: provider,
 | 
			
		||||
		options:      tpOptions,
 | 
			
		||||
	}, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -126,6 +178,7 @@ type nativeTypeProvider struct {
 | 
			
		||||
	nativeTypes  map[string]*nativeType
 | 
			
		||||
	baseAdapter  types.Adapter
 | 
			
		||||
	baseProvider types.Provider
 | 
			
		||||
	options      nativeTypeOptions
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// EnumValue proxies to the types.Provider configured at the times the NativeTypes
 | 
			
		||||
@@ -155,6 +208,18 @@ func (tp *nativeTypeProvider) FindStructType(typeName string) (*types.Type, bool
 | 
			
		||||
	return tp.baseProvider.FindStructType(typeName)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func toFieldName(parseStructTag bool, f reflect.StructField) string {
 | 
			
		||||
	if !parseStructTag {
 | 
			
		||||
		return f.Name
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if name, found := f.Tag.Lookup("cel"); found {
 | 
			
		||||
		return name
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return f.Name
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// FindStructFieldNames looks up the type definition first from the native types, then from
 | 
			
		||||
// the backing provider type set. If found, a set of field names corresponding to the type
 | 
			
		||||
// will be returned.
 | 
			
		||||
@@ -163,7 +228,7 @@ func (tp *nativeTypeProvider) FindStructFieldNames(typeName string) ([]string, b
 | 
			
		||||
		fieldCount := t.refType.NumField()
 | 
			
		||||
		fields := make([]string, fieldCount)
 | 
			
		||||
		for i := 0; i < fieldCount; i++ {
 | 
			
		||||
			fields[i] = t.refType.Field(i).Name
 | 
			
		||||
			fields[i] = toFieldName(tp.options.parseStructTags, t.refType.Field(i))
 | 
			
		||||
		}
 | 
			
		||||
		return fields, true
 | 
			
		||||
	}
 | 
			
		||||
@@ -173,6 +238,22 @@ func (tp *nativeTypeProvider) FindStructFieldNames(typeName string) ([]string, b
 | 
			
		||||
	return tp.baseProvider.FindStructFieldNames(typeName)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// valueFieldByName retrieves the corresponding reflect.Value field for the given field name, by
 | 
			
		||||
// searching for a matching field tag value or field name.
 | 
			
		||||
func valueFieldByName(parseStructTags bool, target reflect.Value, fieldName string) reflect.Value {
 | 
			
		||||
	if !parseStructTags {
 | 
			
		||||
		return target.FieldByName(fieldName)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for i := 0; i < target.Type().NumField(); i++ {
 | 
			
		||||
		f := target.Type().Field(i)
 | 
			
		||||
		if toFieldName(parseStructTags, f) == fieldName {
 | 
			
		||||
			return target.FieldByIndex(f.Index)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return reflect.Value{}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// FindStructFieldType looks up a native type's field definition, and if the type name is not a native
 | 
			
		||||
// type then proxies to the composed types.Provider
 | 
			
		||||
func (tp *nativeTypeProvider) FindStructFieldType(typeName, fieldName string) (*types.FieldType, bool) {
 | 
			
		||||
@@ -192,13 +273,13 @@ func (tp *nativeTypeProvider) FindStructFieldType(typeName, fieldName string) (*
 | 
			
		||||
		Type: celType,
 | 
			
		||||
		IsSet: func(obj any) bool {
 | 
			
		||||
			refVal := reflect.Indirect(reflect.ValueOf(obj))
 | 
			
		||||
			refField := refVal.FieldByName(fieldName)
 | 
			
		||||
			refField := valueFieldByName(tp.options.parseStructTags, refVal, fieldName)
 | 
			
		||||
			return !refField.IsZero()
 | 
			
		||||
		},
 | 
			
		||||
		GetFrom: func(obj any) (any, error) {
 | 
			
		||||
			refVal := reflect.Indirect(reflect.ValueOf(obj))
 | 
			
		||||
			refField := refVal.FieldByName(fieldName)
 | 
			
		||||
			return getFieldValue(tp, refField), nil
 | 
			
		||||
			refField := valueFieldByName(tp.options.parseStructTags, refVal, fieldName)
 | 
			
		||||
			return getFieldValue(refField), nil
 | 
			
		||||
		},
 | 
			
		||||
	}, true
 | 
			
		||||
}
 | 
			
		||||
@@ -249,6 +330,9 @@ func (tp *nativeTypeProvider) NativeToValue(val any) ref.Val {
 | 
			
		||||
		case []byte:
 | 
			
		||||
			return tp.baseAdapter.NativeToValue(val)
 | 
			
		||||
		default:
 | 
			
		||||
			if refVal.Type().Elem() == reflect.TypeOf(byte(0)) {
 | 
			
		||||
				return tp.baseAdapter.NativeToValue(val)
 | 
			
		||||
			}
 | 
			
		||||
			return types.NewDynamicList(tp, val)
 | 
			
		||||
		}
 | 
			
		||||
	case reflect.Map:
 | 
			
		||||
@@ -259,7 +343,7 @@ func (tp *nativeTypeProvider) NativeToValue(val any) ref.Val {
 | 
			
		||||
			time.Time:
 | 
			
		||||
			return tp.baseAdapter.NativeToValue(val)
 | 
			
		||||
		default:
 | 
			
		||||
			return newNativeObject(tp, val, rawVal)
 | 
			
		||||
			return tp.newNativeObject(val, rawVal)
 | 
			
		||||
		}
 | 
			
		||||
	default:
 | 
			
		||||
		return tp.baseAdapter.NativeToValue(val)
 | 
			
		||||
@@ -319,13 +403,13 @@ func convertToCelType(refType reflect.Type) (*cel.Type, bool) {
 | 
			
		||||
	return nil, false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func newNativeObject(adapter types.Adapter, val any, refValue reflect.Value) ref.Val {
 | 
			
		||||
	valType, err := newNativeType(refValue.Type())
 | 
			
		||||
func (tp *nativeTypeProvider) newNativeObject(val any, refValue reflect.Value) ref.Val {
 | 
			
		||||
	valType, err := newNativeType(tp.options.parseStructTags, refValue.Type())
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return types.NewErr(err.Error())
 | 
			
		||||
	}
 | 
			
		||||
	return &nativeObj{
 | 
			
		||||
		Adapter:  adapter,
 | 
			
		||||
		Adapter:  tp,
 | 
			
		||||
		val:      val,
 | 
			
		||||
		valType:  valType,
 | 
			
		||||
		refValue: refValue,
 | 
			
		||||
@@ -372,12 +456,13 @@ func (o *nativeObj) ConvertToNative(typeDesc reflect.Type) (any, error) {
 | 
			
		||||
			if !fieldValue.IsValid() || fieldValue.IsZero() {
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
			fieldName := toFieldName(o.valType.parseStructTags, fieldType)
 | 
			
		||||
			fieldCELVal := o.NativeToValue(fieldValue.Interface())
 | 
			
		||||
			fieldJSONVal, err := fieldCELVal.ConvertToNative(jsonValueType)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return nil, err
 | 
			
		||||
			}
 | 
			
		||||
			fields[fieldType.Name] = fieldJSONVal.(*structpb.Value)
 | 
			
		||||
			fields[fieldName] = fieldJSONVal.(*structpb.Value)
 | 
			
		||||
		}
 | 
			
		||||
		return &structpb.Struct{Fields: fields}, nil
 | 
			
		||||
	}
 | 
			
		||||
@@ -469,8 +554,8 @@ func (o *nativeObj) Value() any {
 | 
			
		||||
	return o.val
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func newNativeTypes(rawType reflect.Type) ([]*nativeType, error) {
 | 
			
		||||
	nt, err := newNativeType(rawType)
 | 
			
		||||
func newNativeTypes(parseStructTags bool, rawType reflect.Type) ([]*nativeType, error) {
 | 
			
		||||
	nt, err := newNativeType(parseStructTags, rawType)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
@@ -489,7 +574,7 @@ func newNativeTypes(rawType reflect.Type) ([]*nativeType, error) {
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		alreadySeen[t.String()] = struct{}{}
 | 
			
		||||
		nt, ntErr := newNativeType(t)
 | 
			
		||||
		nt, ntErr := newNativeType(parseStructTags, t)
 | 
			
		||||
		if ntErr != nil {
 | 
			
		||||
			err = ntErr
 | 
			
		||||
			return
 | 
			
		||||
@@ -505,7 +590,11 @@ func newNativeTypes(rawType reflect.Type) ([]*nativeType, error) {
 | 
			
		||||
	return result, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func newNativeType(rawType reflect.Type) (*nativeType, error) {
 | 
			
		||||
var (
 | 
			
		||||
	errDuplicatedFieldName = errors.New("field name already exists in struct")
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func newNativeType(parseStructTags bool, rawType reflect.Type) (*nativeType, error) {
 | 
			
		||||
	refType := rawType
 | 
			
		||||
	if refType.Kind() == reflect.Pointer {
 | 
			
		||||
		refType = refType.Elem()
 | 
			
		||||
@@ -513,15 +602,34 @@ func newNativeType(rawType reflect.Type) (*nativeType, error) {
 | 
			
		||||
	if !isValidObjectType(refType) {
 | 
			
		||||
		return nil, fmt.Errorf("unsupported reflect.Type %v, must be reflect.Struct", rawType)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Since naming collisions can only happen with struct tag parsing, we only check for them if it is enabled.
 | 
			
		||||
	if parseStructTags {
 | 
			
		||||
		fieldNames := make(map[string]struct{})
 | 
			
		||||
 | 
			
		||||
		for idx := 0; idx < refType.NumField(); idx++ {
 | 
			
		||||
			field := refType.Field(idx)
 | 
			
		||||
			fieldName := toFieldName(parseStructTags, field)
 | 
			
		||||
 | 
			
		||||
			if _, found := fieldNames[fieldName]; found {
 | 
			
		||||
				return nil, fmt.Errorf("invalid field name `%s` in struct `%s`: %w", fieldName, refType.Name(), errDuplicatedFieldName)
 | 
			
		||||
			} else {
 | 
			
		||||
				fieldNames[fieldName] = struct{}{}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return &nativeType{
 | 
			
		||||
		typeName:        fmt.Sprintf("%s.%s", simplePkgAlias(refType.PkgPath()), refType.Name()),
 | 
			
		||||
		refType:         refType,
 | 
			
		||||
		parseStructTags: parseStructTags,
 | 
			
		||||
	}, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type nativeType struct {
 | 
			
		||||
	typeName        string
 | 
			
		||||
	refType         reflect.Type
 | 
			
		||||
	parseStructTags bool
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ConvertToNative implements ref.Val.ConvertToNative.
 | 
			
		||||
@@ -569,9 +677,26 @@ func (t *nativeType) Value() any {
 | 
			
		||||
	return t.typeName
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// fieldByName returns the corresponding reflect.StructField for the give name either by matching
 | 
			
		||||
// field tag or field name.
 | 
			
		||||
func (t *nativeType) fieldByName(fieldName string) (reflect.StructField, bool) {
 | 
			
		||||
	if !t.parseStructTags {
 | 
			
		||||
		return t.refType.FieldByName(fieldName)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for i := 0; i < t.refType.NumField(); i++ {
 | 
			
		||||
		f := t.refType.Field(i)
 | 
			
		||||
		if toFieldName(t.parseStructTags, f) == fieldName {
 | 
			
		||||
			return f, true
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return reflect.StructField{}, false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// hasField returns whether a field name has a corresponding Golang reflect.StructField
 | 
			
		||||
func (t *nativeType) hasField(fieldName string) (reflect.StructField, bool) {
 | 
			
		||||
	f, found := t.refType.FieldByName(fieldName)
 | 
			
		||||
	f, found := t.fieldByName(fieldName)
 | 
			
		||||
	if !found || !f.IsExported() || !isSupportedType(f.Type) {
 | 
			
		||||
		return reflect.StructField{}, false
 | 
			
		||||
	}
 | 
			
		||||
@@ -579,21 +704,16 @@ func (t *nativeType) hasField(fieldName string) (reflect.StructField, bool) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func adaptFieldValue(adapter types.Adapter, refField reflect.Value) ref.Val {
 | 
			
		||||
	return adapter.NativeToValue(getFieldValue(adapter, refField))
 | 
			
		||||
	return adapter.NativeToValue(getFieldValue(refField))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func getFieldValue(adapter types.Adapter, refField reflect.Value) any {
 | 
			
		||||
func getFieldValue(refField reflect.Value) any {
 | 
			
		||||
	if refField.IsZero() {
 | 
			
		||||
		switch refField.Kind() {
 | 
			
		||||
		case reflect.Array, reflect.Slice:
 | 
			
		||||
			return types.NewDynamicList(adapter, []ref.Val{})
 | 
			
		||||
		case reflect.Map:
 | 
			
		||||
			return types.NewDynamicMap(adapter, map[ref.Val]ref.Val{})
 | 
			
		||||
		case reflect.Struct:
 | 
			
		||||
			if refField.Type() == timestampType {
 | 
			
		||||
				return types.Timestamp{Time: time.Unix(0, 0)}
 | 
			
		||||
				return time.Unix(0, 0)
 | 
			
		||||
			}
 | 
			
		||||
			return reflect.New(refField.Type()).Elem().Interface()
 | 
			
		||||
		case reflect.Pointer:
 | 
			
		||||
			return reflect.New(refField.Type().Elem()).Interface()
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								vendor/github.com/google/cel-go/interpreter/attribute_patterns.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/github.com/google/cel-go/interpreter/attribute_patterns.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -178,10 +178,8 @@ func numericValueEquals(value any, celValue ref.Val) bool {
 | 
			
		||||
 | 
			
		||||
// NewPartialAttributeFactory returns an AttributeFactory implementation capable of performing
 | 
			
		||||
// AttributePattern matches with PartialActivation inputs.
 | 
			
		||||
func NewPartialAttributeFactory(container *containers.Container,
 | 
			
		||||
	adapter types.Adapter,
 | 
			
		||||
	provider types.Provider) AttributeFactory {
 | 
			
		||||
	fac := NewAttributeFactory(container, adapter, provider)
 | 
			
		||||
func NewPartialAttributeFactory(container *containers.Container, adapter types.Adapter, provider types.Provider, opts ...AttrFactoryOption) AttributeFactory {
 | 
			
		||||
	fac := NewAttributeFactory(container, adapter, provider, opts...)
 | 
			
		||||
	return &partialAttributeFactory{
 | 
			
		||||
		AttributeFactory: fac,
 | 
			
		||||
		container:        container,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										144
									
								
								vendor/github.com/google/cel-go/interpreter/attributes.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										144
									
								
								vendor/github.com/google/cel-go/interpreter/attributes.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -126,21 +126,39 @@ type NamespacedAttribute interface {
 | 
			
		||||
	Qualifiers() []Qualifier
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// AttrFactoryOption specifies a functional option for configuring an attribute factory.
 | 
			
		||||
type AttrFactoryOption func(*attrFactory) *attrFactory
 | 
			
		||||
 | 
			
		||||
// EnableErrorOnBadPresenceTest error generation when a presence test or optional field selection
 | 
			
		||||
// is performed on a primitive type.
 | 
			
		||||
func EnableErrorOnBadPresenceTest(value bool) AttrFactoryOption {
 | 
			
		||||
	return func(fac *attrFactory) *attrFactory {
 | 
			
		||||
		fac.errorOnBadPresenceTest = value
 | 
			
		||||
		return fac
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewAttributeFactory returns a default AttributeFactory which is produces Attribute values
 | 
			
		||||
// capable of resolving types by simple names and qualify the values using the supported qualifier
 | 
			
		||||
// types: bool, int, string, and uint.
 | 
			
		||||
func NewAttributeFactory(cont *containers.Container, a types.Adapter, p types.Provider) AttributeFactory {
 | 
			
		||||
	return &attrFactory{
 | 
			
		||||
func NewAttributeFactory(cont *containers.Container, a types.Adapter, p types.Provider, opts ...AttrFactoryOption) AttributeFactory {
 | 
			
		||||
	fac := &attrFactory{
 | 
			
		||||
		container: cont,
 | 
			
		||||
		adapter:   a,
 | 
			
		||||
		provider:  p,
 | 
			
		||||
	}
 | 
			
		||||
	for _, o := range opts {
 | 
			
		||||
		fac = o(fac)
 | 
			
		||||
	}
 | 
			
		||||
	return fac
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type attrFactory struct {
 | 
			
		||||
	container *containers.Container
 | 
			
		||||
	adapter   types.Adapter
 | 
			
		||||
	provider  types.Provider
 | 
			
		||||
 | 
			
		||||
	errorOnBadPresenceTest bool
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// AbsoluteAttribute refers to a variable value and an optional qualifier path.
 | 
			
		||||
@@ -155,6 +173,7 @@ func (r *attrFactory) AbsoluteAttribute(id int64, names ...string) NamespacedAtt
 | 
			
		||||
		adapter:                r.adapter,
 | 
			
		||||
		provider:               r.provider,
 | 
			
		||||
		fac:                    r,
 | 
			
		||||
		errorOnBadPresenceTest: r.errorOnBadPresenceTest,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -193,6 +212,7 @@ func (r *attrFactory) RelativeAttribute(id int64, operand Interpretable) Attribu
 | 
			
		||||
		qualifiers:             []Qualifier{},
 | 
			
		||||
		adapter:                r.adapter,
 | 
			
		||||
		fac:                    r,
 | 
			
		||||
		errorOnBadPresenceTest: r.errorOnBadPresenceTest,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -214,7 +234,7 @@ func (r *attrFactory) NewQualifier(objType *types.Type, qualID int64, val any, o
 | 
			
		||||
			}, nil
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return newQualifier(r.adapter, qualID, val, opt)
 | 
			
		||||
	return newQualifier(r.adapter, qualID, val, opt, r.errorOnBadPresenceTest)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type absoluteAttribute struct {
 | 
			
		||||
@@ -226,6 +246,8 @@ type absoluteAttribute struct {
 | 
			
		||||
	adapter        types.Adapter
 | 
			
		||||
	provider       types.Provider
 | 
			
		||||
	fac            AttributeFactory
 | 
			
		||||
 | 
			
		||||
	errorOnBadPresenceTest bool
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ID implements the Attribute interface method.
 | 
			
		||||
@@ -514,6 +536,8 @@ type relativeAttribute struct {
 | 
			
		||||
	qualifiers []Qualifier
 | 
			
		||||
	adapter    types.Adapter
 | 
			
		||||
	fac        AttributeFactory
 | 
			
		||||
 | 
			
		||||
	errorOnBadPresenceTest bool
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ID is an implementation of the Attribute interface method.
 | 
			
		||||
@@ -577,7 +601,7 @@ func (a *relativeAttribute) String() string {
 | 
			
		||||
	return fmt.Sprintf("id: %v, operand: %v", a.id, a.operand)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func newQualifier(adapter types.Adapter, id int64, v any, opt bool) (Qualifier, error) {
 | 
			
		||||
func newQualifier(adapter types.Adapter, id int64, v any, opt, errorOnBadPresenceTest bool) (Qualifier, error) {
 | 
			
		||||
	var qual Qualifier
 | 
			
		||||
	switch val := v.(type) {
 | 
			
		||||
	case Attribute:
 | 
			
		||||
@@ -597,34 +621,70 @@ func newQualifier(adapter types.Adapter, id int64, v any, opt bool) (Qualifier,
 | 
			
		||||
			celValue:               types.String(val),
 | 
			
		||||
			adapter:                adapter,
 | 
			
		||||
			optional:               opt,
 | 
			
		||||
			errorOnBadPresenceTest: errorOnBadPresenceTest,
 | 
			
		||||
		}
 | 
			
		||||
	case int:
 | 
			
		||||
		qual = &intQualifier{
 | 
			
		||||
			id: id, value: int64(val), celValue: types.Int(val), adapter: adapter, optional: opt,
 | 
			
		||||
			id:                     id,
 | 
			
		||||
			value:                  int64(val),
 | 
			
		||||
			celValue:               types.Int(val),
 | 
			
		||||
			adapter:                adapter,
 | 
			
		||||
			optional:               opt,
 | 
			
		||||
			errorOnBadPresenceTest: errorOnBadPresenceTest,
 | 
			
		||||
		}
 | 
			
		||||
	case int32:
 | 
			
		||||
		qual = &intQualifier{
 | 
			
		||||
			id: id, value: int64(val), celValue: types.Int(val), adapter: adapter, optional: opt,
 | 
			
		||||
			id:                     id,
 | 
			
		||||
			value:                  int64(val),
 | 
			
		||||
			celValue:               types.Int(val),
 | 
			
		||||
			adapter:                adapter,
 | 
			
		||||
			optional:               opt,
 | 
			
		||||
			errorOnBadPresenceTest: errorOnBadPresenceTest,
 | 
			
		||||
		}
 | 
			
		||||
	case int64:
 | 
			
		||||
		qual = &intQualifier{
 | 
			
		||||
			id: id, value: val, celValue: types.Int(val), adapter: adapter, optional: opt,
 | 
			
		||||
			id:                     id,
 | 
			
		||||
			value:                  val,
 | 
			
		||||
			celValue:               types.Int(val),
 | 
			
		||||
			adapter:                adapter,
 | 
			
		||||
			optional:               opt,
 | 
			
		||||
			errorOnBadPresenceTest: errorOnBadPresenceTest,
 | 
			
		||||
		}
 | 
			
		||||
	case uint:
 | 
			
		||||
		qual = &uintQualifier{
 | 
			
		||||
			id: id, value: uint64(val), celValue: types.Uint(val), adapter: adapter, optional: opt,
 | 
			
		||||
			id:                     id,
 | 
			
		||||
			value:                  uint64(val),
 | 
			
		||||
			celValue:               types.Uint(val),
 | 
			
		||||
			adapter:                adapter,
 | 
			
		||||
			optional:               opt,
 | 
			
		||||
			errorOnBadPresenceTest: errorOnBadPresenceTest,
 | 
			
		||||
		}
 | 
			
		||||
	case uint32:
 | 
			
		||||
		qual = &uintQualifier{
 | 
			
		||||
			id: id, value: uint64(val), celValue: types.Uint(val), adapter: adapter, optional: opt,
 | 
			
		||||
			id:                     id,
 | 
			
		||||
			value:                  uint64(val),
 | 
			
		||||
			celValue:               types.Uint(val),
 | 
			
		||||
			adapter:                adapter,
 | 
			
		||||
			optional:               opt,
 | 
			
		||||
			errorOnBadPresenceTest: errorOnBadPresenceTest,
 | 
			
		||||
		}
 | 
			
		||||
	case uint64:
 | 
			
		||||
		qual = &uintQualifier{
 | 
			
		||||
			id: id, value: val, celValue: types.Uint(val), adapter: adapter, optional: opt,
 | 
			
		||||
			id:                     id,
 | 
			
		||||
			value:                  val,
 | 
			
		||||
			celValue:               types.Uint(val),
 | 
			
		||||
			adapter:                adapter,
 | 
			
		||||
			optional:               opt,
 | 
			
		||||
			errorOnBadPresenceTest: errorOnBadPresenceTest,
 | 
			
		||||
		}
 | 
			
		||||
	case bool:
 | 
			
		||||
		qual = &boolQualifier{
 | 
			
		||||
			id: id, value: val, celValue: types.Bool(val), adapter: adapter, optional: opt,
 | 
			
		||||
			id:                     id,
 | 
			
		||||
			value:                  val,
 | 
			
		||||
			celValue:               types.Bool(val),
 | 
			
		||||
			adapter:                adapter,
 | 
			
		||||
			optional:               opt,
 | 
			
		||||
			errorOnBadPresenceTest: errorOnBadPresenceTest,
 | 
			
		||||
		}
 | 
			
		||||
	case float32:
 | 
			
		||||
		qual = &doubleQualifier{
 | 
			
		||||
@@ -633,30 +693,61 @@ func newQualifier(adapter types.Adapter, id int64, v any, opt bool) (Qualifier,
 | 
			
		||||
			celValue:               types.Double(val),
 | 
			
		||||
			adapter:                adapter,
 | 
			
		||||
			optional:               opt,
 | 
			
		||||
			errorOnBadPresenceTest: errorOnBadPresenceTest,
 | 
			
		||||
		}
 | 
			
		||||
	case float64:
 | 
			
		||||
		qual = &doubleQualifier{
 | 
			
		||||
			id: id, value: val, celValue: types.Double(val), adapter: adapter, optional: opt,
 | 
			
		||||
			id:                     id,
 | 
			
		||||
			value:                  val,
 | 
			
		||||
			celValue:               types.Double(val),
 | 
			
		||||
			adapter:                adapter,
 | 
			
		||||
			optional:               opt,
 | 
			
		||||
			errorOnBadPresenceTest: errorOnBadPresenceTest,
 | 
			
		||||
		}
 | 
			
		||||
	case types.String:
 | 
			
		||||
		qual = &stringQualifier{
 | 
			
		||||
			id: id, value: string(val), celValue: val, adapter: adapter, optional: opt,
 | 
			
		||||
			id:                     id,
 | 
			
		||||
			value:                  string(val),
 | 
			
		||||
			celValue:               val,
 | 
			
		||||
			adapter:                adapter,
 | 
			
		||||
			optional:               opt,
 | 
			
		||||
			errorOnBadPresenceTest: errorOnBadPresenceTest,
 | 
			
		||||
		}
 | 
			
		||||
	case types.Int:
 | 
			
		||||
		qual = &intQualifier{
 | 
			
		||||
			id: id, value: int64(val), celValue: val, adapter: adapter, optional: opt,
 | 
			
		||||
			id:                     id,
 | 
			
		||||
			value:                  int64(val),
 | 
			
		||||
			celValue:               val,
 | 
			
		||||
			adapter:                adapter,
 | 
			
		||||
			optional:               opt,
 | 
			
		||||
			errorOnBadPresenceTest: errorOnBadPresenceTest,
 | 
			
		||||
		}
 | 
			
		||||
	case types.Uint:
 | 
			
		||||
		qual = &uintQualifier{
 | 
			
		||||
			id: id, value: uint64(val), celValue: val, adapter: adapter, optional: opt,
 | 
			
		||||
			id:                     id,
 | 
			
		||||
			value:                  uint64(val),
 | 
			
		||||
			celValue:               val,
 | 
			
		||||
			adapter:                adapter,
 | 
			
		||||
			optional:               opt,
 | 
			
		||||
			errorOnBadPresenceTest: errorOnBadPresenceTest,
 | 
			
		||||
		}
 | 
			
		||||
	case types.Bool:
 | 
			
		||||
		qual = &boolQualifier{
 | 
			
		||||
			id: id, value: bool(val), celValue: val, adapter: adapter, optional: opt,
 | 
			
		||||
			id:                     id,
 | 
			
		||||
			value:                  bool(val),
 | 
			
		||||
			celValue:               val,
 | 
			
		||||
			adapter:                adapter,
 | 
			
		||||
			optional:               opt,
 | 
			
		||||
			errorOnBadPresenceTest: errorOnBadPresenceTest,
 | 
			
		||||
		}
 | 
			
		||||
	case types.Double:
 | 
			
		||||
		qual = &doubleQualifier{
 | 
			
		||||
			id: id, value: float64(val), celValue: val, adapter: adapter, optional: opt,
 | 
			
		||||
			id:                     id,
 | 
			
		||||
			value:                  float64(val),
 | 
			
		||||
			celValue:               val,
 | 
			
		||||
			adapter:                adapter,
 | 
			
		||||
			optional:               opt,
 | 
			
		||||
			errorOnBadPresenceTest: errorOnBadPresenceTest,
 | 
			
		||||
		}
 | 
			
		||||
	case *types.Unknown:
 | 
			
		||||
		qual = &unknownQualifier{id: id, value: val}
 | 
			
		||||
@@ -692,6 +783,7 @@ type stringQualifier struct {
 | 
			
		||||
	celValue               ref.Val
 | 
			
		||||
	adapter                types.Adapter
 | 
			
		||||
	optional               bool
 | 
			
		||||
	errorOnBadPresenceTest bool
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ID is an implementation of the Qualifier interface method.
 | 
			
		||||
@@ -774,7 +866,7 @@ func (q *stringQualifier) qualifyInternal(vars Activation, obj any, presenceTest
 | 
			
		||||
			return obj, true, nil
 | 
			
		||||
		}
 | 
			
		||||
	default:
 | 
			
		||||
		return refQualify(q.adapter, obj, q.celValue, presenceTest, presenceOnly)
 | 
			
		||||
		return refQualify(q.adapter, obj, q.celValue, presenceTest, presenceOnly, q.errorOnBadPresenceTest)
 | 
			
		||||
	}
 | 
			
		||||
	if presenceTest {
 | 
			
		||||
		return nil, false, nil
 | 
			
		||||
@@ -793,6 +885,7 @@ type intQualifier struct {
 | 
			
		||||
	celValue               ref.Val
 | 
			
		||||
	adapter                types.Adapter
 | 
			
		||||
	optional               bool
 | 
			
		||||
	errorOnBadPresenceTest bool
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ID is an implementation of the Qualifier interface method.
 | 
			
		||||
@@ -898,7 +991,7 @@ func (q *intQualifier) qualifyInternal(vars Activation, obj any, presenceTest, p
 | 
			
		||||
			return o[i], true, nil
 | 
			
		||||
		}
 | 
			
		||||
	default:
 | 
			
		||||
		return refQualify(q.adapter, obj, q.celValue, presenceTest, presenceOnly)
 | 
			
		||||
		return refQualify(q.adapter, obj, q.celValue, presenceTest, presenceOnly, q.errorOnBadPresenceTest)
 | 
			
		||||
	}
 | 
			
		||||
	if presenceTest {
 | 
			
		||||
		return nil, false, nil
 | 
			
		||||
@@ -920,6 +1013,7 @@ type uintQualifier struct {
 | 
			
		||||
	celValue               ref.Val
 | 
			
		||||
	adapter                types.Adapter
 | 
			
		||||
	optional               bool
 | 
			
		||||
	errorOnBadPresenceTest bool
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ID is an implementation of the Qualifier interface method.
 | 
			
		||||
@@ -966,7 +1060,7 @@ func (q *uintQualifier) qualifyInternal(vars Activation, obj any, presenceTest,
 | 
			
		||||
			return obj, true, nil
 | 
			
		||||
		}
 | 
			
		||||
	default:
 | 
			
		||||
		return refQualify(q.adapter, obj, q.celValue, presenceTest, presenceOnly)
 | 
			
		||||
		return refQualify(q.adapter, obj, q.celValue, presenceTest, presenceOnly, q.errorOnBadPresenceTest)
 | 
			
		||||
	}
 | 
			
		||||
	if presenceTest {
 | 
			
		||||
		return nil, false, nil
 | 
			
		||||
@@ -985,6 +1079,7 @@ type boolQualifier struct {
 | 
			
		||||
	celValue               ref.Val
 | 
			
		||||
	adapter                types.Adapter
 | 
			
		||||
	optional               bool
 | 
			
		||||
	errorOnBadPresenceTest bool
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ID is an implementation of the Qualifier interface method.
 | 
			
		||||
@@ -1017,7 +1112,7 @@ func (q *boolQualifier) qualifyInternal(vars Activation, obj any, presenceTest,
 | 
			
		||||
			return obj, true, nil
 | 
			
		||||
		}
 | 
			
		||||
	default:
 | 
			
		||||
		return refQualify(q.adapter, obj, q.celValue, presenceTest, presenceOnly)
 | 
			
		||||
		return refQualify(q.adapter, obj, q.celValue, presenceTest, presenceOnly, q.errorOnBadPresenceTest)
 | 
			
		||||
	}
 | 
			
		||||
	if presenceTest {
 | 
			
		||||
		return nil, false, nil
 | 
			
		||||
@@ -1097,6 +1192,7 @@ type doubleQualifier struct {
 | 
			
		||||
	celValue               ref.Val
 | 
			
		||||
	adapter                types.Adapter
 | 
			
		||||
	optional               bool
 | 
			
		||||
	errorOnBadPresenceTest bool
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ID is an implementation of the Qualifier interface method.
 | 
			
		||||
@@ -1120,7 +1216,7 @@ func (q *doubleQualifier) QualifyIfPresent(vars Activation, obj any, presenceOnl
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (q *doubleQualifier) qualifyInternal(vars Activation, obj any, presenceTest, presenceOnly bool) (any, bool, error) {
 | 
			
		||||
	return refQualify(q.adapter, obj, q.celValue, presenceTest, presenceOnly)
 | 
			
		||||
	return refQualify(q.adapter, obj, q.celValue, presenceTest, presenceOnly, q.errorOnBadPresenceTest)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Value implements the ConstantQualifier interface
 | 
			
		||||
@@ -1226,7 +1322,7 @@ func attrQualifyIfPresent(fac AttributeFactory, vars Activation, obj any, qualAt
 | 
			
		||||
 | 
			
		||||
// refQualify attempts to convert the value to a CEL value and then uses reflection methods to try and
 | 
			
		||||
// apply the qualifier with the option to presence test field accesses before retrieving field values.
 | 
			
		||||
func refQualify(adapter types.Adapter, obj any, idx ref.Val, presenceTest, presenceOnly bool) (ref.Val, bool, error) {
 | 
			
		||||
func refQualify(adapter types.Adapter, obj any, idx ref.Val, presenceTest, presenceOnly, errorOnBadPresenceTest bool) (ref.Val, bool, error) {
 | 
			
		||||
	celVal := adapter.NativeToValue(obj)
 | 
			
		||||
	switch v := celVal.(type) {
 | 
			
		||||
	case *types.Unknown:
 | 
			
		||||
@@ -1283,7 +1379,7 @@ func refQualify(adapter types.Adapter, obj any, idx ref.Val, presenceTest, prese
 | 
			
		||||
		}
 | 
			
		||||
		return val, true, nil
 | 
			
		||||
	default:
 | 
			
		||||
		if presenceTest {
 | 
			
		||||
		if presenceTest && !errorOnBadPresenceTest {
 | 
			
		||||
			return nil, false, nil
 | 
			
		||||
		}
 | 
			
		||||
		return nil, false, missingKey(idx)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										20
									
								
								vendor/github.com/google/cel-go/parser/helper.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								vendor/github.com/google/cel-go/parser/helper.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -140,15 +140,12 @@ func (p *parserHelper) id(ctx any) int64 {
 | 
			
		||||
	var offset ast.OffsetRange
 | 
			
		||||
	switch c := ctx.(type) {
 | 
			
		||||
	case antlr.ParserRuleContext:
 | 
			
		||||
		start, stop := c.GetStart(), c.GetStop()
 | 
			
		||||
		if stop == nil {
 | 
			
		||||
			stop = start
 | 
			
		||||
		}
 | 
			
		||||
		start := c.GetStart()
 | 
			
		||||
		offset.Start = p.sourceInfo.ComputeOffset(int32(start.GetLine()), int32(start.GetColumn()))
 | 
			
		||||
		offset.Stop = p.sourceInfo.ComputeOffset(int32(stop.GetLine()), int32(stop.GetColumn()))
 | 
			
		||||
		offset.Stop = offset.Start + int32(len(c.GetText()))
 | 
			
		||||
	case antlr.Token:
 | 
			
		||||
		offset.Start = p.sourceInfo.ComputeOffset(int32(c.GetLine()), int32(c.GetColumn()))
 | 
			
		||||
		offset.Stop = offset.Start
 | 
			
		||||
		offset.Stop = offset.Start + int32(len(c.GetText()))
 | 
			
		||||
	case common.Location:
 | 
			
		||||
		offset.Start = p.sourceInfo.ComputeOffset(int32(c.Line()), int32(c.Column()))
 | 
			
		||||
		offset.Stop = offset.Start
 | 
			
		||||
@@ -164,10 +161,21 @@ func (p *parserHelper) id(ctx any) int64 {
 | 
			
		||||
	return id
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (p *parserHelper) deleteID(id int64) {
 | 
			
		||||
	p.sourceInfo.ClearOffsetRange(id)
 | 
			
		||||
	if id == p.nextID-1 {
 | 
			
		||||
		p.nextID--
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (p *parserHelper) getLocation(id int64) common.Location {
 | 
			
		||||
	return p.sourceInfo.GetStartLocation(id)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (p *parserHelper) getLocationByOffset(offset int32) common.Location {
 | 
			
		||||
	return p.getSourceInfo().GetLocationByOffset(offset)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// buildMacroCallArg iterates the expression and returns a new expression
 | 
			
		||||
// where all macros have been replaced by their IDs in MacroCalls
 | 
			
		||||
func (p *parserHelper) buildMacroCallArg(expr ast.Expr) ast.Expr {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								vendor/github.com/google/cel-go/parser/macro.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/github.com/google/cel-go/parser/macro.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -382,13 +382,11 @@ func makeQuantifier(kind quantifierKind, eh ExprHelper, target ast.Expr, args []
 | 
			
		||||
		step = eh.NewCall(operators.LogicalOr, eh.NewAccuIdent(), args[1])
 | 
			
		||||
		result = eh.NewAccuIdent()
 | 
			
		||||
	case quantifierExistsOne:
 | 
			
		||||
		zeroExpr := eh.NewLiteral(types.Int(0))
 | 
			
		||||
		oneExpr := eh.NewLiteral(types.Int(1))
 | 
			
		||||
		init = zeroExpr
 | 
			
		||||
		init = eh.NewLiteral(types.Int(0))
 | 
			
		||||
		condition = eh.NewLiteral(types.True)
 | 
			
		||||
		step = eh.NewCall(operators.Conditional, args[1],
 | 
			
		||||
			eh.NewCall(operators.Add, eh.NewAccuIdent(), oneExpr), eh.NewAccuIdent())
 | 
			
		||||
		result = eh.NewCall(operators.Equals, eh.NewAccuIdent(), oneExpr)
 | 
			
		||||
			eh.NewCall(operators.Add, eh.NewAccuIdent(), eh.NewLiteral(types.Int(1))), eh.NewAccuIdent())
 | 
			
		||||
		result = eh.NewCall(operators.Equals, eh.NewAccuIdent(), eh.NewLiteral(types.Int(1)))
 | 
			
		||||
	default:
 | 
			
		||||
		return nil, eh.NewError(args[0].ID(), fmt.Sprintf("unrecognized quantifier '%v'", kind))
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								vendor/github.com/google/cel-go/parser/parser.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/github.com/google/cel-go/parser/parser.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -856,7 +856,8 @@ func (p *parser) reportError(ctx any, format string, args ...any) ast.Expr {
 | 
			
		||||
 | 
			
		||||
// ANTLR Parse listener implementations
 | 
			
		||||
func (p *parser) SyntaxError(recognizer antlr.Recognizer, offendingSymbol any, line, column int, msg string, e antlr.RecognitionException) {
 | 
			
		||||
	l := p.helper.source.NewLocation(line, column)
 | 
			
		||||
	offset := p.helper.sourceInfo.ComputeOffset(int32(line), int32(column))
 | 
			
		||||
	l := p.helper.getLocationByOffset(offset)
 | 
			
		||||
	// Hack to keep existing error messages consistent with previous versions of CEL when a reserved word
 | 
			
		||||
	// is used as an identifier. This behavior needs to be overhauled to provide consistent, normalized error
 | 
			
		||||
	// messages out of ANTLR to prevent future breaking changes related to error message content.
 | 
			
		||||
@@ -916,10 +917,12 @@ func (p *parser) expandMacro(exprID int64, function string, target ast.Expr, arg
 | 
			
		||||
	expr, err := macro.Expander()(eh, target, args)
 | 
			
		||||
	// An error indicates that the macro was matched, but the arguments were not well-formed.
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		if err.Location != nil {
 | 
			
		||||
			return p.reportError(err.Location, err.Message), true
 | 
			
		||||
		loc := err.Location
 | 
			
		||||
		if loc == nil {
 | 
			
		||||
			loc = p.helper.getLocation(exprID)
 | 
			
		||||
		}
 | 
			
		||||
		return p.reportError(p.helper.getLocation(exprID), err.Message), true
 | 
			
		||||
		p.helper.deleteID(exprID)
 | 
			
		||||
		return p.reportError(loc, err.Message), true
 | 
			
		||||
	}
 | 
			
		||||
	// A nil value from the macro indicates that the macro implementation decided that
 | 
			
		||||
	// an expansion should not be performed.
 | 
			
		||||
@@ -929,6 +932,7 @@ func (p *parser) expandMacro(exprID int64, function string, target ast.Expr, arg
 | 
			
		||||
	if p.populateMacroCalls {
 | 
			
		||||
		p.helper.addMacroCall(expr.ID(), function, target, args...)
 | 
			
		||||
	}
 | 
			
		||||
	p.helper.deleteID(exprID)
 | 
			
		||||
	return expr, true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										28
									
								
								vendor/golang.org/x/text/width/kind_string.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										28
									
								
								vendor/golang.org/x/text/width/kind_string.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,28 +0,0 @@
 | 
			
		||||
// Code generated by "stringer -type=Kind"; DO NOT EDIT.
 | 
			
		||||
 | 
			
		||||
package width
 | 
			
		||||
 | 
			
		||||
import "strconv"
 | 
			
		||||
 | 
			
		||||
func _() {
 | 
			
		||||
	// An "invalid array index" compiler error signifies that the constant values have changed.
 | 
			
		||||
	// Re-run the stringer command to generate them again.
 | 
			
		||||
	var x [1]struct{}
 | 
			
		||||
	_ = x[Neutral-0]
 | 
			
		||||
	_ = x[EastAsianAmbiguous-1]
 | 
			
		||||
	_ = x[EastAsianWide-2]
 | 
			
		||||
	_ = x[EastAsianNarrow-3]
 | 
			
		||||
	_ = x[EastAsianFullwidth-4]
 | 
			
		||||
	_ = x[EastAsianHalfwidth-5]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const _Kind_name = "NeutralEastAsianAmbiguousEastAsianWideEastAsianNarrowEastAsianFullwidthEastAsianHalfwidth"
 | 
			
		||||
 | 
			
		||||
var _Kind_index = [...]uint8{0, 7, 25, 38, 53, 71, 89}
 | 
			
		||||
 | 
			
		||||
func (i Kind) String() string {
 | 
			
		||||
	if i < 0 || i >= Kind(len(_Kind_index)-1) {
 | 
			
		||||
		return "Kind(" + strconv.FormatInt(int64(i), 10) + ")"
 | 
			
		||||
	}
 | 
			
		||||
	return _Kind_name[_Kind_index[i]:_Kind_index[i+1]]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1328
									
								
								vendor/golang.org/x/text/width/tables10.0.0.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1328
									
								
								vendor/golang.org/x/text/width/tables10.0.0.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1340
									
								
								vendor/golang.org/x/text/width/tables11.0.0.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1340
									
								
								vendor/golang.org/x/text/width/tables11.0.0.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1360
									
								
								vendor/golang.org/x/text/width/tables12.0.0.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1360
									
								
								vendor/golang.org/x/text/width/tables12.0.0.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1361
									
								
								vendor/golang.org/x/text/width/tables13.0.0.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1361
									
								
								vendor/golang.org/x/text/width/tables13.0.0.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1367
									
								
								vendor/golang.org/x/text/width/tables15.0.0.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1367
									
								
								vendor/golang.org/x/text/width/tables15.0.0.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1296
									
								
								vendor/golang.org/x/text/width/tables9.0.0.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1296
									
								
								vendor/golang.org/x/text/width/tables9.0.0.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										239
									
								
								vendor/golang.org/x/text/width/transform.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										239
									
								
								vendor/golang.org/x/text/width/transform.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,239 +0,0 @@
 | 
			
		||||
// Copyright 2015 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
package width
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"unicode/utf8"
 | 
			
		||||
 | 
			
		||||
	"golang.org/x/text/transform"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type foldTransform struct {
 | 
			
		||||
	transform.NopResetter
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (foldTransform) Span(src []byte, atEOF bool) (n int, err error) {
 | 
			
		||||
	for n < len(src) {
 | 
			
		||||
		if src[n] < utf8.RuneSelf {
 | 
			
		||||
			// ASCII fast path.
 | 
			
		||||
			for n++; n < len(src) && src[n] < utf8.RuneSelf; n++ {
 | 
			
		||||
			}
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		v, size := trie.lookup(src[n:])
 | 
			
		||||
		if size == 0 { // incomplete UTF-8 encoding
 | 
			
		||||
			if !atEOF {
 | 
			
		||||
				err = transform.ErrShortSrc
 | 
			
		||||
			} else {
 | 
			
		||||
				n = len(src)
 | 
			
		||||
			}
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		if elem(v)&tagNeedsFold != 0 {
 | 
			
		||||
			err = transform.ErrEndOfSpan
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		n += size
 | 
			
		||||
	}
 | 
			
		||||
	return n, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (foldTransform) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
 | 
			
		||||
	for nSrc < len(src) {
 | 
			
		||||
		if src[nSrc] < utf8.RuneSelf {
 | 
			
		||||
			// ASCII fast path.
 | 
			
		||||
			start, end := nSrc, len(src)
 | 
			
		||||
			if d := len(dst) - nDst; d < end-start {
 | 
			
		||||
				end = nSrc + d
 | 
			
		||||
			}
 | 
			
		||||
			for nSrc++; nSrc < end && src[nSrc] < utf8.RuneSelf; nSrc++ {
 | 
			
		||||
			}
 | 
			
		||||
			n := copy(dst[nDst:], src[start:nSrc])
 | 
			
		||||
			if nDst += n; nDst == len(dst) {
 | 
			
		||||
				nSrc = start + n
 | 
			
		||||
				if nSrc == len(src) {
 | 
			
		||||
					return nDst, nSrc, nil
 | 
			
		||||
				}
 | 
			
		||||
				if src[nSrc] < utf8.RuneSelf {
 | 
			
		||||
					return nDst, nSrc, transform.ErrShortDst
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		v, size := trie.lookup(src[nSrc:])
 | 
			
		||||
		if size == 0 { // incomplete UTF-8 encoding
 | 
			
		||||
			if !atEOF {
 | 
			
		||||
				return nDst, nSrc, transform.ErrShortSrc
 | 
			
		||||
			}
 | 
			
		||||
			size = 1 // gobble 1 byte
 | 
			
		||||
		}
 | 
			
		||||
		if elem(v)&tagNeedsFold == 0 {
 | 
			
		||||
			if size != copy(dst[nDst:], src[nSrc:nSrc+size]) {
 | 
			
		||||
				return nDst, nSrc, transform.ErrShortDst
 | 
			
		||||
			}
 | 
			
		||||
			nDst += size
 | 
			
		||||
		} else {
 | 
			
		||||
			data := inverseData[byte(v)]
 | 
			
		||||
			if len(dst)-nDst < int(data[0]) {
 | 
			
		||||
				return nDst, nSrc, transform.ErrShortDst
 | 
			
		||||
			}
 | 
			
		||||
			i := 1
 | 
			
		||||
			for end := int(data[0]); i < end; i++ {
 | 
			
		||||
				dst[nDst] = data[i]
 | 
			
		||||
				nDst++
 | 
			
		||||
			}
 | 
			
		||||
			dst[nDst] = data[i] ^ src[nSrc+size-1]
 | 
			
		||||
			nDst++
 | 
			
		||||
		}
 | 
			
		||||
		nSrc += size
 | 
			
		||||
	}
 | 
			
		||||
	return nDst, nSrc, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type narrowTransform struct {
 | 
			
		||||
	transform.NopResetter
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (narrowTransform) Span(src []byte, atEOF bool) (n int, err error) {
 | 
			
		||||
	for n < len(src) {
 | 
			
		||||
		if src[n] < utf8.RuneSelf {
 | 
			
		||||
			// ASCII fast path.
 | 
			
		||||
			for n++; n < len(src) && src[n] < utf8.RuneSelf; n++ {
 | 
			
		||||
			}
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		v, size := trie.lookup(src[n:])
 | 
			
		||||
		if size == 0 { // incomplete UTF-8 encoding
 | 
			
		||||
			if !atEOF {
 | 
			
		||||
				err = transform.ErrShortSrc
 | 
			
		||||
			} else {
 | 
			
		||||
				n = len(src)
 | 
			
		||||
			}
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		if k := elem(v).kind(); byte(v) == 0 || k != EastAsianFullwidth && k != EastAsianWide && k != EastAsianAmbiguous {
 | 
			
		||||
		} else {
 | 
			
		||||
			err = transform.ErrEndOfSpan
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		n += size
 | 
			
		||||
	}
 | 
			
		||||
	return n, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (narrowTransform) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
 | 
			
		||||
	for nSrc < len(src) {
 | 
			
		||||
		if src[nSrc] < utf8.RuneSelf {
 | 
			
		||||
			// ASCII fast path.
 | 
			
		||||
			start, end := nSrc, len(src)
 | 
			
		||||
			if d := len(dst) - nDst; d < end-start {
 | 
			
		||||
				end = nSrc + d
 | 
			
		||||
			}
 | 
			
		||||
			for nSrc++; nSrc < end && src[nSrc] < utf8.RuneSelf; nSrc++ {
 | 
			
		||||
			}
 | 
			
		||||
			n := copy(dst[nDst:], src[start:nSrc])
 | 
			
		||||
			if nDst += n; nDst == len(dst) {
 | 
			
		||||
				nSrc = start + n
 | 
			
		||||
				if nSrc == len(src) {
 | 
			
		||||
					return nDst, nSrc, nil
 | 
			
		||||
				}
 | 
			
		||||
				if src[nSrc] < utf8.RuneSelf {
 | 
			
		||||
					return nDst, nSrc, transform.ErrShortDst
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		v, size := trie.lookup(src[nSrc:])
 | 
			
		||||
		if size == 0 { // incomplete UTF-8 encoding
 | 
			
		||||
			if !atEOF {
 | 
			
		||||
				return nDst, nSrc, transform.ErrShortSrc
 | 
			
		||||
			}
 | 
			
		||||
			size = 1 // gobble 1 byte
 | 
			
		||||
		}
 | 
			
		||||
		if k := elem(v).kind(); byte(v) == 0 || k != EastAsianFullwidth && k != EastAsianWide && k != EastAsianAmbiguous {
 | 
			
		||||
			if size != copy(dst[nDst:], src[nSrc:nSrc+size]) {
 | 
			
		||||
				return nDst, nSrc, transform.ErrShortDst
 | 
			
		||||
			}
 | 
			
		||||
			nDst += size
 | 
			
		||||
		} else {
 | 
			
		||||
			data := inverseData[byte(v)]
 | 
			
		||||
			if len(dst)-nDst < int(data[0]) {
 | 
			
		||||
				return nDst, nSrc, transform.ErrShortDst
 | 
			
		||||
			}
 | 
			
		||||
			i := 1
 | 
			
		||||
			for end := int(data[0]); i < end; i++ {
 | 
			
		||||
				dst[nDst] = data[i]
 | 
			
		||||
				nDst++
 | 
			
		||||
			}
 | 
			
		||||
			dst[nDst] = data[i] ^ src[nSrc+size-1]
 | 
			
		||||
			nDst++
 | 
			
		||||
		}
 | 
			
		||||
		nSrc += size
 | 
			
		||||
	}
 | 
			
		||||
	return nDst, nSrc, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type wideTransform struct {
 | 
			
		||||
	transform.NopResetter
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (wideTransform) Span(src []byte, atEOF bool) (n int, err error) {
 | 
			
		||||
	for n < len(src) {
 | 
			
		||||
		// TODO: Consider ASCII fast path. Special-casing ASCII handling can
 | 
			
		||||
		// reduce the ns/op of BenchmarkWideASCII by about 30%. This is probably
 | 
			
		||||
		// not enough to warrant the extra code and complexity.
 | 
			
		||||
		v, size := trie.lookup(src[n:])
 | 
			
		||||
		if size == 0 { // incomplete UTF-8 encoding
 | 
			
		||||
			if !atEOF {
 | 
			
		||||
				err = transform.ErrShortSrc
 | 
			
		||||
			} else {
 | 
			
		||||
				n = len(src)
 | 
			
		||||
			}
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		if k := elem(v).kind(); byte(v) == 0 || k != EastAsianHalfwidth && k != EastAsianNarrow {
 | 
			
		||||
		} else {
 | 
			
		||||
			err = transform.ErrEndOfSpan
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		n += size
 | 
			
		||||
	}
 | 
			
		||||
	return n, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (wideTransform) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
 | 
			
		||||
	for nSrc < len(src) {
 | 
			
		||||
		// TODO: Consider ASCII fast path. Special-casing ASCII handling can
 | 
			
		||||
		// reduce the ns/op of BenchmarkWideASCII by about 30%. This is probably
 | 
			
		||||
		// not enough to warrant the extra code and complexity.
 | 
			
		||||
		v, size := trie.lookup(src[nSrc:])
 | 
			
		||||
		if size == 0 { // incomplete UTF-8 encoding
 | 
			
		||||
			if !atEOF {
 | 
			
		||||
				return nDst, nSrc, transform.ErrShortSrc
 | 
			
		||||
			}
 | 
			
		||||
			size = 1 // gobble 1 byte
 | 
			
		||||
		}
 | 
			
		||||
		if k := elem(v).kind(); byte(v) == 0 || k != EastAsianHalfwidth && k != EastAsianNarrow {
 | 
			
		||||
			if size != copy(dst[nDst:], src[nSrc:nSrc+size]) {
 | 
			
		||||
				return nDst, nSrc, transform.ErrShortDst
 | 
			
		||||
			}
 | 
			
		||||
			nDst += size
 | 
			
		||||
		} else {
 | 
			
		||||
			data := inverseData[byte(v)]
 | 
			
		||||
			if len(dst)-nDst < int(data[0]) {
 | 
			
		||||
				return nDst, nSrc, transform.ErrShortDst
 | 
			
		||||
			}
 | 
			
		||||
			i := 1
 | 
			
		||||
			for end := int(data[0]); i < end; i++ {
 | 
			
		||||
				dst[nDst] = data[i]
 | 
			
		||||
				nDst++
 | 
			
		||||
			}
 | 
			
		||||
			dst[nDst] = data[i] ^ src[nSrc+size-1]
 | 
			
		||||
			nDst++
 | 
			
		||||
		}
 | 
			
		||||
		nSrc += size
 | 
			
		||||
	}
 | 
			
		||||
	return nDst, nSrc, nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										30
									
								
								vendor/golang.org/x/text/width/trieval.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										30
									
								
								vendor/golang.org/x/text/width/trieval.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,30 +0,0 @@
 | 
			
		||||
// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
 | 
			
		||||
 | 
			
		||||
package width
 | 
			
		||||
 | 
			
		||||
// elem is an entry of the width trie. The high byte is used to encode the type
 | 
			
		||||
// of the rune. The low byte is used to store the index to a mapping entry in
 | 
			
		||||
// the inverseData array.
 | 
			
		||||
type elem uint16
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	tagNeutral elem = iota << typeShift
 | 
			
		||||
	tagAmbiguous
 | 
			
		||||
	tagWide
 | 
			
		||||
	tagNarrow
 | 
			
		||||
	tagFullwidth
 | 
			
		||||
	tagHalfwidth
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	numTypeBits = 3
 | 
			
		||||
	typeShift   = 16 - numTypeBits
 | 
			
		||||
 | 
			
		||||
	// tagNeedsFold is true for all fullwidth and halfwidth runes except for
 | 
			
		||||
	// the Won sign U+20A9.
 | 
			
		||||
	tagNeedsFold = 0x1000
 | 
			
		||||
 | 
			
		||||
	// The Korean Won sign is halfwidth, but SHOULD NOT be mapped to a wide
 | 
			
		||||
	// variant.
 | 
			
		||||
	wonSign rune = 0x20A9
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										206
									
								
								vendor/golang.org/x/text/width/width.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										206
									
								
								vendor/golang.org/x/text/width/width.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,206 +0,0 @@
 | 
			
		||||
// Copyright 2015 The Go Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style
 | 
			
		||||
// license that can be found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
//go:generate stringer -type=Kind
 | 
			
		||||
//go:generate go run gen.go gen_common.go gen_trieval.go
 | 
			
		||||
 | 
			
		||||
// Package width provides functionality for handling different widths in text.
 | 
			
		||||
//
 | 
			
		||||
// Wide characters behave like ideographs; they tend to allow line breaks after
 | 
			
		||||
// each character and remain upright in vertical text layout. Narrow characters
 | 
			
		||||
// are kept together in words or runs that are rotated sideways in vertical text
 | 
			
		||||
// layout.
 | 
			
		||||
//
 | 
			
		||||
// For more information, see https://unicode.org/reports/tr11/.
 | 
			
		||||
package width // import "golang.org/x/text/width"
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"unicode/utf8"
 | 
			
		||||
 | 
			
		||||
	"golang.org/x/text/transform"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// TODO
 | 
			
		||||
// 1) Reduce table size by compressing blocks.
 | 
			
		||||
// 2) API proposition for computing display length
 | 
			
		||||
//    (approximation, fixed pitch only).
 | 
			
		||||
// 3) Implement display length.
 | 
			
		||||
 | 
			
		||||
// Kind indicates the type of width property as defined in https://unicode.org/reports/tr11/.
 | 
			
		||||
type Kind int
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	// Neutral characters do not occur in legacy East Asian character sets.
 | 
			
		||||
	Neutral Kind = iota
 | 
			
		||||
 | 
			
		||||
	// EastAsianAmbiguous characters that can be sometimes wide and sometimes
 | 
			
		||||
	// narrow and require additional information not contained in the character
 | 
			
		||||
	// code to further resolve their width.
 | 
			
		||||
	EastAsianAmbiguous
 | 
			
		||||
 | 
			
		||||
	// EastAsianWide characters are wide in its usual form. They occur only in
 | 
			
		||||
	// the context of East Asian typography. These runes may have explicit
 | 
			
		||||
	// halfwidth counterparts.
 | 
			
		||||
	EastAsianWide
 | 
			
		||||
 | 
			
		||||
	// EastAsianNarrow characters are narrow in its usual form. They often have
 | 
			
		||||
	// fullwidth counterparts.
 | 
			
		||||
	EastAsianNarrow
 | 
			
		||||
 | 
			
		||||
	// Note: there exist Narrow runes that do not have fullwidth or wide
 | 
			
		||||
	// counterparts, despite what the definition says (e.g. U+27E6).
 | 
			
		||||
 | 
			
		||||
	// EastAsianFullwidth characters have a compatibility decompositions of type
 | 
			
		||||
	// wide that map to a narrow counterpart.
 | 
			
		||||
	EastAsianFullwidth
 | 
			
		||||
 | 
			
		||||
	// EastAsianHalfwidth characters have a compatibility decomposition of type
 | 
			
		||||
	// narrow that map to a wide or ambiguous counterpart, plus U+20A9 ₩ WON
 | 
			
		||||
	// SIGN.
 | 
			
		||||
	EastAsianHalfwidth
 | 
			
		||||
 | 
			
		||||
	// Note: there exist runes that have a halfwidth counterparts but that are
 | 
			
		||||
	// classified as Ambiguous, rather than wide (e.g. U+2190).
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// TODO: the generated tries need to return size 1 for invalid runes for the
 | 
			
		||||
// width to be computed correctly (each byte should render width 1)
 | 
			
		||||
 | 
			
		||||
var trie = newWidthTrie(0)
 | 
			
		||||
 | 
			
		||||
// Lookup reports the Properties of the first rune in b and the number of bytes
 | 
			
		||||
// of its UTF-8 encoding.
 | 
			
		||||
func Lookup(b []byte) (p Properties, size int) {
 | 
			
		||||
	v, sz := trie.lookup(b)
 | 
			
		||||
	return Properties{elem(v), b[sz-1]}, sz
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// LookupString reports the Properties of the first rune in s and the number of
 | 
			
		||||
// bytes of its UTF-8 encoding.
 | 
			
		||||
func LookupString(s string) (p Properties, size int) {
 | 
			
		||||
	v, sz := trie.lookupString(s)
 | 
			
		||||
	return Properties{elem(v), s[sz-1]}, sz
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// LookupRune reports the Properties of rune r.
 | 
			
		||||
func LookupRune(r rune) Properties {
 | 
			
		||||
	var buf [4]byte
 | 
			
		||||
	n := utf8.EncodeRune(buf[:], r)
 | 
			
		||||
	v, _ := trie.lookup(buf[:n])
 | 
			
		||||
	last := byte(r)
 | 
			
		||||
	if r >= utf8.RuneSelf {
 | 
			
		||||
		last = 0x80 + byte(r&0x3f)
 | 
			
		||||
	}
 | 
			
		||||
	return Properties{elem(v), last}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Properties provides access to width properties of a rune.
 | 
			
		||||
type Properties struct {
 | 
			
		||||
	elem elem
 | 
			
		||||
	last byte
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (e elem) kind() Kind {
 | 
			
		||||
	return Kind(e >> typeShift)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Kind returns the Kind of a rune as defined in Unicode TR #11.
 | 
			
		||||
// See https://unicode.org/reports/tr11/ for more details.
 | 
			
		||||
func (p Properties) Kind() Kind {
 | 
			
		||||
	return p.elem.kind()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Folded returns the folded variant of a rune or 0 if the rune is canonical.
 | 
			
		||||
func (p Properties) Folded() rune {
 | 
			
		||||
	if p.elem&tagNeedsFold != 0 {
 | 
			
		||||
		buf := inverseData[byte(p.elem)]
 | 
			
		||||
		buf[buf[0]] ^= p.last
 | 
			
		||||
		r, _ := utf8.DecodeRune(buf[1 : 1+buf[0]])
 | 
			
		||||
		return r
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Narrow returns the narrow variant of a rune or 0 if the rune is already
 | 
			
		||||
// narrow or doesn't have a narrow variant.
 | 
			
		||||
func (p Properties) Narrow() rune {
 | 
			
		||||
	if k := p.elem.kind(); byte(p.elem) != 0 && (k == EastAsianFullwidth || k == EastAsianWide || k == EastAsianAmbiguous) {
 | 
			
		||||
		buf := inverseData[byte(p.elem)]
 | 
			
		||||
		buf[buf[0]] ^= p.last
 | 
			
		||||
		r, _ := utf8.DecodeRune(buf[1 : 1+buf[0]])
 | 
			
		||||
		return r
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Wide returns the wide variant of a rune or 0 if the rune is already
 | 
			
		||||
// wide or doesn't have a wide variant.
 | 
			
		||||
func (p Properties) Wide() rune {
 | 
			
		||||
	if k := p.elem.kind(); byte(p.elem) != 0 && (k == EastAsianHalfwidth || k == EastAsianNarrow) {
 | 
			
		||||
		buf := inverseData[byte(p.elem)]
 | 
			
		||||
		buf[buf[0]] ^= p.last
 | 
			
		||||
		r, _ := utf8.DecodeRune(buf[1 : 1+buf[0]])
 | 
			
		||||
		return r
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// TODO for Properties:
 | 
			
		||||
// - Add Fullwidth/Halfwidth or Inverted methods for computing variants
 | 
			
		||||
// mapping.
 | 
			
		||||
// - Add width information (including information on non-spacing runes).
 | 
			
		||||
 | 
			
		||||
// Transformer implements the transform.Transformer interface.
 | 
			
		||||
type Transformer struct {
 | 
			
		||||
	t transform.SpanningTransformer
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Reset implements the transform.Transformer interface.
 | 
			
		||||
func (t Transformer) Reset() { t.t.Reset() }
 | 
			
		||||
 | 
			
		||||
// Transform implements the transform.Transformer interface.
 | 
			
		||||
func (t Transformer) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
 | 
			
		||||
	return t.t.Transform(dst, src, atEOF)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Span implements the transform.SpanningTransformer interface.
 | 
			
		||||
func (t Transformer) Span(src []byte, atEOF bool) (n int, err error) {
 | 
			
		||||
	return t.t.Span(src, atEOF)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Bytes returns a new byte slice with the result of applying t to b.
 | 
			
		||||
func (t Transformer) Bytes(b []byte) []byte {
 | 
			
		||||
	b, _, _ = transform.Bytes(t, b)
 | 
			
		||||
	return b
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// String returns a string with the result of applying t to s.
 | 
			
		||||
func (t Transformer) String(s string) string {
 | 
			
		||||
	s, _, _ = transform.String(t, s)
 | 
			
		||||
	return s
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	// Fold is a transform that maps all runes to their canonical width.
 | 
			
		||||
	//
 | 
			
		||||
	// Note that the NFKC and NFKD transforms in golang.org/x/text/unicode/norm
 | 
			
		||||
	// provide a more generic folding mechanism.
 | 
			
		||||
	Fold Transformer = Transformer{foldTransform{}}
 | 
			
		||||
 | 
			
		||||
	// Widen is a transform that maps runes to their wide variant, if
 | 
			
		||||
	// available.
 | 
			
		||||
	Widen Transformer = Transformer{wideTransform{}}
 | 
			
		||||
 | 
			
		||||
	// Narrow is a transform that maps runes to their narrow variant, if
 | 
			
		||||
	// available.
 | 
			
		||||
	Narrow Transformer = Transformer{narrowTransform{}}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// TODO: Consider the following options:
 | 
			
		||||
// - Treat Ambiguous runes that have a halfwidth counterpart as wide, or some
 | 
			
		||||
//   generalized variant of this.
 | 
			
		||||
// - Consider a wide Won character to be the default width (or some generalized
 | 
			
		||||
//   variant of this).
 | 
			
		||||
// - Filter the set of characters that gets converted (the preferred approach is
 | 
			
		||||
//   to allow applying filters to transforms).
 | 
			
		||||
							
								
								
									
										3
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							@@ -311,7 +311,7 @@ github.com/google/cadvisor/utils/sysfs
 | 
			
		||||
github.com/google/cadvisor/utils/sysinfo
 | 
			
		||||
github.com/google/cadvisor/version
 | 
			
		||||
github.com/google/cadvisor/watcher
 | 
			
		||||
# github.com/google/cel-go v0.20.1
 | 
			
		||||
# github.com/google/cel-go v0.21.0
 | 
			
		||||
## explicit; go 1.18
 | 
			
		||||
github.com/google/cel-go/cel
 | 
			
		||||
github.com/google/cel-go/checker
 | 
			
		||||
@@ -930,7 +930,6 @@ golang.org/x/text/secure/bidirule
 | 
			
		||||
golang.org/x/text/transform
 | 
			
		||||
golang.org/x/text/unicode/bidi
 | 
			
		||||
golang.org/x/text/unicode/norm
 | 
			
		||||
golang.org/x/text/width
 | 
			
		||||
# golang.org/x/time v0.3.0
 | 
			
		||||
## explicit
 | 
			
		||||
golang.org/x/time/rate
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user