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 110 __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}