git.delta.rocks / jrsonnet / refs/commits / eced1a833d61

difftreelog

source

crates/jrsonnet-stdlib/src/std.jsonnet3.9 KiBsourcehistory
1{2  local std = self,34  thisFile:: error 'std.thisFile is deprecated, to enable its support in jrsonnet - recompile it with "legacy-this-file" support.\nThis will slow down stdlib caching a bit, though',56  lstripChars(str, chars)::7    if std.length(str) > 0 && std.member(chars, str[0]) then8      std.lstripChars(str[1:], chars)9    else10      str,1112  rstripChars(str, chars)::13    local len = std.length(str);14    if len > 0 && std.member(chars, str[len - 1]) then15      std.rstripChars(str[:len - 1], chars)16    else17      str,1819  stripChars(str, chars)::20    std.lstripChars(std.rstripChars(str, chars), chars),2122  mapWithIndex(func, arr)::23    if !std.isFunction(func) then24      error ('std.mapWithIndex first param must be function, got ' + std.type(func))25    else if !std.isArray(arr) && !std.isString(arr) then26      error ('std.mapWithIndex second param must be array, got ' + std.type(arr))27    else28      std.makeArray(std.length(arr), function(i) func(i, arr[i])),2930  mapWithKey(func, obj)::31    if !std.isFunction(func) then32      error ('std.mapWithKey first param must be function, got ' + std.type(func))33    else if !std.isObject(obj) then34      error ('std.mapWithKey second param must be object, got ' + std.type(obj))35    else36      { [k]: func(k, obj[k]) for k in std.objectFields(obj) },3738  lines(arr)::39    std.join('\n', arr + ['']),4041  deepJoin(arr)::42    if std.isString(arr) then43      arr44    else if std.isArray(arr) then45      std.join('', [std.deepJoin(x) for x in arr])46    else47      error 'Expected string or array, got %s' % std.type(arr),4849  assertEqual(a, b)::50    if a == b then51      true52    else53      error 'Assertion failed. ' + a + ' != ' + b,5455  manifestIni(ini)::56    local body_lines(body) =57      std.join([], [58        local value_or_values = body[k];59        if std.isArray(value_or_values) then60          ['%s = %s' % [k, value] for value in value_or_values]61        else62          ['%s = %s' % [k, value_or_values]]6364        for k in std.objectFields(body)65      ]);6667    local section_lines(sname, sbody) = ['[%s]' % [sname]] + body_lines(sbody),68          main_body = if std.objectHas(ini, 'main') then body_lines(ini.main) else [],69          all_sections = [70      section_lines(k, ini.sections[k])71      for k in std.objectFields(ini.sections)72    ];73    std.join('\n', main_body + std.flattenArrays(all_sections) + ['']),7475  mergePatch(target, patch)::76    if std.isObject(patch) then77      local target_object =78        if std.isObject(target) then target else {};7980      local target_fields =81        if std.isObject(target_object) then std.objectFields(target_object) else [];8283      local null_fields = [k for k in std.objectFields(patch) if patch[k] == null];84      local both_fields = std.setUnion(target_fields, std.objectFields(patch));8586      {87        [k]:88          if !std.objectHas(patch, k) then89            target_object[k]90          else if !std.objectHas(target_object, k) then91            std.mergePatch(null, patch[k]) tailstrict92          else93            std.mergePatch(target_object[k], patch[k]) tailstrict94        for k in std.setDiff(both_fields, null_fields)95      }96    else97      patch,9899  resolvePath(f, r)::100    local arr = std.split(f, '/');101    std.join('/', std.makeArray(std.length(arr) - 1, function(i) arr[i]) + [r]),102103  find(value, arr)::104    if !std.isArray(arr) then105      error 'find second parameter should be an array, got ' + std.type(arr)106    else107      std.filter(function(i) arr[i] == value, std.range(0, std.length(arr) - 1)),108109  // Compat110  __compare_array(arr1, arr2)::111    assert std.isArray(arr1) && std.isArray(arr2);112    std.__compare(arr1, arr2),113  __array_less(arr1, arr2):: std.__compare_array(arr1, arr2) == -1,114  __array_greater(arr1, arr2):: std.__compare_array(arr1, arr2) == 1,115  __array_less_or_equal(arr1, arr2):: std.__compare_array(arr1, arr2) <= 0,116  __array_greater_or_equal(arr1, arr2):: std.__compare_array(arr1, arr2) >= 0,117}