Files
pkl/stdlib/jsonnet.pkl
2025-11-03 12:26:58 -08:00

109 lines
3.6 KiB
Plaintext

//===----------------------------------------------------------------------===//
// Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
//
// 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
//
// https://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.
//===----------------------------------------------------------------------===//
/// A [Jsonnet](https://jsonnet.org) renderer.
@ModuleInfo { minPklVersion = "0.31.0" }
module pkl.jsonnet
/// Constructs an [ImportStr].
function ImportStr(_path: String): ImportStr = new { path = _path }
/// Constructs an [ExtVar].
function ExtVar(_name: String): ExtVar = new { name = _name }
/// Renders values as [Jsonnet](https://jsonnet.org).
///
/// Pkl values are mapped to Jsonnet values as follows:
///
/// | Pkl type | Jsonnet type |
/// | -------------- | --------------- |
/// | [Null] | null |
/// | [Boolean] | boolean |
/// | [Int] | number |
/// | [Float] | number |
/// | [String] | string |
/// | [List] | array |
/// | [Set] | array |
/// | [Map] | object |
/// | [Listing] | array |
/// | [Mapping] | object |
/// | [Dynamic] | object or array |
/// | [Typed] | object |
///
/// Some Pkl types, such as [Duration] and [DataSize], don't have a Jsonnet equivalent.
/// To render values of such types, define _output converters_ (see [Renderer.converters]).
///
/// The output is formatted according to _jsonnetfmt_.
/// To render an `importstr` construct, use [ImportStr()].
/// To render an `std.extVar()` call, use [ExtVar()].
///
/// Example:
/// ```
/// import "pkl:jsonnet"
///
/// server {
/// name = "Pigeon"
/// port = jsonnet.ExtVar("port")
/// message = jsonnet.ImportStr("/etc/motd")
/// timeout = 5.min
/// }
///
/// output {
/// renderer = new jsonnet.Renderer {}
/// converters {
/// [Duration] = (it) -> it.value + it.unit
/// }
/// }
/// ```
class Renderer extends ValueRenderer {
extension = "jsonnet"
/// The characters to use for indenting output.
///
/// If empty (`""`), renders everything on a single line.
///
/// If non-empty, renders object fields and array elements on separate lines,
/// and strings containing newlines as `|||` multiline text blocks,
/// with the given leading line [indent].
indent: String | /*Deprecated*/ Null = " "
/// Whether to omit Jsonnet object fields whose value is `null`.
omitNullProperties: Boolean = true
/// Renders [value] as a Jsonnet document.
///
/// Every Jsonnet value is a valid Jsonnet document.
external function renderDocument(value: Any): String
external function renderValue(value: Any): String
}
/// An `importstr` construct that, when evaluated by Jsonnet, returns the content of a UTF-8 text file.
///
/// To construct an [ImportStr], use method [ImportStr()].
class ImportStr {
/// The path of the file to import.
path: String
}
/// A `std.extVar()` call that, when evaluated by Jsonnet, returns the value of an external Jsonnet variable.
///
/// To construct an [ExtVar], use method [ExtVar()].
class ExtVar {
/// The external variable's name.
name: String
}