@minecraft/creator-tools 0.9.1 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/Carto.js +2 -1
- package/app/IProjectItemVariant.js +10 -0
- package/app/IProjectVariant.js +4 -0
- package/app/Project.js +183 -139
- package/app/ProjectAutogeneration.js +35 -33
- package/app/ProjectExporter.js +16 -16
- package/app/ProjectItem.js +178 -194
- package/app/ProjectItemManager.js +22 -21
- package/app/ProjectItemRelations.js +30 -30
- package/app/ProjectItemUtilities.js +94 -0
- package/app/ProjectItemVariant.js +254 -0
- package/app/ProjectStandard.js +8 -7
- package/app/ProjectUtilities.js +73 -39
- package/app/ProjectVariant.js +12 -0
- package/cli/TaskWorker.js +19 -0
- package/cli/index.js +1 -1
- package/core/Constants.js +1 -1
- package/core/Utilities.js +1 -0
- package/data/forms/biome/biome_definition.form.json +1887 -0
- package/data/forms/biome/biome_description.form.json +1 -1
- package/data/forms/biome/biome_json_file.form.json +233 -205
- package/data/forms/biome/biome_replacement.form.json +43 -0
- package/data/forms/biome/index.json +1 -1
- package/data/forms/biome/minecraft_capped_surface.form.json +16 -22
- package/data/forms/biome/minecraft_climate.form.json +8 -9
- package/data/forms/biome/minecraft_creature_spawn_probability.form.json +2 -3
- package/data/forms/biome/minecraft_frozen_ocean_surface.form.json +17 -23
- package/data/forms/biome/minecraft_mesa_surface.form.json +25 -33
- package/data/forms/biome/minecraft_mountain_parameters.form.json +11 -13
- package/data/forms/biome/minecraft_mountain_parameters_-_steep_material_adjustment_settings.form.json +70 -0
- package/data/forms/biome/minecraft_mountain_parameters_-_top_slide_settings.form.json +12 -0
- package/data/forms/biome/minecraft_multinoise_generation_rules.form.json +6 -7
- package/data/forms/biome/minecraft_overworld_generation_rules.form.json +6 -7
- package/data/forms/biome/minecraft_overworld_height.form.json +2 -3
- package/data/forms/biome/minecraft_replace_biomes.form.json +55 -0
- package/data/forms/biome/minecraft_surface_material_adjustments.form.json +21 -27
- package/data/forms/biome/minecraft_surface_material_adjustments_-_surface_adjustment_materials_settings.form.json +206 -0
- package/data/forms/biome/minecraft_surface_material_adjustments_-_surface_adjustment_settings.form.json +250 -0
- package/data/forms/biome/minecraft_surface_parameters.form.json +17 -23
- package/data/forms/biome/minecraft_swamp_surface.form.json +17 -23
- package/data/forms/biome/minecraft_tags.form.json +2 -3
- package/data/forms/block/culling_layer.form.json +11 -0
- package/data/forms/block/index.json +1 -1
- package/data/forms/block/minecraft_breathability.form.json +1 -0
- package/data/forms/block/minecraft_collision_box.form.json +19 -2
- package/data/forms/block/minecraft_crafting_table.form.json +14 -2
- package/data/forms/block/minecraft_custom_components.form.json +1 -0
- package/data/forms/block/minecraft_destructible_by_explosion.form.json +8 -2
- package/data/forms/block/minecraft_destructible_by_mining.form.json +34 -2
- package/data/forms/block/minecraft_geometry.form.json +40 -30
- package/data/forms/block/minecraft_item_visual.form.json +18 -2
- package/data/forms/block/minecraft_material_instances.form.json +1 -0
- package/data/forms/camera/index.json +1 -1
- package/data/forms/camera/v1_21_70_camerapresetfile.form.json +1 -1
- package/data/forms/camera/v1_21_80_camerapresetfile.form.json +282 -0
- package/data/forms/client_biome/client_biome_definition.form.json +300 -0
- package/data/forms/client_biome/client_biome_description.form.json +1 -1
- package/data/forms/client_biome/client_biome_json_file.form.json +33 -33
- package/data/forms/client_biome/foliage_color_map.form.json +12 -0
- package/data/forms/client_biome/grass_color_map.form.json +12 -0
- package/data/forms/client_biome/index.json +1 -1
- package/data/forms/client_biome/minecraft_ambient_sounds.form.json +3 -3
- package/data/forms/client_biome/minecraft_atmosphere_identifier.form.json +2 -3
- package/data/forms/client_biome/minecraft_biome_music.form.json +3 -4
- package/data/forms/client_biome/minecraft_color_grading_identifier.form.json +2 -3
- package/data/forms/client_biome/minecraft_dry_foliage_color.form.json +2 -3
- package/data/forms/client_biome/minecraft_fog_appearance.form.json +2 -3
- package/data/forms/client_biome/minecraft_foliage_appearance.form.json +2 -3
- package/data/forms/client_biome/minecraft_grass_appearance.form.json +2 -3
- package/data/forms/client_biome/minecraft_lighting_identifier.form.json +2 -3
- package/data/forms/client_biome/minecraft_sky_color.form.json +2 -3
- package/data/forms/client_biome/minecraft_water_appearance.form.json +3 -4
- package/data/forms/client_biome/minecraft_water_identifier.form.json +2 -3
- package/data/forms/client_block/block_culling.form.json +65 -0
- package/data/forms/client_block/index.json +1 -1
- package/data/forms/config/commands.form.json +2 -4
- package/data/forms/entity/filter_test.form.json +35 -0
- package/data/forms/entity/index.json +1 -1
- package/data/forms/entity/minecraft_interact.form.json +7 -0
- package/data/forms/entity/minecraft_leashable.form.json +7 -0
- package/data/forms/entityfilters/has_equipment_tag.form.json +173 -0
- package/data/forms/entityfilters/index.json +1 -1
- package/data/forms/index.json +1 -1
- package/data/forms/item/80.form.json +1428 -0
- package/data/forms/item/description.form.json +48 -0
- package/data/forms/item/index.json +1 -1
- package/data/forms/item/menu_category.form.json +30 -0
- package/data/forms/item/minecraft_block_placer.form.json +13 -11
- package/data/forms/item/minecraft_bundle_interaction.form.json +1 -1
- package/data/forms/item/minecraft_compostable.form.json +1 -1
- package/data/forms/item/minecraft_cooldown.form.json +2 -2
- package/data/forms/item/minecraft_damage_absorption.form.json +1 -1
- package/data/forms/item/minecraft_digger.form.json +7 -12
- package/data/forms/item/minecraft_display_name.form.json +1 -1
- package/data/forms/item/minecraft_durability.form.json +4 -7
- package/data/forms/item/minecraft_durability_sensor.form.json +4 -4
- package/data/forms/item/minecraft_durability_sensor_durability_threshold.form.json +4 -4
- package/data/forms/item/minecraft_dyeable.form.json +3 -3
- package/data/forms/item/minecraft_enchantable.form.json +2 -2
- package/data/forms/item/minecraft_entity_placer.form.json +16 -18
- package/data/forms/item/minecraft_food.form.json +58 -58
- package/data/forms/item/minecraft_icon.form.json +69 -7
- package/data/forms/item/minecraft_projectile.form.json +9 -3
- package/data/forms/item/minecraft_record.form.json +3 -3
- package/data/forms/item/minecraft_repairable.form.json +5 -9
- package/data/forms/item/minecraft_shooter.form.json +8 -9
- package/data/forms/item/minecraft_storage_item.form.json +4 -4
- package/data/forms/item/minecraft_storage_weight_limit.form.json +155 -3
- package/data/forms/item/minecraft_storage_weight_modifier.form.json +155 -3
- package/data/forms/item/minecraft_tags.form.json +1 -1
- package/data/forms/item/minecraft_throwable.form.json +6 -6
- package/data/forms/item/minecraft_use_modifiers.form.json +2 -2
- package/data/forms/item/minecraft_wearable.form.json +2 -2
- package/data/forms/misc/biome_replacement.form.json +43 -0
- package/data/forms/misc/bounds.form.json +35 -0
- package/data/forms/misc/class_v1_21_80_jigsawblockmetadata.form.json +59 -0
- package/data/forms/misc/crafting_catalog_category.form.json +8 -10
- package/data/forms/misc/crafting_catalog_document.form.json +9 -11
- package/data/forms/misc/crafting_catalog_group.form.json +90 -0
- package/data/forms/misc/crafting_catalog_group_icon.form.json +48 -0
- package/data/forms/misc/description.form.json +10 -0
- package/data/forms/misc/dimension.form.json +85 -0
- package/data/forms/misc/dimensiondocument.form.json +9 -24
- package/data/forms/misc/emitter_initialization.form.json +6 -15
- package/data/forms/misc/emitter_lifetime_events_proxy.form.json +95 -0
- package/data/forms/misc/emitter_lifetime_events_travel_distance_events.form.json +25 -0
- package/data/forms/misc/emitter_lifetime_expression.form.json +6 -15
- package/data/forms/misc/emitter_lifetime_looping.form.json +6 -15
- package/data/forms/misc/emitter_lifetime_once.form.json +3 -8
- package/data/forms/misc/emitter_local_space_proxy.form.json +20 -0
- package/data/forms/misc/emitter_rate_instant.form.json +3 -8
- package/data/forms/misc/emitter_rate_manual.form.json +3 -8
- package/data/forms/misc/emitter_rate_steady.form.json +6 -15
- package/data/forms/misc/emitter_shape_box.form.json +10 -24
- package/data/forms/misc/emitter_shape_custom.form.json +6 -15
- package/data/forms/misc/emitter_shape_disc.form.json +13 -31
- package/data/forms/misc/emitter_shape_entity_aabb.form.json +4 -10
- package/data/forms/misc/emitter_shape_point.form.json +6 -15
- package/data/forms/misc/emitter_shape_sphere.form.json +10 -24
- package/data/forms/misc/generation.form.json +10 -0
- package/data/forms/misc/index.json +1 -1
- package/data/forms/misc/minecraft_aim_assist_categories.form.json +9 -13
- package/data/forms/misc/minecraft_aim_assist_preset.form.json +8 -10
- package/data/forms/misc/minecraft_dimension_bounds.form.json +36 -0
- package/data/forms/misc/minecraft_generation.form.json +11 -0
- package/data/forms/misc/minecraft_jigsaw_structure_metadata.form.json +3 -5
- package/data/forms/misc/particle_appearance_billboard.form.json +6 -14
- package/data/forms/misc/particle_appearance_billboard_flipbook_data.form.json +11 -25
- package/data/forms/misc/particle_appearance_tinting.form.json +9 -23
- package/data/forms/misc/particle_curve_bezier_chain.form.json +5 -12
- package/data/forms/misc/particle_curve_bezier_chain_node_proxy.form.json +35 -0
- package/data/forms/misc/particle_curve_linear.form.json +10 -24
- package/data/forms/misc/particle_effect.form.json +274 -648
- package/data/forms/misc/particle_effect_basic_render_parameters.form.json +2 -4
- package/data/forms/misc/particle_effect_component.form.json +179 -428
- package/data/forms/misc/particle_effect_description.form.json +33 -0
- package/data/forms/misc/particle_event_node.form.json +72 -169
- package/data/forms/misc/particle_event_random_node.form.json +600 -0
- package/data/forms/misc/particle_initial_spin.form.json +6 -15
- package/data/forms/misc/particle_initialization.form.json +6 -15
- package/data/forms/misc/particle_lifetime_expression.form.json +6 -15
- package/data/forms/misc/particle_motion_collision.form.json +12 -28
- package/data/forms/misc/particle_motion_collision_event.form.json +15 -0
- package/data/forms/misc/particle_motion_dynamic.form.json +12 -29
- package/data/forms/misc/particle_motion_parametric.form.json +9 -22
- package/data/forms/misc/particle_sound_effect_event.form.json +10 -0
- package/data/forms/misc/particle_visual_effect_event.form.json +46 -0
- package/data/forms/molang/index.json +1 -0
- package/data/forms/molang/query_above_top_solid.form.json +6 -0
- package/data/forms/molang/query_actor_count.form.json +6 -0
- package/data/forms/molang/query_all.form.json +6 -0
- package/data/forms/molang/query_all_animations_finished.form.json +6 -0
- package/data/forms/molang/query_all_tags.form.json +6 -0
- package/data/forms/molang/query_anger_level.form.json +6 -0
- package/data/forms/molang/query_anim_time.form.json +6 -0
- package/data/forms/molang/query_any.form.json +6 -0
- package/data/forms/molang/query_any_animation_finished.form.json +6 -0
- package/data/forms/molang/query_any_tag.form.json +6 -0
- package/data/forms/molang/query_approx_eq.form.json +6 -0
- package/data/forms/molang/query_armor_color_slot.form.json +6 -0
- package/data/forms/molang/query_armor_damage_slot.form.json +6 -0
- package/data/forms/molang/query_armor_material_slot.form.json +6 -0
- package/data/forms/molang/query_armor_texture_slot.form.json +6 -0
- package/data/forms/molang/query_average_frame_time.form.json +6 -0
- package/data/forms/molang/query_block_face.form.json +6 -0
- package/data/forms/molang/query_block_has_all_tags.form.json +6 -0
- package/data/forms/molang/query_block_has_any_tag.form.json +6 -0
- package/data/forms/molang/query_block_neighbor_has_all_tags.form.json +6 -0
- package/data/forms/molang/query_block_neighbor_has_any_tag.form.json +6 -0
- package/data/forms/molang/query_block_property.form.json +6 -0
- package/data/forms/molang/query_block_state.form.json +6 -0
- package/data/forms/molang/query_blocking.form.json +6 -0
- package/data/forms/molang/query_body_x_rotation.form.json +6 -0
- package/data/forms/molang/query_body_y_rotation.form.json +6 -0
- package/data/forms/molang/query_bone_aabb.form.json +6 -0
- package/data/forms/molang/query_bone_orientation_matrix.form.json +6 -0
- package/data/forms/molang/query_bone_orientation_trs.form.json +6 -0
- package/data/forms/molang/query_bone_origin.form.json +6 -0
- package/data/forms/molang/query_bone_rotation.form.json +6 -0
- package/data/forms/molang/query_camera_distance_range_lerp.form.json +6 -0
- package/data/forms/molang/query_camera_rotation.form.json +6 -0
- package/data/forms/molang/query_can_climb.form.json +6 -0
- package/data/forms/molang/query_can_damage_nearby_mobs.form.json +6 -0
- package/data/forms/molang/query_can_dash.form.json +6 -0
- package/data/forms/molang/query_can_fly.form.json +6 -0
- package/data/forms/molang/query_can_power_jump.form.json +6 -0
- package/data/forms/molang/query_can_swim.form.json +6 -0
- package/data/forms/molang/query_can_walk.form.json +6 -0
- package/data/forms/molang/query_cape_flap_amount.form.json +6 -0
- package/data/forms/molang/query_cardinal_block_face_placed_on.form.json +6 -0
- package/data/forms/molang/query_cardinal_facing.form.json +6 -0
- package/data/forms/molang/query_cardinal_facing_2d.form.json +6 -0
- package/data/forms/molang/query_cardinal_player_facing.form.json +6 -0
- package/data/forms/molang/query_client_max_render_distance.form.json +6 -0
- package/data/forms/molang/query_client_memory_tier.form.json +6 -0
- package/data/forms/molang/query_combine_entities.form.json +6 -0
- package/data/forms/molang/query_cooldown_time.form.json +6 -0
- package/data/forms/molang/query_cooldown_time_remaining.form.json +6 -0
- package/data/forms/molang/query_count.form.json +6 -0
- package/data/forms/molang/query_current_squish_value.form.json +6 -0
- package/data/forms/molang/query_dash_cooldown_progress.form.json +6 -0
- package/data/forms/molang/query_day.form.json +6 -0
- package/data/forms/molang/query_death_ticks.form.json +6 -0
- package/data/forms/molang/query_debug_output.form.json +6 -0
- package/data/forms/molang/query_delta_time.form.json +6 -0
- package/data/forms/molang/query_distance_from_camera.form.json +6 -0
- package/data/forms/molang/query_effect_emitter_count.form.json +6 -0
- package/data/forms/molang/query_effect_particle_count.form.json +6 -0
- package/data/forms/molang/query_equipment_count.form.json +6 -0
- package/data/forms/molang/query_equipped_item_all_tags.form.json +6 -0
- package/data/forms/molang/query_equipped_item_any_tag.form.json +6 -0
- package/data/forms/molang/query_equipped_item_is_attachable.form.json +6 -0
- package/data/forms/molang/query_eye_target_x_rotation.form.json +6 -0
- package/data/forms/molang/query_eye_target_y_rotation.form.json +6 -0
- package/data/forms/molang/query_facing_target_to_range_attack.form.json +6 -0
- package/data/forms/molang/query_frame_alpha.form.json +6 -0
- package/data/forms/molang/query_get_actor_info_id.form.json +6 -0
- package/data/forms/molang/query_get_animation_frame.form.json +6 -0
- package/data/forms/molang/query_get_default_bone_pivot.form.json +6 -0
- package/data/forms/molang/query_get_equipped_item_name.form.json +6 -0
- package/data/forms/molang/query_get_locator_offset.form.json +6 -0
- package/data/forms/molang/query_get_name.form.json +6 -0
- package/data/forms/molang/query_get_root_locator_offset.form.json +6 -0
- package/data/forms/molang/query_graphics_mode_is_any.form.json +6 -0
- package/data/forms/molang/query_ground_speed.form.json +6 -0
- package/data/forms/molang/query_had_component_group.form.json +6 -0
- package/data/forms/molang/query_has_any_family.form.json +6 -0
- package/data/forms/molang/query_has_any_leashed_entity_of_type.form.json +6 -0
- package/data/forms/molang/query_has_armor_slot.form.json +6 -0
- package/data/forms/molang/query_has_biome_tag.form.json +6 -0
- package/data/forms/molang/query_has_block_property.form.json +6 -0
- package/data/forms/molang/query_has_block_state.form.json +6 -0
- package/data/forms/molang/query_has_cape.form.json +6 -0
- package/data/forms/molang/query_has_collision.form.json +6 -0
- package/data/forms/molang/query_has_dash_cooldown.form.json +6 -0
- package/data/forms/molang/query_has_gravity.form.json +6 -0
- package/data/forms/molang/query_has_head_gear.form.json +6 -0
- package/data/forms/molang/query_has_owner.form.json +6 -0
- package/data/forms/molang/query_has_player_rider.form.json +6 -0
- package/data/forms/molang/query_has_property.form.json +6 -0
- package/data/forms/molang/query_has_rider.form.json +6 -0
- package/data/forms/molang/query_has_target.form.json +6 -0
- package/data/forms/molang/query_head_roll_angle.form.json +6 -0
- package/data/forms/molang/query_head_x_rotation.form.json +6 -0
- package/data/forms/molang/query_head_y_rotation.form.json +6 -0
- package/data/forms/molang/query_health.form.json +6 -0
- package/data/forms/molang/query_heartbeat_interval.form.json +6 -0
- package/data/forms/molang/query_heartbeat_phase.form.json +6 -0
- package/data/forms/molang/query_heightmap.form.json +6 -0
- package/data/forms/molang/query_hurt_direction.form.json +6 -0
- package/data/forms/molang/query_hurt_time.form.json +6 -0
- package/data/forms/molang/query_in_range.form.json +6 -0
- package/data/forms/molang/query_invulnerable_ticks.form.json +6 -0
- package/data/forms/molang/query_is_admiring.form.json +6 -0
- package/data/forms/molang/query_is_alive.form.json +6 -0
- package/data/forms/molang/query_is_angry.form.json +6 -0
- package/data/forms/molang/query_is_attached.form.json +6 -0
- package/data/forms/molang/query_is_attached_to_entity.form.json +6 -0
- package/data/forms/molang/query_is_avoiding_block.form.json +6 -0
- package/data/forms/molang/query_is_avoiding_mobs.form.json +6 -0
- package/data/forms/molang/query_is_baby.form.json +6 -0
- package/data/forms/molang/query_is_breathing.form.json +6 -0
- package/data/forms/molang/query_is_bribed.form.json +6 -0
- package/data/forms/molang/query_is_carrying_block.form.json +6 -0
- package/data/forms/molang/query_is_casting.form.json +6 -0
- package/data/forms/molang/query_is_celebrating.form.json +6 -0
- package/data/forms/molang/query_is_celebrating_special.form.json +6 -0
- package/data/forms/molang/query_is_charged.form.json +6 -0
- package/data/forms/molang/query_is_charging.form.json +6 -0
- package/data/forms/molang/query_is_chested.form.json +6 -0
- package/data/forms/molang/query_is_cooldown_type.form.json +6 -0
- package/data/forms/molang/query_is_crawling.form.json +6 -0
- package/data/forms/molang/query_is_critical.form.json +6 -0
- package/data/forms/molang/query_is_croaking.form.json +6 -0
- package/data/forms/molang/query_is_dancing.form.json +6 -0
- package/data/forms/molang/query_is_delayed_attacking.form.json +6 -0
- package/data/forms/molang/query_is_digging.form.json +6 -0
- package/data/forms/molang/query_is_eating.form.json +6 -0
- package/data/forms/molang/query_is_eating_mob.form.json +6 -0
- package/data/forms/molang/query_is_elder.form.json +6 -0
- package/data/forms/molang/query_is_emerging.form.json +6 -0
- package/data/forms/molang/query_is_emoting.form.json +6 -0
- package/data/forms/molang/query_is_enchanted.form.json +6 -0
- package/data/forms/molang/query_is_feeling_happy.form.json +6 -0
- package/data/forms/molang/query_is_fire_immune.form.json +6 -0
- package/data/forms/molang/query_is_first_person.form.json +6 -0
- package/data/forms/molang/query_is_ghost.form.json +6 -0
- package/data/forms/molang/query_is_gliding.form.json +6 -0
- package/data/forms/molang/query_is_grazing.form.json +6 -0
- package/data/forms/molang/query_is_idling.form.json +6 -0
- package/data/forms/molang/query_is_ignited.form.json +6 -0
- package/data/forms/molang/query_is_illager_captain.form.json +6 -0
- package/data/forms/molang/query_is_in_contact_with_water.form.json +6 -0
- package/data/forms/molang/query_is_in_lava.form.json +6 -0
- package/data/forms/molang/query_is_in_love.form.json +6 -0
- package/data/forms/molang/query_is_in_ui.form.json +6 -0
- package/data/forms/molang/query_is_in_water.form.json +6 -0
- package/data/forms/molang/query_is_in_water_or_rain.form.json +6 -0
- package/data/forms/molang/query_is_interested.form.json +6 -0
- package/data/forms/molang/query_is_invisible.form.json +6 -0
- package/data/forms/molang/query_is_item_equipped.form.json +6 -0
- package/data/forms/molang/query_is_item_name_any.form.json +6 -0
- package/data/forms/molang/query_is_jump_goal_jumping.form.json +6 -0
- package/data/forms/molang/query_is_jumping.form.json +6 -0
- package/data/forms/molang/query_is_laying_down.form.json +6 -0
- package/data/forms/molang/query_is_laying_egg.form.json +6 -0
- package/data/forms/molang/query_is_leashed.form.json +6 -0
- package/data/forms/molang/query_is_levitating.form.json +6 -0
- package/data/forms/molang/query_is_lingering.form.json +6 -0
- package/data/forms/molang/query_is_local_player.form.json +6 -0
- package/data/forms/molang/query_is_moving.form.json +6 -0
- package/data/forms/molang/query_is_name_any.form.json +6 -0
- package/data/forms/molang/query_is_on_fire.form.json +6 -0
- package/data/forms/molang/query_is_on_ground.form.json +6 -0
- package/data/forms/molang/query_is_on_screen.form.json +6 -0
- package/data/forms/molang/query_is_onfire.form.json +6 -0
- package/data/forms/molang/query_is_orphaned.form.json +6 -0
- package/data/forms/molang/query_is_owner_identifier_any.form.json +6 -0
- package/data/forms/molang/query_is_persona_or_premium_skin.form.json +6 -0
- package/data/forms/molang/query_is_playing_dead.form.json +6 -0
- package/data/forms/molang/query_is_powered.form.json +6 -0
- package/data/forms/molang/query_is_pregnant.form.json +6 -0
- package/data/forms/molang/query_is_ram_attacking.form.json +6 -0
- package/data/forms/molang/query_is_resting.form.json +6 -0
- package/data/forms/molang/query_is_riding.form.json +6 -0
- package/data/forms/molang/query_is_rising.form.json +6 -0
- package/data/forms/molang/query_is_roaring.form.json +6 -0
- package/data/forms/molang/query_is_rolling.form.json +6 -0
- package/data/forms/molang/query_is_saddled.form.json +6 -0
- package/data/forms/molang/query_is_scared.form.json +6 -0
- package/data/forms/molang/query_is_scenting.form.json +6 -0
- package/data/forms/molang/query_is_searching.form.json +6 -0
- package/data/forms/molang/query_is_selected_item.form.json +6 -0
- package/data/forms/molang/query_is_shaking.form.json +6 -0
- package/data/forms/molang/query_is_shaking_wetness.form.json +6 -0
- package/data/forms/molang/query_is_sheared.form.json +6 -0
- package/data/forms/molang/query_is_shield_powered.form.json +6 -0
- package/data/forms/molang/query_is_silent.form.json +6 -0
- package/data/forms/molang/query_is_sitting.form.json +6 -0
- package/data/forms/molang/query_is_sleeping.form.json +6 -0
- package/data/forms/molang/query_is_sneaking.form.json +6 -0
- package/data/forms/molang/query_is_sneezing.form.json +6 -0
- package/data/forms/molang/query_is_sniffing.form.json +6 -0
- package/data/forms/molang/query_is_sonic_boom.form.json +6 -0
- package/data/forms/molang/query_is_spectator.form.json +6 -0
- package/data/forms/molang/query_is_sprinting.form.json +6 -0
- package/data/forms/molang/query_is_stackable.form.json +6 -0
- package/data/forms/molang/query_is_stalking.form.json +6 -0
- package/data/forms/molang/query_is_standing.form.json +6 -0
- package/data/forms/molang/query_is_stunned.form.json +6 -0
- package/data/forms/molang/query_is_swimming.form.json +6 -0
- package/data/forms/molang/query_is_tamed.form.json +6 -0
- package/data/forms/molang/query_is_transforming.form.json +6 -0
- package/data/forms/molang/query_is_using_item.form.json +6 -0
- package/data/forms/molang/query_is_wall_climbing.form.json +6 -0
- package/data/forms/molang/query_item_in_use_duration.form.json +6 -0
- package/data/forms/molang/query_item_is_charged.form.json +6 -0
- package/data/forms/molang/query_item_max_use_duration.form.json +6 -0
- package/data/forms/molang/query_item_remaining_use_duration.form.json +6 -0
- package/data/forms/molang/query_item_slot_to_bone_name.form.json +6 -0
- package/data/forms/molang/query_key_frame_lerp_time.form.json +6 -0
- package/data/forms/molang/query_last_frame_time.form.json +6 -0
- package/data/forms/molang/query_last_hit_by_player.form.json +6 -0
- package/data/forms/molang/query_last_input_mode_is_any.form.json +6 -0
- package/data/forms/molang/query_leashed_entity_count.form.json +6 -0
- package/data/forms/molang/query_lie_amount.form.json +6 -0
- package/data/forms/molang/query_life_span.form.json +6 -0
- package/data/forms/molang/query_life_time.form.json +6 -0
- package/data/forms/molang/query_lod_index.form.json +6 -0
- package/data/forms/molang/query_log.form.json +6 -0
- package/data/forms/molang/query_main_hand_item_max_duration.form.json +6 -0
- package/data/forms/molang/query_main_hand_item_use_duration.form.json +6 -0
- package/data/forms/molang/query_mark_variant.form.json +6 -0
- package/data/forms/molang/query_max_durability.form.json +6 -0
- package/data/forms/molang/query_max_health.form.json +6 -0
- package/data/forms/molang/query_max_trade_tier.form.json +6 -0
- package/data/forms/molang/query_maximum_frame_time.form.json +6 -0
- package/data/forms/molang/query_minimum_frame_time.form.json +6 -0
- package/data/forms/molang/query_model_scale.form.json +6 -0
- package/data/forms/molang/query_modified_distance_moved.form.json +6 -0
- package/data/forms/molang/query_modified_move_speed.form.json +6 -0
- package/data/forms/molang/query_moon_brightness.form.json +6 -0
- package/data/forms/molang/query_moon_phase.form.json +6 -0
- package/data/forms/molang/query_movement_direction.form.json +6 -0
- package/data/forms/molang/query_noise.form.json +6 -0
- package/data/forms/molang/query_on_fire_time.form.json +6 -0
- package/data/forms/molang/query_out_of_control.form.json +6 -0
- package/data/forms/molang/query_overlay_alpha.form.json +6 -0
- package/data/forms/molang/query_owner_identifier.form.json +6 -0
- package/data/forms/molang/query_player_level.form.json +6 -0
- package/data/forms/molang/query_position.form.json +6 -0
- package/data/forms/molang/query_position_delta.form.json +6 -0
- package/data/forms/molang/query_previous_squish_value.form.json +6 -0
- package/data/forms/molang/query_property.form.json +6 -0
- package/data/forms/molang/query_relative_block_has_all_tags.form.json +6 -0
- package/data/forms/molang/query_relative_block_has_any_tag.form.json +6 -0
- package/data/forms/molang/query_remaining_durability.form.json +6 -0
- package/data/forms/molang/query_ride_body_x_rotation.form.json +6 -0
- package/data/forms/molang/query_ride_body_y_rotation.form.json +6 -0
- package/data/forms/molang/query_ride_head_x_rotation.form.json +6 -0
- package/data/forms/molang/query_ride_head_y_rotation.form.json +6 -0
- package/data/forms/molang/query_rider_body_x_rotation.form.json +6 -0
- package/data/forms/molang/query_rider_body_y_rotation.form.json +6 -0
- package/data/forms/molang/query_rider_head_x_rotation.form.json +6 -0
- package/data/forms/molang/query_rider_head_y_rotation.form.json +6 -0
- package/data/forms/molang/query_roll_counter.form.json +6 -0
- package/data/forms/molang/query_rotation_to_camera.form.json +6 -0
- package/data/forms/molang/query_scoreboard.form.json +6 -0
- package/data/forms/molang/query_server_memory_tier.form.json +6 -0
- package/data/forms/molang/query_shake_angle.form.json +6 -0
- package/data/forms/molang/query_shake_time.form.json +6 -0
- package/data/forms/molang/query_shield_blocking_bob.form.json +6 -0
- package/data/forms/molang/query_show_bottom.form.json +6 -0
- package/data/forms/molang/query_sit_amount.form.json +6 -0
- package/data/forms/molang/query_skin_id.form.json +6 -0
- package/data/forms/molang/query_sleep_rotation.form.json +6 -0
- package/data/forms/molang/query_sneeze_counter.form.json +6 -0
- package/data/forms/molang/query_spellcolor.form.json +6 -0
- package/data/forms/molang/query_standing_scale.form.json +6 -0
- package/data/forms/molang/query_state_time.form.json +6 -0
- package/data/forms/molang/query_structural_integrity.form.json +6 -0
- package/data/forms/molang/query_surface_particle_color.form.json +6 -0
- package/data/forms/molang/query_surface_particle_texture_coordinate.form.json +6 -0
- package/data/forms/molang/query_surface_particle_texture_size.form.json +6 -0
- package/data/forms/molang/query_swell_amount.form.json +6 -0
- package/data/forms/molang/query_swelling_dir.form.json +6 -0
- package/data/forms/molang/query_swim_amount.form.json +6 -0
- package/data/forms/molang/query_tail_angle.form.json +6 -0
- package/data/forms/molang/query_target_x_rotation.form.json +6 -0
- package/data/forms/molang/query_target_y_rotation.form.json +6 -0
- package/data/forms/molang/query_texture_frame_index.form.json +6 -0
- package/data/forms/molang/query_time_of_day.form.json +6 -0
- package/data/forms/molang/query_time_since_last_vibration_detection.form.json +6 -0
- package/data/forms/molang/query_time_stamp.form.json +6 -0
- package/data/forms/molang/query_timer_flag_1.form.json +6 -0
- package/data/forms/molang/query_timer_flag_2.form.json +6 -0
- package/data/forms/molang/query_timer_flag_3.form.json +6 -0
- package/data/forms/molang/query_total_emitter_count.form.json +6 -0
- package/data/forms/molang/query_total_particle_count.form.json +6 -0
- package/data/forms/molang/query_touch_only_affects_hotbar.form.json +6 -0
- package/data/forms/molang/query_trade_tier.form.json +6 -0
- package/data/forms/molang/query_unhappy_counter.form.json +6 -0
- package/data/forms/molang/query_variant.form.json +6 -0
- package/data/forms/molang/query_vertical_speed.form.json +6 -0
- package/data/forms/molang/query_walk_distance.form.json +6 -0
- package/data/forms/molang/query_wing_flap_position.form.json +6 -0
- package/data/forms/molang/query_wing_flap_speed.form.json +6 -0
- package/data/forms/molang/query_yaw_speed.form.json +6 -0
- package/data/forms/spawn/filter_test.form.json +35 -0
- package/data/forms/spawn/index.json +1 -1
- package/data/forms/world/feature_rule_conditions.form.json +115 -0
- package/data/forms/world/feature_rule_definition.form.json +35 -47
- package/data/forms/world/feature_rule_description.form.json +17 -0
- package/data/forms/world/filter_test.form.json +35 -0
- package/data/forms/world/index.json +1 -1
- package/data/forms/world/jigsawstructure.form.json +22 -25
- package/data/forms/world/scatter_params.form.json +18 -25
- package/data/mci/release.mci.json +1 -1
- package/docgen/FormJsonDocumentationGenerator.js +20 -10
- package/docgen/FormMarkdownDocumentationGenerator.js +13 -3
- package/info/AnimationResourceInfoGenerator.js +2 -2
- package/info/CooperativeAddOnItemRequirementsGenerator.js +17 -17
- package/info/CooperativeAddOnRequirementsGenerator.js +3 -3
- package/info/GeneratorRegistrations.js +2 -0
- package/info/GeometryInfoGenerator.js +3 -3
- package/info/IProjectInfoData.js +1 -0
- package/info/PackInfoGenerator.js +11 -11
- package/info/ProjectInfoSet.js +10 -1
- package/info/ProjectInfoUtilities.js +11 -0
- package/info/SchemaItemInfoGenerator.js +4 -2
- package/info/SharingInfoGenerator.js +101 -0
- package/info/StrictPlatformInfoGenerator.js +4 -4
- package/info/TextureImageInfoGenerator.js +54 -26
- package/info/TextureInfoGenerator.js +19 -19
- package/info/TextureReferenceInfoGenerator.js +6 -6
- package/info/TypesInfoGenerator.js +8 -8
- package/info/WorldDataInfoGenerator.js +6 -6
- package/integrations/BlockbenchModel.js +33 -32
- package/local/HttpServer.js +8 -9
- package/manager/BaseGameVersionManager.js +4 -4
- package/manager/BlocksCatalogManager.js +4 -4
- package/manager/EntityTypeManager.js +4 -4
- package/manager/FormatVersionManager.js +24 -24
- package/manager/ItemTypeManager.js +4 -4
- package/manager/MinEngineVersionManager.js +14 -14
- package/manager/ScriptModuleManager.js +6 -6
- package/manager/VsCodeFileManager.js +10 -10
- package/maps/app/Carto.js.map +1 -1
- package/maps/app/IProjectData.js.map +1 -1
- package/maps/app/IProjectItemData.js.map +1 -1
- package/maps/app/IProjectItemVariant.js.map +1 -0
- package/maps/app/IProjectVariant.js.map +1 -0
- package/maps/app/Project.js.map +1 -1
- package/maps/app/ProjectAutogeneration.js.map +1 -1
- package/maps/app/ProjectExporter.js.map +1 -1
- package/maps/app/ProjectItem.js.map +1 -1
- package/maps/app/ProjectItemManager.js.map +1 -1
- package/maps/app/ProjectItemRelations.js.map +1 -1
- package/maps/app/ProjectItemUtilities.js.map +1 -1
- package/maps/app/ProjectItemVariant.js.map +1 -0
- package/maps/app/ProjectStandard.js.map +1 -1
- package/maps/app/ProjectUtilities.js.map +1 -1
- package/maps/app/ProjectVariant.js.map +1 -0
- package/maps/cli/TaskWorker.js.map +1 -1
- package/maps/cli/index.js.map +1 -1
- package/maps/core/Constants.js.map +1 -1
- package/maps/core/Utilities.js.map +1 -1
- package/maps/docgen/FormJsonDocumentationGenerator.js.map +1 -1
- package/maps/docgen/FormMarkdownDocumentationGenerator.js.map +1 -1
- package/maps/info/AnimationResourceInfoGenerator.js.map +1 -1
- package/maps/info/CooperativeAddOnItemRequirementsGenerator.js.map +1 -1
- package/maps/info/CooperativeAddOnRequirementsGenerator.js.map +1 -1
- package/maps/info/GeneratorRegistrations.js.map +1 -1
- package/maps/info/GeometryInfoGenerator.js.map +1 -1
- package/maps/info/IProjectInfoData.js.map +1 -1
- package/maps/info/PackInfoGenerator.js.map +1 -1
- package/maps/info/ProjectInfoSet.js.map +1 -1
- package/maps/info/ProjectInfoUtilities.js.map +1 -1
- package/maps/info/SchemaItemInfoGenerator.js.map +1 -1
- package/maps/info/SharingInfoGenerator.js.map +1 -0
- package/maps/info/StrictPlatformInfoGenerator.js.map +1 -1
- package/maps/info/TextureImageInfoGenerator.js.map +1 -1
- package/maps/info/TextureInfoGenerator.js.map +1 -1
- package/maps/info/TextureReferenceInfoGenerator.js.map +1 -1
- package/maps/info/TypesInfoGenerator.js.map +1 -1
- package/maps/info/WorldDataInfoGenerator.js.map +1 -1
- package/maps/integrations/BlockbenchModel.js.map +1 -1
- package/maps/local/HttpServer.js.map +1 -1
- package/maps/manager/BaseGameVersionManager.js.map +1 -1
- package/maps/manager/BlocksCatalogManager.js.map +1 -1
- package/maps/manager/EntityTypeManager.js.map +1 -1
- package/maps/manager/FormatVersionManager.js.map +1 -1
- package/maps/manager/ItemTypeManager.js.map +1 -1
- package/maps/manager/MinEngineVersionManager.js.map +1 -1
- package/maps/manager/ScriptModuleManager.js.map +1 -1
- package/maps/manager/VsCodeFileManager.js.map +1 -1
- package/maps/minecraft/AttachableResourceDefinition.js.map +1 -1
- package/maps/minecraft/BehaviorManifestDefinition.js.map +1 -1
- package/maps/minecraft/BlockTypeDefinition.js.map +1 -1
- package/maps/minecraft/BlocksCatalogDefinition.js.map +1 -1
- package/maps/minecraft/Database.js.map +1 -1
- package/maps/minecraft/EntityTypeDefinition.js.map +1 -1
- package/maps/minecraft/EntityTypeResourceDefinition.js.map +1 -1
- package/maps/minecraft/FlipbookTextureCatalogDefinition.js.map +1 -1
- package/maps/minecraft/ItemTextureCatalogDefinition.js.map +1 -1
- package/maps/minecraft/ItemTypeBehaviorDefinition.js.map +1 -1
- package/maps/minecraft/JsonUIResourceDefinition.js.map +1 -1
- package/maps/minecraft/LocManager.js.map +1 -1
- package/maps/minecraft/MCWorld.js.map +1 -1
- package/maps/minecraft/MinecraftDefinitions.js.map +1 -1
- package/maps/minecraft/MusicDefinitionCatalogDefinition.js.map +1 -1
- package/maps/minecraft/ParticleEffectResourceDefinition.js.map +1 -1
- package/maps/minecraft/ResourceManifestDefinition.js.map +1 -1
- package/maps/minecraft/SoundCatalogDefinition.js.map +1 -1
- package/maps/minecraft/SoundDefinitionCatalogDefinition.js.map +1 -1
- package/maps/minecraft/TerrainTextureCatalogDefinition.js.map +1 -1
- package/maps/storage/BasicValidators.js.map +1 -1
- package/maps/test/CartoTest.js.map +1 -1
- package/minecraft/AttachableResourceDefinition.js +10 -10
- package/minecraft/BehaviorManifestDefinition.js +6 -6
- package/minecraft/BlockTypeDefinition.js +10 -10
- package/minecraft/BlocksCatalogDefinition.js +2 -2
- package/minecraft/Database.js +1 -1
- package/minecraft/EntityTypeDefinition.js +4 -4
- package/minecraft/EntityTypeResourceDefinition.js +12 -12
- package/minecraft/FlipbookTextureCatalogDefinition.js +4 -4
- package/minecraft/ItemTextureCatalogDefinition.js +2 -2
- package/minecraft/ItemTypeBehaviorDefinition.js +7 -0
- package/minecraft/JsonUIResourceDefinition.js +2 -2
- package/minecraft/LocManager.js +2 -2
- package/minecraft/MCWorld.js +4 -4
- package/minecraft/MinecraftDefinitions.js +23 -21
- package/minecraft/MusicDefinitionCatalogDefinition.js +2 -2
- package/minecraft/ParticleEffectResourceDefinition.js +4 -4
- package/minecraft/ResourceManifestDefinition.js +17 -3
- package/minecraft/SoundCatalogDefinition.js +6 -5
- package/minecraft/SoundDefinitionCatalogDefinition.js +4 -4
- package/minecraft/TerrainTextureCatalogDefinition.js +2 -2
- package/package.json +1 -1
- package/storage/BasicValidators.js +20 -9
- package/data/forms/clientbiome/index.json +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/Utilities.ts"],"names":[],"mappings":"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","file":"../../core/Utilities.js","sourcesContent":["// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport CartoApp, { HostType } from \"../app/CartoApp\";\r\nimport { FieldValueHumanify } from \"../dataform/IField\";\r\nimport { IErrorable } from \"./IErrorable\";\r\nimport Log from \"./Log\";\r\n\r\nconst singleComment = Symbol(\"singleComment\");\r\nconst multiComment = Symbol(\"multiComment\");\r\n\r\nexport default class Utilities {\r\n static _isDebug?: boolean;\r\n static _isAppSim?: boolean;\r\n static defaultEncoding = \"UTF-8\";\r\n static replacementChar = 0xfffd;\r\n\r\n static async sleep(ms: number) {\r\n return new Promise((resolve) => {\r\n setTimeout(resolve, ms);\r\n });\r\n }\r\n\r\n static get isPreview(): boolean {\r\n return false;\r\n }\r\n\r\n static get isAppSim(): boolean {\r\n if (Utilities._isAppSim === undefined) {\r\n Utilities._isAppSim = false;\r\n }\r\n\r\n return Utilities._isAppSim;\r\n }\r\n\r\n static get isDebug(): boolean {\r\n if (Utilities._isDebug === undefined) {\r\n Utilities._isDebug = false;\r\n }\r\n\r\n return Utilities._isDebug;\r\n }\r\n\r\n static selectJsonObject(jsonO: object, select: string, ensureObjects?: boolean): object | undefined {\r\n const selectors = select.split(\"/\");\r\n\r\n for (const selector of selectors) {\r\n if (selector.length > 0) {\r\n jsonO = (jsonO as any)[selector];\r\n\r\n if (!jsonO && !ensureObjects) {\r\n return undefined;\r\n }\r\n if (!jsonO && ensureObjects) {\r\n (jsonO as any)[selector] = {};\r\n jsonO = (jsonO as any)[selector];\r\n }\r\n }\r\n }\r\n\r\n return jsonO;\r\n }\r\n\r\n static removeItemInArray(objToRemove: any, stringArr: any[]) {\r\n const nextArray: any[] = [];\r\n\r\n for (const candStr of stringArr) {\r\n if (candStr !== objToRemove) {\r\n nextArray.push(candStr);\r\n }\r\n }\r\n\r\n return nextArray;\r\n }\r\n\r\n static isArrayNonNegative(arr: number[]) {\r\n for (const val of arr) {\r\n if (val < 0) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n static arrayHasNegativeAndIsNumeric(arr: any[]) {\r\n let foundNegative = false;\r\n for (const val of arr) {\r\n if (typeof val !== \"number\") {\r\n return false;\r\n } else if (val < 0) {\r\n foundNegative = true;\r\n }\r\n }\r\n\r\n return foundNegative;\r\n }\r\n\r\n static encodeObjectWithSequentialRunLengthEncodeUsingNegative(obj: { [key: string]: any }) {\r\n for (const key in obj) {\r\n const val: any = obj[key];\r\n if (val !== undefined) {\r\n if (typeof val === \"object\" && !Array.isArray(val)) {\r\n this.encodeObjectWithSequentialRunLengthEncodeUsingNegative(val);\r\n } else if (Array.isArray(val)) {\r\n let isNumericArray = true;\r\n for (const arrVal of val) {\r\n if (typeof arrVal !== \"number\") {\r\n isNumericArray = false;\r\n break;\r\n }\r\n }\r\n\r\n if (isNumericArray) {\r\n obj[key] = this.encodeSequentialRunLengthUsingNegative(val);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n static decodeSequentialRunLengthUsingNegative(arr: number[]) {\r\n if (this.isArrayNonNegative(arr)) {\r\n return arr;\r\n }\r\n\r\n const newArr: number[] = [];\r\n\r\n newArr.push(arr[0]);\r\n\r\n for (let i = 1; i < arr.length; i++) {\r\n if (arr[i] < 0) {\r\n let startVal = arr[i - 1];\r\n\r\n for (let j = 0; j < Math.abs(arr[i]); j++) {\r\n startVal++;\r\n\r\n newArr.push(startVal);\r\n }\r\n } else {\r\n newArr.push(arr[i]);\r\n }\r\n }\r\n return newArr;\r\n }\r\n\r\n /* Convert a numeric array from:\r\n [1, 2, 3, 7, 9, 10, 15, 16, 17, 18]\r\n to a \"sequential run length encode\", where negative numbers are used to indicate a \"run\"\r\n so the above becomes \r\n [1, -2, 7, 9, -1, 15, -3]\r\n */\r\n static encodeSequentialRunLengthUsingNegative(arr: number[]) {\r\n if (!this.isArrayNonNegative(arr)) {\r\n return arr;\r\n }\r\n\r\n arr.sort();\r\n\r\n const newArr: number[] = [];\r\n\r\n newArr.push(arr[0]);\r\n\r\n let streak = -1;\r\n\r\n for (let i = 1; i < arr.length; i++) {\r\n if (arr[i] === arr[i - 1] + 1) {\r\n if (streak < 1) {\r\n streak = 1;\r\n } else {\r\n streak++;\r\n }\r\n } else {\r\n if (streak >= 1) {\r\n newArr.push(-streak);\r\n streak = -1;\r\n }\r\n\r\n newArr.push(arr[i]);\r\n }\r\n }\r\n\r\n if (streak >= 1) {\r\n newArr.push(-streak);\r\n streak = -1;\r\n }\r\n\r\n return newArr;\r\n }\r\n\r\n static trimEllipsis(text: string, length: number) {\r\n if (text.length > length) {\r\n text = text.substring(0, length - 1) + \"…\";\r\n }\r\n\r\n return text;\r\n }\r\n\r\n static makeHashFileSafe(hash: string) {\r\n hash = hash.replace(/\\//gi, \"-S\");\r\n hash = hash.replace(/\\+/gi, \"-P\");\r\n hash = hash.replace(/\\\\/gi, \"-B\");\r\n hash = hash.replace(/=/gi, \"-E\");\r\n hash = hash.replace(/,/gi, \"-C\");\r\n\r\n return hash;\r\n }\r\n\r\n static getSimpleNumeric(num: number | undefined) {\r\n if (num === undefined) {\r\n return \"\";\r\n }\r\n\r\n if (num < 1000) {\r\n return num.toString();\r\n }\r\n\r\n if (num < 1000) {\r\n return Math.floor(num / 100) / 10 + \"k\";\r\n }\r\n\r\n if (num > 1000000) {\r\n return Math.floor(num / 100000) / 10 + \"m\";\r\n }\r\n\r\n return Math.floor(num / 1000) + \"k\";\r\n }\r\n\r\n static humanifyJsName(name: string | boolean | number) {\r\n if (typeof name === \"boolean\" || typeof name === \"number\") {\r\n return name.toString();\r\n }\r\n\r\n let retVal = \"\";\r\n\r\n for (let i = 0; i < name.length; i++) {\r\n if (i === 0) {\r\n retVal += name[i].toUpperCase();\r\n } else {\r\n if (name[i] >= \"A\" && name[i] <= \"Z\") {\r\n retVal += \" \";\r\n }\r\n\r\n retVal += name[i];\r\n }\r\n }\r\n\r\n retVal = retVal.replace(\"Java Script\", \"JavaScript\");\r\n\r\n return retVal;\r\n }\r\n\r\n static humanifyObject(sampVal: any) {\r\n if (typeof sampVal === \"object\") {\r\n sampVal = JSON.stringify(sampVal, undefined, 2);\r\n } else {\r\n sampVal = sampVal.toString();\r\n }\r\n\r\n sampVal = sampVal.trim();\r\n\r\n if (sampVal.startsWith(\"[\") && sampVal.endsWith(\"]\")) {\r\n sampVal = sampVal.substring(1, sampVal.length - 1);\r\n sampVal = sampVal.replace(/\"/gi, \"\");\r\n }\r\n\r\n if (sampVal.startsWith(\"{\") && sampVal.endsWith(\"}\")) {\r\n sampVal = sampVal.substring(1, sampVal.length - 1);\r\n }\r\n\r\n return sampVal;\r\n }\r\n\r\n static ensureLooksLikeSentence(name: string) {\r\n if (name.length > 1) {\r\n if (name[0] >= \"a\" && name[0] <= \"z\") {\r\n name = name[0].toUpperCase() + name.substring(1, name.length);\r\n }\r\n }\r\n\r\n if (!name.endsWith(\".\")) {\r\n name = name + \".\";\r\n }\r\n\r\n return name;\r\n }\r\n\r\n static dehumanify(val: string | boolean | number, humanify?: FieldValueHumanify) {\r\n if (!humanify) {\r\n return val;\r\n }\r\n\r\n return Utilities.dehumanifyMinecraftName(val);\r\n }\r\n\r\n static humanify(val: string | boolean | number | number[] | string[] | object, humanify?: FieldValueHumanify) {\r\n if (!humanify || val === undefined) {\r\n return val;\r\n }\r\n\r\n if (humanify === FieldValueHumanify.general) {\r\n return Utilities.humanifyObject(val);\r\n }\r\n\r\n if (typeof val === \"object\") {\r\n return JSON.stringify(val);\r\n }\r\n\r\n if (Array.isArray(val)) {\r\n return val;\r\n }\r\n\r\n return Utilities.humanifyMinecraftName(val);\r\n }\r\n\r\n static ensureFirstCharIsUpperCase(name: string) {\r\n if (name.length > 1) {\r\n if (name[0] >= \"a\" && name[0] <= \"z\") {\r\n name = name[0].toUpperCase() + name.substring(1, name.length);\r\n }\r\n }\r\n return name;\r\n }\r\n\r\n static humanifyString(val: string, humanify?: FieldValueHumanify) {\r\n if (!humanify || val === undefined) {\r\n return val;\r\n }\r\n\r\n if (humanify === FieldValueHumanify.general) {\r\n return Utilities.humanifyObject(val).toString();\r\n }\r\n\r\n return Utilities.humanifyMinecraftName(val) as string;\r\n }\r\n\r\n static getHumanifiedObjectName(name: string | boolean | number) {\r\n if (typeof name !== \"string\") {\r\n name = name.toString();\r\n }\r\n\r\n let firstColon = name.indexOf(\":\");\r\n\r\n if (firstColon >= 0) {\r\n name = name.substring(firstColon + 1);\r\n }\r\n\r\n name = Utilities.humanifyMinecraftName(name);\r\n name = name.replace(/ /gi, \"\");\r\n\r\n return name;\r\n }\r\n\r\n static sanitizeJavascriptName(name: string) {\r\n name = name.trim();\r\n\r\n name = name.replace(/</gi, \"LessThan\");\r\n name = name.replace(/>/gi, \"GreaterThan\");\r\n name = name.replace(/=/gi, \"Equals\");\r\n name = name.replace(/!/gi, \"Not\");\r\n name = name.replace(/\\+/gi, \"Plus\");\r\n name = name.replace(/,/gi, \"\");\r\n name = name.replace(/-/gi, \"\");\r\n name = name.replace(/\\./gi, \"\");\r\n name = name.replace(/'/gi, \"\");\r\n name = name.replace(/ /gi, \"\");\r\n name = name.replace(/\\[/gi, \"\");\r\n name = name.replace(/\\]/gi, \"\");\r\n name = name.replace(/\"/gi, \"\");\r\n name = name.replace(/\\{/gi, \"\");\r\n name = name.replace(/\\}/gi, \"\");\r\n name = name.replace(/</gi, \"\");\r\n name = name.replace(/>/gi, \"\");\r\n name = name.replace(/\\*/gi, \"\");\r\n name = name.replace(/\\?/gi, \"\");\r\n name = name.replace(/\\\\/gi, \"\");\r\n name = name.replace(/\\|/gi, \"\");\r\n\r\n if (name.length > 0 && name[0] >= \"0\" && name[0] <= \"9\") {\r\n name = \"_\" + name;\r\n }\r\n\r\n if (name.indexOf(\":\") >= 0) {\r\n name = '\"' + name + '\"';\r\n }\r\n\r\n return name;\r\n }\r\n\r\n static javascriptifyName(name: string, capitalizeFrst?: boolean) {\r\n name = name.trim();\r\n\r\n let retVal = \"\";\r\n let capitalizeNext = capitalizeFrst === true;\r\n\r\n for (let i = 0; i < name.length; i++) {\r\n if (\r\n name[i] === \" \" ||\r\n name[i] === \"_\" ||\r\n name[i] === \":\" ||\r\n name[i] === \",\" ||\r\n name[i] === \".\" ||\r\n name[i] === '\"' ||\r\n name[i] === \"'\" ||\r\n name[i] === \"+\" ||\r\n name[i] === \"-\" ||\r\n name[i] === \":\" ||\r\n name[i] === \"[\" ||\r\n name[i] === \"]\"\r\n ) {\r\n capitalizeNext = true;\r\n } else {\r\n if (capitalizeNext) {\r\n retVal += name[i].toUpperCase();\r\n\r\n capitalizeNext = false;\r\n } else {\r\n retVal += name[i];\r\n }\r\n }\r\n }\r\n\r\n retVal = this.sanitizeJavascriptName(retVal);\r\n\r\n return retVal;\r\n }\r\n\r\n static humanifyMinecraftName(name: string | boolean | number) {\r\n if (typeof name === \"boolean\" || typeof name === \"number\") {\r\n return name.toString();\r\n }\r\n\r\n if (name.endsWith(\".behavior\")) {\r\n name = name.substring(0, name.length - 9);\r\n } else if (name.endsWith(\".geo\")) {\r\n name = name.substring(0, name.length - 4);\r\n } else if (name.endsWith(\".entity\")) {\r\n name = name.substring(0, name.length - 7);\r\n }\r\n\r\n const colon = name.indexOf(\":\");\r\n\r\n if (colon >= 0 && name.substring(0, colon) === \"minecraft\") {\r\n name = name.substring(colon + 1);\r\n }\r\n\r\n const leftBracket = name.indexOf(\"[\");\r\n const rightBracket = name.indexOf(\"]\");\r\n\r\n if (leftBracket >= 0 && rightBracket > leftBracket) {\r\n name = name.substring(0, leftBracket) + name.substring(rightBracket + 1);\r\n }\r\n\r\n if (name.endsWith(\".\")) {\r\n name = name.substring(0, name.length - 1);\r\n }\r\n\r\n name = name.replace(/[_]/gi, \" \");\r\n\r\n if (name.endsWith(\"_bit\")) {\r\n name = name.substring(0, name.length - 4);\r\n }\r\n\r\n name = name.replace(/::/gi, \" \");\r\n name = name.replace(/:/gi, \" \");\r\n\r\n name = name.replace(\"SharedTypes \", \"\");\r\n\r\n if (name.startsWith(\"Struct \") || name.startsWith(\"struct \")) {\r\n name = name.substring(7);\r\n }\r\n\r\n if ((name.startsWith(\"Enum \") || name.startsWith(\"enum \")) && name.indexOf(\"num_property\") < 0) {\r\n name = name.substring(5);\r\n }\r\n\r\n const lastPeriod = name.indexOf(\".\");\r\n\r\n if (lastPeriod >= 4) {\r\n name = name.substring(lastPeriod + 1) + \" \" + name.substring(0, lastPeriod);\r\n }\r\n\r\n /*\r\n if (name.length > 1) {\r\n if (name[0] >= \"a\" && name[0] <= \"z\") {\r\n name = name[0].toUpperCase() + name.substring(1, name.length);\r\n }\r\n }*/\r\n\r\n let lastCharWasSpace = false;\r\n\r\n for (let i = 0; i < name.length; i++) {\r\n if (name[i] === \" \") {\r\n lastCharWasSpace = true;\r\n } else {\r\n if ((lastCharWasSpace || i === 0) && name[i] >= \"a\" && name[i] <= \"z\") {\r\n name = name.substring(0, i) + name[i].toUpperCase() + name.substring(i + 1);\r\n }\r\n lastCharWasSpace = false;\r\n }\r\n }\r\n\r\n return name;\r\n }\r\n\r\n static dehumanifyMinecraftName(name: string | boolean | number) {\r\n if (!name || typeof name === \"boolean\" || typeof name === \"number\") {\r\n return name;\r\n }\r\n\r\n // if this is already a technical name, return;\r\n if (name.indexOf(\":\") >= 0) {\r\n return name;\r\n }\r\n\r\n name = name.toLowerCase();\r\n\r\n name = name.replace(/ /gi, \"_\");\r\n name = \"minecraft:\" + name;\r\n\r\n return name;\r\n }\r\n\r\n static stringFormat(templateString: string, ...vals: any[]) {\r\n var args = arguments;\r\n return arguments[0].replace(/{(\\d+)}/g, function (content: any, interior: string) {\r\n try {\r\n const num = parseInt(interior);\r\n\r\n if (!isNaN(num)) {\r\n return args[num + 1] !== undefined ? args[num + 1] : content;\r\n }\r\n } catch (e) {}\r\n\r\n return content;\r\n });\r\n }\r\n\r\n static convertToHexString(byteArray: number[]) {\r\n return Array.from(byteArray, function (byte) {\r\n return (\"0\" + (byte & 0xff).toString(16)).slice(-2);\r\n }).join(\"\");\r\n }\r\n\r\n static countSignificantLines(content: string) {\r\n if (content.length <= 0) {\r\n return 0;\r\n }\r\n let lineCount = 1;\r\n let curStart = 0;\r\n let nextNewline = content.indexOf(\"\\n\");\r\n\r\n while (nextNewline >= curStart) {\r\n let curContent = content.substring(curStart, nextNewline).trim();\r\n\r\n if (curContent.length > 1) {\r\n lineCount++;\r\n }\r\n curStart = nextNewline + 1;\r\n nextNewline = content.indexOf(\"\\n\", curStart);\r\n }\r\n\r\n return lineCount;\r\n }\r\n\r\n static stripLinesContaining(content: string, lineContains: string) {\r\n let i = content.indexOf(lineContains);\r\n\r\n while (i >= 0) {\r\n let prevNewLine = content.lastIndexOf(\"\\n\", i);\r\n if (prevNewLine < 0) {\r\n prevNewLine = 0;\r\n }\r\n\r\n let nextNewLine = content.indexOf(\"\\n\", i);\r\n\r\n if (nextNewLine < 0) {\r\n nextNewLine = content.length;\r\n }\r\n\r\n content = content.substring(0, prevNewLine) + content.substring(nextNewLine, content.length);\r\n\r\n i = content.indexOf(lineContains);\r\n }\r\n\r\n return content;\r\n }\r\n\r\n static stripWithoutWhitespace = () => \"\";\r\n static stripWithWhitespace = (str: string, start: number | undefined, end: number | undefined) =>\r\n str.slice(start, end).replace(/\\S/g, \" \");\r\n\r\n static replaceJsonValue(jsonContent: string, attributeName: string, newValue: string) {\r\n let nextAttribute = jsonContent.indexOf('\"' + attributeName + '\":');\r\n\r\n while (nextAttribute >= 0) {\r\n const subsequentOpenQuote = jsonContent.indexOf('\"', nextAttribute + attributeName.length + 3);\r\n\r\n if (\r\n subsequentOpenQuote > nextAttribute + attributeName.length + 2 &&\r\n subsequentOpenQuote < nextAttribute + attributeName.length + 7\r\n ) {\r\n const subsequentEndQuote = jsonContent.indexOf('\"', subsequentOpenQuote + 1);\r\n\r\n if (subsequentEndQuote > subsequentOpenQuote) {\r\n jsonContent =\r\n jsonContent.substring(0, subsequentOpenQuote + 1) + newValue + jsonContent.substring(subsequentEndQuote);\r\n }\r\n }\r\n\r\n nextAttribute = jsonContent.indexOf('\"' + attributeName + '\":', nextAttribute + attributeName.length + 2);\r\n }\r\n\r\n return jsonContent;\r\n }\r\n\r\n public static makeJsonVersionAgnostic(jsonContent: string) {\r\n jsonContent = Utilities.replaceJsonValue(jsonContent, \"generatorVersion\", \"TESTSUB\");\r\n jsonContent = Utilities.replaceJsonValue(jsonContent, \"uuid\", \"TESTSUB\");\r\n\r\n return jsonContent;\r\n }\r\n\r\n static isEscaped(jsonString: string, quotePosition: number) {\r\n let index = quotePosition - 1;\r\n let backslashCount = 0;\r\n\r\n while (jsonString[index] === \"\\\\\") {\r\n index -= 1;\r\n backslashCount += 1;\r\n }\r\n\r\n return Boolean(backslashCount % 2);\r\n }\r\n\r\n static fixJsonContent(jsonString: string, { whitespace = true, trailingCommas = false } = {}) {\r\n if (typeof jsonString !== \"string\") {\r\n throw new TypeError(`Expected argument \\`jsonString\\` to be a \\`string\\`, got \\`${typeof jsonString}\\``);\r\n }\r\n\r\n const strip = whitespace ? Utilities.stripWithWhitespace : Utilities.stripWithoutWhitespace;\r\n\r\n let isInsideString = false;\r\n let isInsideComment: boolean | symbol = false;\r\n let offset = 0;\r\n let buffer = \"\";\r\n let result = \"\";\r\n let commaIndex = -1;\r\n\r\n for (let index = 0; index < jsonString.length; index++) {\r\n const currentCharacter = jsonString[index];\r\n const nextCharacter = jsonString[index + 1];\r\n\r\n if (!isInsideComment && currentCharacter === '\"') {\r\n // Enter or exit string\r\n const escaped = Utilities.isEscaped(jsonString, index);\r\n if (!escaped) {\r\n isInsideString = !isInsideString;\r\n }\r\n }\r\n\r\n if (isInsideString) {\r\n // fix control characters inside of strings, if they exist\r\n if (currentCharacter === \"\\r\" || currentCharacter === \"\\n\" || currentCharacter === \"\\t\") {\r\n jsonString = jsonString.substring(0, index) + \" \" + jsonString.substring(index + 1);\r\n }\r\n continue;\r\n }\r\n\r\n if (!isInsideComment && currentCharacter + nextCharacter === \"//\") {\r\n // Enter single-line comment\r\n buffer += jsonString.slice(offset, index);\r\n offset = index;\r\n isInsideComment = singleComment;\r\n index++;\r\n } else if (isInsideComment === singleComment && currentCharacter + nextCharacter === \"\\r\\n\") {\r\n // Exit single-line comment via \\r\\n\r\n index++;\r\n isInsideComment = false;\r\n buffer += strip(jsonString, offset, index);\r\n offset = index;\r\n continue;\r\n } else if (isInsideComment === singleComment && currentCharacter === \"\\n\") {\r\n // Exit single-line comment via \\n\r\n isInsideComment = false;\r\n buffer += strip(jsonString, offset, index);\r\n offset = index;\r\n } else if (!isInsideComment && currentCharacter + nextCharacter === \"/*\") {\r\n // Enter multiline comment\r\n buffer += jsonString.slice(offset, index);\r\n offset = index;\r\n isInsideComment = multiComment;\r\n index++;\r\n continue;\r\n } else if (isInsideComment === multiComment && currentCharacter + nextCharacter === \"*/\") {\r\n // Exit multiline comment\r\n index++;\r\n isInsideComment = false;\r\n buffer += strip(jsonString, offset, index + 1);\r\n offset = index + 1;\r\n continue;\r\n } else if (trailingCommas && !isInsideComment) {\r\n if (commaIndex !== -1) {\r\n if (currentCharacter === \"}\" || currentCharacter === \"]\") {\r\n // Strip trailing comma\r\n buffer += jsonString.slice(offset, index);\r\n result += strip(buffer, 0, 1) + buffer.slice(1);\r\n buffer = \"\";\r\n offset = index;\r\n commaIndex = -1;\r\n } else if (\r\n currentCharacter !== \" \" &&\r\n currentCharacter !== \"\\t\" &&\r\n currentCharacter !== \"\\r\" &&\r\n currentCharacter !== \"\\n\"\r\n ) {\r\n // Hit non-whitespace following a comma; comma is not trailing\r\n buffer += jsonString.slice(offset, index);\r\n offset = index;\r\n commaIndex = -1;\r\n }\r\n } else if (currentCharacter === \",\") {\r\n // Flush buffer prior to this point, and save new comma index\r\n result += buffer + jsonString.slice(offset, index);\r\n buffer = \"\";\r\n offset = index;\r\n commaIndex = index;\r\n }\r\n }\r\n }\r\n\r\n let results =\r\n result +\r\n buffer +\r\n (isInsideComment ? strip(jsonString.slice(offset), undefined, undefined) : jsonString.slice(offset));\r\n\r\n results = results.replace(/,(\\s*)]/g, \"]\"); // [\"a\", \"b\", ] => [\"a\", \"b\"]\r\n results = results.replace(/,(\\s*)}/g, \"}\"); // { \"foo\": \"bar\", } => { \"foo\": \"bar\"}\r\n\r\n return results;\r\n }\r\n\r\n static setIsDebug(boolVal: boolean) {\r\n Utilities._isDebug = boolVal;\r\n }\r\n\r\n static getBaseUrl(url: string) {\r\n if (url.length < 8) {\r\n return url;\r\n }\r\n\r\n const slashIndex = url.indexOf(\"/\", 9);\r\n\r\n if (slashIndex < 0) {\r\n return url;\r\n }\r\n\r\n return url.substring(0, slashIndex);\r\n }\r\n\r\n static getDateStr(date: Date) {\r\n let dateStr = Utilities.frontPadToLength(date.getFullYear(), 4, \"0\");\r\n\r\n dateStr += Utilities.frontPadToLength(date.getMonth() + 1, 2, \"0\");\r\n dateStr += Utilities.frontPadToLength(date.getDate(), 2, \"0\");\r\n dateStr += Utilities.frontPadToLength(date.getHours(), 2, \"0\");\r\n dateStr += Utilities.frontPadToLength(date.getMinutes(), 2, \"0\");\r\n dateStr += Utilities.frontPadToLength(date.getSeconds(), 2, \"0\");\r\n\r\n return dateStr;\r\n }\r\n\r\n static getDateFromStr(dateStr: string) {\r\n if (!Utilities.isNumeric(dateStr) || dateStr.length !== 14) {\r\n throw new Error(\"Improperly formatted date string: \" + dateStr);\r\n }\r\n\r\n const year = parseInt(dateStr.substring(0, 4)),\r\n month = parseInt(dateStr.substring(4, 6)),\r\n day = parseInt(dateStr.substring(6, 8)),\r\n hours = parseInt(dateStr.substring(8, 10)),\r\n minutes = parseInt(dateStr.substring(10, 12)),\r\n seconds = parseInt(dateStr.substring(12, 14));\r\n\r\n Log.assert(year >= 2022, \"Invalid year: \" + dateStr);\r\n Log.assert(month >= 1 && month <= 12, \"Invalid month: \" + dateStr);\r\n Log.assert(day >= 0 && day <= 31, \"Invalid day: \" + dateStr);\r\n Log.assert(hours >= 0 && hours <= 23, \"Invalid hours: \" + dateStr);\r\n Log.assert(minutes >= 0 && minutes <= 59, \"Invalid minutes: \" + dateStr);\r\n Log.assert(seconds >= 0 && seconds <= 59, \"Invalid seconds: \" + dateStr);\r\n\r\n return new Date(year, month - 1, day, hours, minutes, seconds);\r\n }\r\n\r\n static monthNames: string[] = [\r\n \"January\",\r\n \"February\",\r\n \"March\",\r\n \"April\",\r\n \"May\",\r\n \"June\",\r\n \"July\",\r\n \"August\",\r\n \"September\",\r\n \"October\",\r\n \"November\",\r\n \"December\",\r\n ];\r\n\r\n static monthShortNames: string[] = [\r\n \"Jan\",\r\n \"Feb\",\r\n \"Mar\",\r\n \"Apr\",\r\n \"May\",\r\n \"Jun\",\r\n \"Jul\",\r\n \"Aug\",\r\n \"Sep\",\r\n \"Oct\",\r\n \"Nov\",\r\n \"Dec\",\r\n ];\r\n\r\n static lengthOfDictionary(d: any) {\r\n let c = 0;\r\n\r\n for (const i in d) {\r\n if (i) {\r\n ++c;\r\n }\r\n }\r\n\r\n return c;\r\n }\r\n\r\n static makeSafeForJson(content: string) {\r\n content = content.replace(/\\\\/g, \"/\");\r\n content = content.replace(/\"/gi, \"'\"); // this isn't the full way to do it, but for now...\r\n\r\n return content;\r\n }\r\n\r\n static isAlphaNumeric(candidate: string) {\r\n for (let i = 0; i < candidate.length; i++) {\r\n const charCode = candidate[i];\r\n\r\n if (\r\n !(\r\n (charCode >= \"0\" && charCode <= \"9\") ||\r\n (charCode >= \"a\" && charCode <= \"z\") ||\r\n (charCode >= \"A\" && charCode <= \"Z\")\r\n )\r\n ) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public static getJsonObject(contents: string): any | undefined {\r\n let jsonObject = undefined;\r\n\r\n contents = Utilities.fixJsonContent(contents);\r\n\r\n try {\r\n jsonObject = JSON.parse(contents);\r\n } catch (e: any) {\r\n Log.fail(\"Could not parse JSON: \" + e.message);\r\n }\r\n\r\n return jsonObject;\r\n }\r\n\r\n static appendErrors(source: IErrorable, add: IErrorable, context?: string) {\r\n if (!add.isInErrorState) {\r\n return;\r\n }\r\n\r\n source.isInErrorState = true;\r\n\r\n if (add.errorMessages) {\r\n if (source.errorMessages === undefined) {\r\n source.errorMessages = [];\r\n }\r\n\r\n for (const err of add.errorMessages) {\r\n let newContext = undefined;\r\n\r\n if (context) {\r\n newContext = err.context ? context + \": \" + err.context : context;\r\n } else {\r\n newContext = err.context;\r\n }\r\n\r\n source.errorMessages.push({\r\n message: err.message,\r\n context: newContext,\r\n });\r\n }\r\n }\r\n }\r\n\r\n static isNumeric(candidate: string) {\r\n for (let i = 0; i < candidate.length; i++) {\r\n const charCode = candidate[i];\r\n\r\n if ((charCode < \"0\" || charCode > \"9\") && charCode !== \".\" && (i > 0 || charCode !== \"-\")) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n static isNumericIsh(candidate: string) {\r\n for (let i = 0; i < candidate.length; i++) {\r\n const charCode = candidate[i];\r\n\r\n if (\r\n (charCode < \"0\" || charCode > \"9\") &&\r\n charCode !== \"e\" &&\r\n charCode !== \"+\" &&\r\n charCode !== \",\" &&\r\n charCode !== \".\" &&\r\n charCode !== \"-\"\r\n ) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n static removeQuotes(candidate: string) {\r\n candidate = candidate.trim();\r\n\r\n if (candidate.startsWith('\"')) {\r\n candidate = candidate.substring(1);\r\n } else if (candidate.startsWith('\"')) {\r\n candidate = candidate.substring(0, candidate.length - 1);\r\n }\r\n\r\n return candidate;\r\n }\r\n\r\n static normalizeVersionString(candidate: string) {\r\n candidate = candidate.replace(/v/gi, \"\").trim();\r\n\r\n candidate = candidate.trim();\r\n\r\n if (candidate.startsWith(\".\")) {\r\n candidate = \"0\" + candidate;\r\n }\r\n\r\n if (candidate.endsWith(\".\")) {\r\n candidate = candidate.substring(0, candidate.length - 1);\r\n }\r\n\r\n return candidate;\r\n }\r\n\r\n static isVersionString(candidate: string) {\r\n for (let i = 0; i < candidate.length; i++) {\r\n const charCode = candidate[i];\r\n\r\n if ((charCode < \"0\" || charCode > \"9\") && charCode !== \".\" && charCode !== \"v\") {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n static isAlpha(candidate: string) {\r\n for (let i = 0; i < candidate.length; i++) {\r\n const charCode = candidate[i];\r\n\r\n if (!((charCode >= \"a\" && charCode <= \"z\") || (charCode >= \"A\" && charCode <= \"Z\"))) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n static shallowCloneArray(source: any[]) {\r\n const newArr: any[] = new Array(source.length);\r\n\r\n for (let i = 0; i < source.length; i++) {\r\n newArr[i] = source[i];\r\n }\r\n\r\n return newArr;\r\n }\r\n\r\n static uint8ArrayToBase64(bytes: Uint8Array) {\r\n let binary = \"\";\r\n\r\n const len = bytes.byteLength;\r\n\r\n for (var i = 0; i < len; i++) {\r\n binary += String.fromCharCode(bytes[i]);\r\n }\r\n\r\n if (\r\n CartoApp.isWeb ||\r\n CartoApp.hostType === HostType.vsCodeMainWeb ||\r\n CartoApp.hostType === HostType.vsCodeWebService\r\n ) {\r\n return btoa(binary);\r\n }\r\n\r\n return Buffer.from(binary).toString(\"base64\"); //btoa(binary);\r\n }\r\n\r\n static arrayBufferToBase64(buffer: ArrayBuffer) {\r\n let binary = \"\";\r\n const bytes = new Uint8Array(buffer);\r\n\r\n const len = bytes.byteLength;\r\n\r\n for (var i = 0; i < len; i++) {\r\n binary += String.fromCharCode(bytes[i]);\r\n }\r\n\r\n if (\r\n CartoApp.isWeb ||\r\n CartoApp.hostType === HostType.vsCodeMainWeb ||\r\n CartoApp.hostType === HostType.vsCodeWebService\r\n ) {\r\n return btoa(binary);\r\n }\r\n\r\n return Buffer.from(binary).toString(\"base64\"); // btoa(binary);\r\n }\r\n\r\n static base64ToArrayBuffer(base64buffer: string) {\r\n const start = base64buffer.indexOf(\";base64,\");\r\n\r\n if (start > 0 && start < 50) {\r\n base64buffer = base64buffer.substring(start + 8);\r\n }\r\n\r\n const binary = atob(base64buffer);\r\n\r\n const arrayBuffer = new ArrayBuffer(binary.length);\r\n const bytes = new Uint8Array(arrayBuffer);\r\n\r\n const len = binary.length;\r\n\r\n for (var i = 0; i < len; i++) {\r\n bytes[i] = binary.charCodeAt(i);\r\n }\r\n\r\n return arrayBuffer;\r\n }\r\n\r\n static base64ToUint8Array(base64buffer: string) {\r\n const start = base64buffer.indexOf(\";base64,\");\r\n\r\n if (start > 0 && start < 50) {\r\n base64buffer = base64buffer.substring(start + 8);\r\n }\r\n\r\n const binary = atob(base64buffer);\r\n\r\n const arrayBuffer = new ArrayBuffer(binary.length);\r\n const bytes = new Uint8Array(arrayBuffer);\r\n\r\n const len = binary.length;\r\n\r\n for (var i = 0; i < len; i++) {\r\n bytes[i] = binary.charCodeAt(i);\r\n }\r\n\r\n return bytes;\r\n }\r\n\r\n // UTF8 related string functions adapted from StrangelyTyped/StringView.\r\n static _utf8ReadChar = function (\r\n charStruct: { bytesRead: number; charVal: number },\r\n buf: DataView,\r\n readPos: number,\r\n maxBytes: number\r\n ) {\r\n const firstByte = buf.getUint8(readPos);\r\n\r\n charStruct.bytesRead = 1;\r\n charStruct.charVal = 0;\r\n\r\n if (firstByte & 0x80) {\r\n var numBytes = 0;\r\n var aByte = firstByte;\r\n\r\n while (aByte & 0x80) {\r\n numBytes++;\r\n aByte <<= 1;\r\n }\r\n if (numBytes === 1) {\r\n charStruct.charVal = Utilities.replacementChar;\r\n return;\r\n }\r\n if (numBytes > maxBytes) {\r\n charStruct.charVal = Utilities.replacementChar;\r\n return;\r\n }\r\n\r\n //2 bytes means 3 bits reserved for UTF8 byte encoding, 5 bytes remaining for codepoint, and so on\r\n charStruct.charVal = firstByte & (0xff >> (numBytes + 1));\r\n\r\n for (var i = 1; i < numBytes; i++) {\r\n aByte = buf.getUint8(readPos + i);\r\n\r\n //0xC0 should isolate the continuation flag which should be 0x80\r\n if ((aByte & 0xc0) !== 0x80) {\r\n console.error(\r\n \"UTF-8 read - attempted to read \" + numBytes + \" byte character, found non-continuation at byte \" + i\r\n );\r\n charStruct.charVal = Utilities.replacementChar;\r\n\r\n charStruct.bytesRead = 1;\r\n return;\r\n }\r\n\r\n charStruct.charVal <<= 6;\r\n charStruct.charVal |= aByte & 0x3f;\r\n\r\n if (i === 1) {\r\n const rshift = 8 - (numBytes + 1) - 1;\r\n if (charStruct.charVal >> rshift === 0) {\r\n charStruct.charVal = Utilities.replacementChar;\r\n charStruct.bytesRead = 1;\r\n return;\r\n }\r\n }\r\n charStruct.bytesRead++;\r\n }\r\n\r\n if (charStruct.charVal > 0x10ffff) {\r\n console.error(\"UTF-8 read - found illegally high code point \" + charStruct.charVal);\r\n charStruct.charVal = Utilities.replacementChar;\r\n charStruct.bytesRead = 1;\r\n return;\r\n }\r\n } else {\r\n charStruct.charVal = firstByte;\r\n }\r\n };\r\n\r\n static canonicalizeId(id: string) {\r\n return id.toLowerCase();\r\n }\r\n\r\n static readStringUTF8(buf: DataView, byteOffset: number, bytesToRead: number) {\r\n const nullTerm = typeof bytesToRead === \"undefined\";\r\n var readPos = byteOffset || 0;\r\n\r\n if (!nullTerm && readPos + bytesToRead > buf.byteLength) {\r\n throw new Error(\"Attempted to read \" + (readPos + bytesToRead - buf.byteLength) + \" bytes past end of buffer\");\r\n }\r\n\r\n var str = \"\";\r\n\r\n const charStruct: { bytesRead: number; charVal: number } = { bytesRead: 0, charVal: 0 };\r\n\r\n while (readPos < buf.byteLength && (nullTerm || bytesToRead > readPos - byteOffset)) {\r\n Utilities._utf8ReadChar(\r\n charStruct,\r\n buf,\r\n readPos,\r\n nullTerm ? buf.byteLength - (readPos + byteOffset) : bytesToRead - (readPos - byteOffset)\r\n );\r\n readPos += charStruct.bytesRead;\r\n\r\n if (nullTerm && !charStruct.charVal) {\r\n break;\r\n }\r\n str += String.fromCharCode(charStruct.charVal);\r\n }\r\n return {\r\n str: str,\r\n byteLength: readPos - byteOffset,\r\n };\r\n }\r\n\r\n static readStringASCII(buf: DataView, byteOffset: number, bytesToRead: number) {\r\n var str = \"\";\r\n var byteLength = 0;\r\n byteOffset = byteOffset || 0;\r\n var nullTerm = false;\r\n\r\n if (typeof bytesToRead === \"undefined\") {\r\n nullTerm = true;\r\n bytesToRead = buf.byteLength - buf.byteOffset;\r\n }\r\n\r\n var charCode;\r\n\r\n for (var i = 0; i < bytesToRead; i++) {\r\n charCode = buf.getUint8(i + byteOffset);\r\n if (charCode === 0 && nullTerm) {\r\n break;\r\n }\r\n\r\n str += String.fromCharCode(charCode);\r\n byteLength++;\r\n }\r\n\r\n return {\r\n str: str,\r\n byteLength: byteLength + (nullTerm ? 1 : 0),\r\n };\r\n }\r\n\r\n static readStringASCIIBuffer(buf: Uint8Array, byteOffset: number, bytesToRead: number) {\r\n var str = \"\";\r\n\r\n byteOffset = byteOffset || 0;\r\n\r\n var nullTerm = false;\r\n\r\n if (typeof bytesToRead === \"undefined\") {\r\n nullTerm = true;\r\n bytesToRead = buf.byteLength - buf.byteOffset;\r\n }\r\n\r\n var charCode;\r\n\r\n for (var i = 0; i < bytesToRead; i++) {\r\n charCode = buf[i + byteOffset];\r\n if (charCode === 0 && nullTerm) {\r\n break;\r\n }\r\n\r\n str += String.fromCharCode(charCode);\r\n }\r\n\r\n return str;\r\n }\r\n\r\n static _createUtf8Char(charCode: number, arr: number[]) {\r\n if (charCode < 0x80) {\r\n arr.push(charCode);\r\n } else {\r\n const limits = [0x7f, 0x07ff, 0xffff, 0x1fffff];\r\n let i = 0;\r\n\r\n while (true) {\r\n i++;\r\n\r\n if (i === limits.length) {\r\n Utilities._createUtf8Char(Utilities.replacementChar, arr);\r\n\r\n return;\r\n }\r\n\r\n if (charCode <= limits[i]) {\r\n i += 1;\r\n\r\n var aByte = 0;\r\n var j;\r\n\r\n for (j = 0; j < i; j++) {\r\n aByte <<= 1;\r\n aByte |= 1;\r\n }\r\n\r\n aByte <<= 8 - i;\r\n\r\n aByte |= charCode >> (6 * (i - 1));\r\n arr.push(aByte);\r\n\r\n for (j = 1; j < i; j++) {\r\n aByte = 0x80;\r\n\r\n aByte |= (charCode >> (6 * (i - (j + 1)))) & 0xbf;\r\n arr.push(aByte);\r\n }\r\n\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n\r\n static convertStringToBytes(str: string, encoding: string) {\r\n if (encoding === \"UTF-8\") {\r\n const arr: number[] = [];\r\n\r\n for (let i = 0; i < str.length; i++) {\r\n Utilities._createUtf8Char(str.charCodeAt(i), arr);\r\n }\r\n\r\n return arr;\r\n } else if (encoding === \"ASCII\") {\r\n const arr = [];\r\n\r\n for (let i = 0; i < str.length; i++) {\r\n let chr = str.charCodeAt(i);\r\n\r\n if (chr > 255) {\r\n chr = \"?\".charCodeAt(0);\r\n }\r\n\r\n arr.push(chr);\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n throw new Error();\r\n }\r\n\r\n static ensureNotStartsWithSlash(pathSegment: string) {\r\n while (pathSegment.startsWith(\"/\")) {\r\n pathSegment = pathSegment.substring(1);\r\n }\r\n\r\n return pathSegment;\r\n }\r\n\r\n static ensureStartsWithSlash(pathSegment: string) {\r\n if (!pathSegment.startsWith(\"/\")) {\r\n pathSegment = \"/\" + pathSegment;\r\n }\r\n\r\n return pathSegment;\r\n }\r\n\r\n static ensureEndsWithSlash(pathSegment: string) {\r\n if (!pathSegment.endsWith(\"/\")) {\r\n pathSegment += \"/\";\r\n }\r\n\r\n return pathSegment;\r\n }\r\n\r\n static ensureNotEndsWithSlash(pathSegment: string) {\r\n while (pathSegment.length > 0 && pathSegment.endsWith(\"/\")) {\r\n pathSegment = pathSegment.substring(0, pathSegment.length - 1);\r\n }\r\n\r\n return pathSegment;\r\n }\r\n\r\n static ensureStartsWithBackSlash(pathSegment: string) {\r\n if (!pathSegment.startsWith(\"\\\\\")) {\r\n pathSegment = \"\\\\\" + pathSegment;\r\n }\r\n\r\n return pathSegment;\r\n }\r\n\r\n static ensureEndsWithBackSlash(pathSegment: string) {\r\n if (!pathSegment.endsWith(\"\\\\\")) {\r\n pathSegment += \"\\\\\";\r\n }\r\n\r\n return pathSegment;\r\n }\r\n\r\n static replaceAll(content: string, fromToken: string, toToken: string) {\r\n let nextIndex = content.indexOf(fromToken);\r\n\r\n while (nextIndex >= 0) {\r\n content = content.substring(0, nextIndex) + toToken + content.substring(nextIndex + fromToken.length);\r\n\r\n nextIndex = content.indexOf(fromToken, nextIndex + toToken.length);\r\n }\r\n\r\n return content;\r\n }\r\n\r\n static replaceAllExceptInLines(content: string, fromToken: string, toToken: string, exceptInLinesWith: string[]) {\r\n let nextIndex = content.indexOf(fromToken);\r\n\r\n while (nextIndex >= 0) {\r\n let doReplace = true;\r\n\r\n let previousNewLine = content.lastIndexOf(\"\\n\", nextIndex);\r\n if (previousNewLine >= 0) {\r\n const previousPreviousNewLine = content.lastIndexOf(\"\\n\", previousNewLine - 1);\r\n\r\n if (previousPreviousNewLine >= 0) {\r\n previousNewLine = previousPreviousNewLine;\r\n }\r\n\r\n const lineSegment = content.substring(previousNewLine, nextIndex);\r\n for (const exceptIn of exceptInLinesWith) {\r\n if (lineSegment.indexOf(exceptIn) > 0) {\r\n doReplace = false;\r\n }\r\n }\r\n }\r\n\r\n if (doReplace) {\r\n content = content.substring(0, nextIndex) + toToken + content.substring(nextIndex + fromToken.length);\r\n\r\n nextIndex = content.indexOf(fromToken, nextIndex + toToken.length);\r\n } else {\r\n nextIndex = content.indexOf(fromToken, nextIndex + 1);\r\n }\r\n }\r\n\r\n return content;\r\n }\r\n static createRandomId(length: number) {\r\n let id = \"\";\r\n\r\n for (let i = 0; i < length; i++) {\r\n const main = Math.random() * 6;\r\n\r\n if (main < 1) {\r\n id += String.fromCharCode(Math.floor(Math.random() * 10) + 48);\r\n } else if (main < 4) {\r\n id += String.fromCharCode(Math.floor(Math.random() * 26) + 65);\r\n } else {\r\n id += String.fromCharCode(Math.floor(Math.random() * 26) + 97);\r\n }\r\n }\r\n\r\n return id;\r\n }\r\n\r\n static canonicalizeUuid(uuidString: string) {\r\n return uuidString.trim().toLowerCase();\r\n }\r\n\r\n static isValidUuid(uuidString: string) {\r\n return uuidString.length === 36;\r\n }\r\n\r\n static uuidEqual(uuidStringA: string, uuidStringB: string) {\r\n return Utilities.canonicalizeId(uuidStringA) === Utilities.canonicalizeId(uuidStringB);\r\n }\r\n\r\n static createUuid() {\r\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\r\n let val = CartoApp.generateCryptoRandomNumber(16);\r\n\r\n const r = val | 0,\r\n v = c === \"x\" ? r : (r & 0x3) | 0x8;\r\n\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n static uint8ArraysAreEqual(arrayA: Uint8Array, arrayB: Uint8Array) {\r\n if (arrayA.length !== arrayB.length) {\r\n return false;\r\n }\r\n\r\n for (let i = 0; i < arrayA.length; i++) {\r\n if (arrayA[i] !== arrayB[i]) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n static throwIfUint8ArraysNotEqual(arrayA: Uint8Array, arrayB: Uint8Array) {\r\n if (arrayA.length !== arrayB.length) {\r\n throw new Error(\"Arrays are of mismatched length.\");\r\n }\r\n\r\n for (let i = 0; i < arrayA.length; i++) {\r\n if (arrayA[i] !== arrayB[i]) {\r\n throw new Error(\"Mismatch at position \" + i + \" value A: \" + arrayA[i] + \" value B:\" + arrayB[i]);\r\n }\r\n }\r\n }\r\n\r\n static getString(view: DataView, byteOffset: number, byteLength: number, encoding?: string) {\r\n if (encoding === \"UTF8\" || encoding === undefined) {\r\n const result = Utilities.readStringUTF8(view, byteOffset, byteLength);\r\n Log.assert(result.byteLength === byteLength, \"UTGS\");\r\n return result.str;\r\n } else if (encoding === \"ASCII\") {\r\n const result = Utilities.readStringASCII(view, byteOffset, byteLength);\r\n\r\n return result.str;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n static getSimpleString(str: string) {\r\n str = str.trim();\r\n str = str.replace(/ /gi, \"\");\r\n str = str.replace(/=/gi, \"\");\r\n str = str.replace(/\\?/gi, \"\");\r\n\r\n return str;\r\n }\r\n\r\n static getAsciiString(view: DataView, byteOffset: number, byteLength: number, encoding?: string) {\r\n const result = Utilities.readStringASCII(view, byteOffset, byteLength);\r\n\r\n return result.str;\r\n }\r\n\r\n static getAsciiStringFromBytes(bytes: number[]) {\r\n let str = \"\";\r\n for (let i = 0; i < bytes.length; i++) {\r\n str += String.fromCharCode(bytes[i]);\r\n }\r\n\r\n return str;\r\n }\r\n\r\n static getAsciiStringFromUint8Array(bytes: Uint8Array) {\r\n let str = \"\";\r\n\r\n for (let i = 0; i < bytes.length; i++) {\r\n str += String.fromCharCode(bytes[i]);\r\n }\r\n\r\n return str;\r\n }\r\n\r\n static writeString(view: DataView, byteOffset: number, value: string, encoding: string) {\r\n const arr = Utilities.convertStringToBytes(value, encoding);\r\n\r\n if (arr === undefined) {\r\n return byteOffset;\r\n }\r\n\r\n let i = 0;\r\n\r\n for (i = 0; i < arr.length && byteOffset + i < view.byteLength; i++) {\r\n view.setUint8(byteOffset + i, arr[i]);\r\n }\r\n\r\n return byteOffset + i;\r\n }\r\n\r\n static frontPadToLength(val: string | number, length: number, pad: string): string {\r\n val = val + \"\";\r\n\r\n while (val.length < length) {\r\n val = pad + val;\r\n }\r\n\r\n return val;\r\n }\r\n\r\n static getShortYear(year: number) {\r\n let short = year + \"\"; // cast to string\r\n\r\n if (short.length === 4) {\r\n short = short.substring(2, 4);\r\n }\r\n\r\n return short;\r\n }\r\n\r\n static getFriendlySummary(date: Date) {\r\n if (date === undefined || !(date instanceof Date)) {\r\n Log.fail(\"Empty/wrong-typed date passed in.\");\r\n }\r\n\r\n let returnValue = this.monthShortNames[date.getMonth()] + \" \" + Utilities.frontPadToLength(date.getDate(), 2, \"0\");\r\n\r\n const now = new Date();\r\n\r\n if (date.getFullYear() !== now.getFullYear()) {\r\n returnValue += \" \" + this.getShortYear(date.getFullYear());\r\n } else {\r\n let hours = date.getHours() % 12;\r\n\r\n if (hours === 0) {\r\n hours = 12;\r\n }\r\n\r\n returnValue +=\r\n \" \" + Utilities.frontPadToLength(hours, 2, \"0\") + \":\" + Utilities.frontPadToLength(date.getMinutes(), 2, \"0\");\r\n }\r\n\r\n return returnValue;\r\n }\r\n\r\n static getFriendlySummarySeconds(date: Date) {\r\n if (date === undefined || !(date instanceof Date)) {\r\n Log.fail(\"Empty/wrong-typed date passed in.\");\r\n }\r\n\r\n return (\r\n this.monthShortNames[date.getMonth()] +\r\n \" \" +\r\n Utilities.frontPadToLength(date.getDate(), 2, \"0\") +\r\n \" \" +\r\n this.getShortYear(date.getFullYear()) +\r\n \" \" +\r\n Utilities.frontPadToLength(date.getHours(), 2, \"0\") +\r\n Utilities.frontPadToLength(date.getMinutes(), 2, \"0\") +\r\n \".\" +\r\n Utilities.frontPadToLength(date.getSeconds(), 2, \"0\")\r\n );\r\n }\r\n\r\n static getFileFriendlySummarySeconds(date: Date) {\r\n if (date === undefined || !(date instanceof Date)) {\r\n Log.fail(\"Empty/wrong-typed date passed in.\");\r\n }\r\n\r\n return (\r\n Utilities.frontPadToLength(date.getMonth() + 1, 2, \"0\") +\r\n \"-\" +\r\n Utilities.frontPadToLength(date.getDate(), 2, \"0\") +\r\n \"-\" +\r\n Utilities.frontPadToLength(date.getHours(), 2, \"0\") +\r\n Utilities.frontPadToLength(date.getMinutes(), 2, \"0\") +\r\n Utilities.frontPadToLength(date.getSeconds(), 2, \"0\")\r\n );\r\n }\r\n\r\n static getDateSummary(date: Date) {\r\n return (\r\n date.getMonth() +\r\n 1 +\r\n \".\" +\r\n date.getDate() +\r\n \".\" +\r\n (date.getFullYear() - 2000) +\r\n \".\" +\r\n date.getHours() +\r\n \".\" +\r\n date.getMinutes() +\r\n \".\" +\r\n date.getSeconds()\r\n );\r\n }\r\n\r\n static countChar(source: string, find: string) {\r\n let count = 0;\r\n\r\n let index = source.indexOf(find);\r\n\r\n while (index >= 0) {\r\n count++;\r\n\r\n index = source.indexOf(find, index + find.length);\r\n }\r\n\r\n return count;\r\n }\r\n\r\n static isString(obj: any) {\r\n return typeof obj == \"string\";\r\n }\r\n\r\n static isNullOrUndefined<T>(object: T | undefined | null): object is T {\r\n return (object as T) === undefined || (object as T) === null;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/core/Utilities.ts"],"names":[],"mappings":"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","file":"../../core/Utilities.js","sourcesContent":["// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\n\r\nimport CartoApp, { HostType } from \"../app/CartoApp\";\r\nimport { FieldValueHumanify } from \"../dataform/IField\";\r\nimport { IErrorable } from \"./IErrorable\";\r\nimport Log from \"./Log\";\r\n\r\nconst singleComment = Symbol(\"singleComment\");\r\nconst multiComment = Symbol(\"multiComment\");\r\n\r\nexport default class Utilities {\r\n static _isDebug?: boolean;\r\n static _isAppSim?: boolean;\r\n static defaultEncoding = \"UTF-8\";\r\n static replacementChar = 0xfffd;\r\n\r\n static async sleep(ms: number) {\r\n return new Promise((resolve) => {\r\n setTimeout(resolve, ms);\r\n });\r\n }\r\n\r\n static get isPreview(): boolean {\r\n return false;\r\n }\r\n\r\n static get isAppSim(): boolean {\r\n if (Utilities._isAppSim === undefined) {\r\n Utilities._isAppSim = false;\r\n }\r\n\r\n return Utilities._isAppSim;\r\n }\r\n\r\n static get isDebug(): boolean {\r\n if (Utilities._isDebug === undefined) {\r\n Utilities._isDebug = false;\r\n }\r\n\r\n return Utilities._isDebug;\r\n }\r\n\r\n static selectJsonObject(jsonO: object, select: string, ensureObjects?: boolean): object | undefined {\r\n const selectors = select.split(\"/\");\r\n\r\n for (const selector of selectors) {\r\n if (selector.length > 0) {\r\n jsonO = (jsonO as any)[selector];\r\n\r\n if (!jsonO && !ensureObjects) {\r\n return undefined;\r\n }\r\n if (!jsonO && ensureObjects) {\r\n (jsonO as any)[selector] = {};\r\n jsonO = (jsonO as any)[selector];\r\n }\r\n }\r\n }\r\n\r\n return jsonO;\r\n }\r\n\r\n static removeItemInArray(objToRemove: any, stringArr: any[]) {\r\n const nextArray: any[] = [];\r\n\r\n for (const candStr of stringArr) {\r\n if (candStr !== objToRemove) {\r\n nextArray.push(candStr);\r\n }\r\n }\r\n\r\n return nextArray;\r\n }\r\n\r\n static isArrayNonNegative(arr: number[]) {\r\n for (const val of arr) {\r\n if (val < 0) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n static arrayHasNegativeAndIsNumeric(arr: any[]) {\r\n let foundNegative = false;\r\n for (const val of arr) {\r\n if (typeof val !== \"number\") {\r\n return false;\r\n } else if (val < 0) {\r\n foundNegative = true;\r\n }\r\n }\r\n\r\n return foundNegative;\r\n }\r\n\r\n static encodeObjectWithSequentialRunLengthEncodeUsingNegative(obj: { [key: string]: any }) {\r\n for (const key in obj) {\r\n const val: any = obj[key];\r\n if (val !== undefined) {\r\n if (typeof val === \"object\" && !Array.isArray(val)) {\r\n this.encodeObjectWithSequentialRunLengthEncodeUsingNegative(val);\r\n } else if (Array.isArray(val)) {\r\n let isNumericArray = true;\r\n for (const arrVal of val) {\r\n if (typeof arrVal !== \"number\") {\r\n isNumericArray = false;\r\n break;\r\n }\r\n }\r\n\r\n if (isNumericArray) {\r\n obj[key] = this.encodeSequentialRunLengthUsingNegative(val);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n static decodeSequentialRunLengthUsingNegative(arr: number[]) {\r\n if (this.isArrayNonNegative(arr)) {\r\n return arr;\r\n }\r\n\r\n const newArr: number[] = [];\r\n\r\n newArr.push(arr[0]);\r\n\r\n for (let i = 1; i < arr.length; i++) {\r\n if (arr[i] < 0) {\r\n let startVal = arr[i - 1];\r\n\r\n for (let j = 0; j < Math.abs(arr[i]); j++) {\r\n startVal++;\r\n\r\n newArr.push(startVal);\r\n }\r\n } else {\r\n newArr.push(arr[i]);\r\n }\r\n }\r\n return newArr;\r\n }\r\n\r\n /* Convert a numeric array from:\r\n [1, 2, 3, 7, 9, 10, 15, 16, 17, 18]\r\n to a \"sequential run length encode\", where negative numbers are used to indicate a \"run\"\r\n so the above becomes \r\n [1, -2, 7, 9, -1, 15, -3]\r\n */\r\n static encodeSequentialRunLengthUsingNegative(arr: number[]) {\r\n if (!this.isArrayNonNegative(arr)) {\r\n return arr;\r\n }\r\n\r\n arr.sort();\r\n\r\n const newArr: number[] = [];\r\n\r\n newArr.push(arr[0]);\r\n\r\n let streak = -1;\r\n\r\n for (let i = 1; i < arr.length; i++) {\r\n if (arr[i] === arr[i - 1] + 1) {\r\n if (streak < 1) {\r\n streak = 1;\r\n } else {\r\n streak++;\r\n }\r\n } else {\r\n if (streak >= 1) {\r\n newArr.push(-streak);\r\n streak = -1;\r\n }\r\n\r\n newArr.push(arr[i]);\r\n }\r\n }\r\n\r\n if (streak >= 1) {\r\n newArr.push(-streak);\r\n streak = -1;\r\n }\r\n\r\n return newArr;\r\n }\r\n\r\n static trimEllipsis(text: string, length: number) {\r\n if (text.length > length) {\r\n text = text.substring(0, length - 1) + \"…\";\r\n }\r\n\r\n return text;\r\n }\r\n\r\n static makeHashFileSafe(hash: string) {\r\n hash = hash.replace(/\\//gi, \"-S\");\r\n hash = hash.replace(/\\+/gi, \"-P\");\r\n hash = hash.replace(/\\\\/gi, \"-B\");\r\n hash = hash.replace(/=/gi, \"-E\");\r\n hash = hash.replace(/,/gi, \"-C\");\r\n\r\n return hash;\r\n }\r\n\r\n static getSimpleNumeric(num: number | undefined) {\r\n if (num === undefined) {\r\n return \"\";\r\n }\r\n\r\n if (num < 1000) {\r\n return num.toString();\r\n }\r\n\r\n if (num < 1000) {\r\n return Math.floor(num / 100) / 10 + \"k\";\r\n }\r\n\r\n if (num > 1000000) {\r\n return Math.floor(num / 100000) / 10 + \"m\";\r\n }\r\n\r\n return Math.floor(num / 1000) + \"k\";\r\n }\r\n\r\n static humanifyJsName(name: string | boolean | number) {\r\n if (typeof name === \"boolean\" || typeof name === \"number\") {\r\n return name.toString();\r\n }\r\n\r\n let retVal = \"\";\r\n\r\n for (let i = 0; i < name.length; i++) {\r\n if (i === 0) {\r\n retVal += name[i].toUpperCase();\r\n } else {\r\n if (name[i] >= \"A\" && name[i] <= \"Z\") {\r\n retVal += \" \";\r\n }\r\n\r\n retVal += name[i];\r\n }\r\n }\r\n\r\n retVal = retVal.replace(\"Java Script\", \"JavaScript\");\r\n\r\n return retVal;\r\n }\r\n\r\n static humanifyObject(sampVal: any) {\r\n if (typeof sampVal === \"object\") {\r\n sampVal = JSON.stringify(sampVal, undefined, 2);\r\n } else {\r\n sampVal = sampVal.toString();\r\n }\r\n\r\n sampVal = sampVal.trim();\r\n\r\n if (sampVal.startsWith(\"[\") && sampVal.endsWith(\"]\")) {\r\n sampVal = sampVal.substring(1, sampVal.length - 1);\r\n sampVal = sampVal.replace(/\"/gi, \"\");\r\n }\r\n\r\n if (sampVal.startsWith(\"{\") && sampVal.endsWith(\"}\")) {\r\n sampVal = sampVal.substring(1, sampVal.length - 1);\r\n }\r\n\r\n return sampVal;\r\n }\r\n\r\n static ensureLooksLikeSentence(name: string) {\r\n if (name.length > 1) {\r\n if (name[0] >= \"a\" && name[0] <= \"z\") {\r\n name = name[0].toUpperCase() + name.substring(1, name.length);\r\n }\r\n }\r\n\r\n if (!name.endsWith(\".\")) {\r\n name = name + \".\";\r\n }\r\n\r\n return name;\r\n }\r\n\r\n static dehumanify(val: string | boolean | number, humanify?: FieldValueHumanify) {\r\n if (!humanify) {\r\n return val;\r\n }\r\n\r\n return Utilities.dehumanifyMinecraftName(val);\r\n }\r\n\r\n static humanify(val: string | boolean | number | number[] | string[] | object, humanify?: FieldValueHumanify) {\r\n if (!humanify || val === undefined) {\r\n return val;\r\n }\r\n\r\n if (humanify === FieldValueHumanify.general) {\r\n return Utilities.humanifyObject(val);\r\n }\r\n\r\n if (typeof val === \"object\") {\r\n return JSON.stringify(val);\r\n }\r\n\r\n if (Array.isArray(val)) {\r\n return val;\r\n }\r\n\r\n return Utilities.humanifyMinecraftName(val);\r\n }\r\n\r\n static ensureFirstCharIsUpperCase(name: string) {\r\n if (name.length > 1) {\r\n if (name[0] >= \"a\" && name[0] <= \"z\") {\r\n name = name[0].toUpperCase() + name.substring(1, name.length);\r\n }\r\n }\r\n return name;\r\n }\r\n\r\n static humanifyString(val: string, humanify?: FieldValueHumanify) {\r\n if (!humanify || val === undefined) {\r\n return val;\r\n }\r\n\r\n if (humanify === FieldValueHumanify.general) {\r\n return Utilities.humanifyObject(val).toString();\r\n }\r\n\r\n return Utilities.humanifyMinecraftName(val) as string;\r\n }\r\n\r\n static getHumanifiedObjectName(name: string | boolean | number) {\r\n if (typeof name !== \"string\") {\r\n name = name.toString();\r\n }\r\n\r\n let firstColon = name.indexOf(\":\");\r\n\r\n if (firstColon >= 0) {\r\n name = name.substring(firstColon + 1);\r\n }\r\n\r\n name = Utilities.humanifyMinecraftName(name);\r\n name = name.replace(/ /gi, \"\");\r\n\r\n return name;\r\n }\r\n\r\n static sanitizeJavascriptName(name: string) {\r\n name = name.trim();\r\n\r\n name = name.replace(/</gi, \"LessThan\");\r\n name = name.replace(/>/gi, \"GreaterThan\");\r\n name = name.replace(/=/gi, \"Equals\");\r\n name = name.replace(/!/gi, \"Not\");\r\n name = name.replace(/\\+/gi, \"Plus\");\r\n name = name.replace(/,/gi, \"\");\r\n name = name.replace(/-/gi, \"\");\r\n name = name.replace(/\\./gi, \"\");\r\n name = name.replace(/'/gi, \"\");\r\n name = name.replace(/ /gi, \"\");\r\n name = name.replace(/\\[/gi, \"\");\r\n name = name.replace(/\\]/gi, \"\");\r\n name = name.replace(/\"/gi, \"\");\r\n name = name.replace(/\\{/gi, \"\");\r\n name = name.replace(/\\}/gi, \"\");\r\n name = name.replace(/</gi, \"\");\r\n name = name.replace(/>/gi, \"\");\r\n name = name.replace(/\\*/gi, \"\");\r\n name = name.replace(/\\?/gi, \"\");\r\n name = name.replace(/\\\\/gi, \"\");\r\n name = name.replace(/\\|/gi, \"\");\r\n\r\n if (name.length > 0 && name[0] >= \"0\" && name[0] <= \"9\") {\r\n name = \"_\" + name;\r\n }\r\n\r\n if (name.indexOf(\":\") >= 0) {\r\n name = '\"' + name + '\"';\r\n }\r\n\r\n return name;\r\n }\r\n\r\n static javascriptifyName(name: string, capitalizeFrst?: boolean) {\r\n name = name.trim();\r\n\r\n let retVal = \"\";\r\n let capitalizeNext = capitalizeFrst === true;\r\n\r\n for (let i = 0; i < name.length; i++) {\r\n if (\r\n name[i] === \" \" ||\r\n name[i] === \"_\" ||\r\n name[i] === \":\" ||\r\n name[i] === \",\" ||\r\n name[i] === \".\" ||\r\n name[i] === '\"' ||\r\n name[i] === \"'\" ||\r\n name[i] === \"+\" ||\r\n name[i] === \"-\" ||\r\n name[i] === \":\" ||\r\n name[i] === \"[\" ||\r\n name[i] === \"]\"\r\n ) {\r\n capitalizeNext = true;\r\n } else {\r\n if (capitalizeNext) {\r\n retVal += name[i].toUpperCase();\r\n\r\n capitalizeNext = false;\r\n } else {\r\n retVal += name[i];\r\n }\r\n }\r\n }\r\n\r\n retVal = this.sanitizeJavascriptName(retVal);\r\n\r\n return retVal;\r\n }\r\n\r\n static humanifyMinecraftName(name: string | boolean | number) {\r\n if (typeof name === \"boolean\" || typeof name === \"number\") {\r\n return name.toString();\r\n }\r\n\r\n if (name.endsWith(\".behavior\")) {\r\n name = name.substring(0, name.length - 9);\r\n } else if (name.endsWith(\".geo\")) {\r\n name = name.substring(0, name.length - 4);\r\n } else if (name.endsWith(\".entity\")) {\r\n name = name.substring(0, name.length - 7);\r\n }\r\n\r\n const colon = name.indexOf(\":\");\r\n\r\n if (colon >= 0 && name.substring(0, colon) === \"minecraft\") {\r\n name = name.substring(colon + 1);\r\n }\r\n\r\n const leftBracket = name.indexOf(\"[\");\r\n const rightBracket = name.indexOf(\"]\");\r\n\r\n if (leftBracket >= 0 && rightBracket > leftBracket) {\r\n name = name.substring(0, leftBracket) + name.substring(rightBracket + 1);\r\n }\r\n\r\n if (name.endsWith(\".\")) {\r\n name = name.substring(0, name.length - 1);\r\n }\r\n\r\n name = name.replace(/[_]/gi, \" \");\r\n\r\n if (name.endsWith(\"_bit\")) {\r\n name = name.substring(0, name.length - 4);\r\n }\r\n\r\n name = name.replace(/::/gi, \" \");\r\n name = name.replace(/:/gi, \" \");\r\n\r\n name = name.replace(\"SharedTypes \", \"\");\r\n\r\n if (name.startsWith(\"Struct \") || name.startsWith(\"struct \")) {\r\n name = name.substring(7);\r\n }\r\n\r\n if ((name.startsWith(\"Enum \") || name.startsWith(\"enum \")) && name.indexOf(\"num_property\") < 0) {\r\n name = name.substring(5);\r\n }\r\n\r\n const lastPeriod = name.indexOf(\".\");\r\n\r\n if (lastPeriod >= 4) {\r\n name = name.substring(lastPeriod + 1) + \" \" + name.substring(0, lastPeriod);\r\n }\r\n\r\n /*\r\n if (name.length > 1) {\r\n if (name[0] >= \"a\" && name[0] <= \"z\") {\r\n name = name[0].toUpperCase() + name.substring(1, name.length);\r\n }\r\n }*/\r\n\r\n let lastCharWasSpace = false;\r\n\r\n for (let i = 0; i < name.length; i++) {\r\n if (name[i] === \" \") {\r\n lastCharWasSpace = true;\r\n } else {\r\n if ((lastCharWasSpace || i === 0) && name[i] >= \"a\" && name[i] <= \"z\") {\r\n name = name.substring(0, i) + name[i].toUpperCase() + name.substring(i + 1);\r\n }\r\n lastCharWasSpace = false;\r\n }\r\n }\r\n\r\n name = name.trim();\r\n\r\n return name;\r\n }\r\n\r\n static dehumanifyMinecraftName(name: string | boolean | number) {\r\n if (!name || typeof name === \"boolean\" || typeof name === \"number\") {\r\n return name;\r\n }\r\n\r\n // if this is already a technical name, return;\r\n if (name.indexOf(\":\") >= 0) {\r\n return name;\r\n }\r\n\r\n name = name.toLowerCase();\r\n\r\n name = name.replace(/ /gi, \"_\");\r\n name = \"minecraft:\" + name;\r\n\r\n return name;\r\n }\r\n\r\n static stringFormat(templateString: string, ...vals: any[]) {\r\n var args = arguments;\r\n return arguments[0].replace(/{(\\d+)}/g, function (content: any, interior: string) {\r\n try {\r\n const num = parseInt(interior);\r\n\r\n if (!isNaN(num)) {\r\n return args[num + 1] !== undefined ? args[num + 1] : content;\r\n }\r\n } catch (e) {}\r\n\r\n return content;\r\n });\r\n }\r\n\r\n static convertToHexString(byteArray: number[]) {\r\n return Array.from(byteArray, function (byte) {\r\n return (\"0\" + (byte & 0xff).toString(16)).slice(-2);\r\n }).join(\"\");\r\n }\r\n\r\n static countSignificantLines(content: string) {\r\n if (content.length <= 0) {\r\n return 0;\r\n }\r\n let lineCount = 1;\r\n let curStart = 0;\r\n let nextNewline = content.indexOf(\"\\n\");\r\n\r\n while (nextNewline >= curStart) {\r\n let curContent = content.substring(curStart, nextNewline).trim();\r\n\r\n if (curContent.length > 1) {\r\n lineCount++;\r\n }\r\n curStart = nextNewline + 1;\r\n nextNewline = content.indexOf(\"\\n\", curStart);\r\n }\r\n\r\n return lineCount;\r\n }\r\n\r\n static stripLinesContaining(content: string, lineContains: string) {\r\n let i = content.indexOf(lineContains);\r\n\r\n while (i >= 0) {\r\n let prevNewLine = content.lastIndexOf(\"\\n\", i);\r\n if (prevNewLine < 0) {\r\n prevNewLine = 0;\r\n }\r\n\r\n let nextNewLine = content.indexOf(\"\\n\", i);\r\n\r\n if (nextNewLine < 0) {\r\n nextNewLine = content.length;\r\n }\r\n\r\n content = content.substring(0, prevNewLine) + content.substring(nextNewLine, content.length);\r\n\r\n i = content.indexOf(lineContains);\r\n }\r\n\r\n return content;\r\n }\r\n\r\n static stripWithoutWhitespace = () => \"\";\r\n static stripWithWhitespace = (str: string, start: number | undefined, end: number | undefined) =>\r\n str.slice(start, end).replace(/\\S/g, \" \");\r\n\r\n static replaceJsonValue(jsonContent: string, attributeName: string, newValue: string) {\r\n let nextAttribute = jsonContent.indexOf('\"' + attributeName + '\":');\r\n\r\n while (nextAttribute >= 0) {\r\n const subsequentOpenQuote = jsonContent.indexOf('\"', nextAttribute + attributeName.length + 3);\r\n\r\n if (\r\n subsequentOpenQuote > nextAttribute + attributeName.length + 2 &&\r\n subsequentOpenQuote < nextAttribute + attributeName.length + 7\r\n ) {\r\n const subsequentEndQuote = jsonContent.indexOf('\"', subsequentOpenQuote + 1);\r\n\r\n if (subsequentEndQuote > subsequentOpenQuote) {\r\n jsonContent =\r\n jsonContent.substring(0, subsequentOpenQuote + 1) + newValue + jsonContent.substring(subsequentEndQuote);\r\n }\r\n }\r\n\r\n nextAttribute = jsonContent.indexOf('\"' + attributeName + '\":', nextAttribute + attributeName.length + 2);\r\n }\r\n\r\n return jsonContent;\r\n }\r\n\r\n public static makeJsonVersionAgnostic(jsonContent: string) {\r\n jsonContent = Utilities.replaceJsonValue(jsonContent, \"generatorVersion\", \"TESTSUB\");\r\n jsonContent = Utilities.replaceJsonValue(jsonContent, \"uuid\", \"TESTSUB\");\r\n\r\n return jsonContent;\r\n }\r\n\r\n static isEscaped(jsonString: string, quotePosition: number) {\r\n let index = quotePosition - 1;\r\n let backslashCount = 0;\r\n\r\n while (jsonString[index] === \"\\\\\") {\r\n index -= 1;\r\n backslashCount += 1;\r\n }\r\n\r\n return Boolean(backslashCount % 2);\r\n }\r\n\r\n static fixJsonContent(jsonString: string, { whitespace = true, trailingCommas = false } = {}) {\r\n if (typeof jsonString !== \"string\") {\r\n throw new TypeError(`Expected argument \\`jsonString\\` to be a \\`string\\`, got \\`${typeof jsonString}\\``);\r\n }\r\n\r\n const strip = whitespace ? Utilities.stripWithWhitespace : Utilities.stripWithoutWhitespace;\r\n\r\n let isInsideString = false;\r\n let isInsideComment: boolean | symbol = false;\r\n let offset = 0;\r\n let buffer = \"\";\r\n let result = \"\";\r\n let commaIndex = -1;\r\n\r\n for (let index = 0; index < jsonString.length; index++) {\r\n const currentCharacter = jsonString[index];\r\n const nextCharacter = jsonString[index + 1];\r\n\r\n if (!isInsideComment && currentCharacter === '\"') {\r\n // Enter or exit string\r\n const escaped = Utilities.isEscaped(jsonString, index);\r\n if (!escaped) {\r\n isInsideString = !isInsideString;\r\n }\r\n }\r\n\r\n if (isInsideString) {\r\n // fix control characters inside of strings, if they exist\r\n if (currentCharacter === \"\\r\" || currentCharacter === \"\\n\" || currentCharacter === \"\\t\") {\r\n jsonString = jsonString.substring(0, index) + \" \" + jsonString.substring(index + 1);\r\n }\r\n continue;\r\n }\r\n\r\n if (!isInsideComment && currentCharacter + nextCharacter === \"//\") {\r\n // Enter single-line comment\r\n buffer += jsonString.slice(offset, index);\r\n offset = index;\r\n isInsideComment = singleComment;\r\n index++;\r\n } else if (isInsideComment === singleComment && currentCharacter + nextCharacter === \"\\r\\n\") {\r\n // Exit single-line comment via \\r\\n\r\n index++;\r\n isInsideComment = false;\r\n buffer += strip(jsonString, offset, index);\r\n offset = index;\r\n continue;\r\n } else if (isInsideComment === singleComment && currentCharacter === \"\\n\") {\r\n // Exit single-line comment via \\n\r\n isInsideComment = false;\r\n buffer += strip(jsonString, offset, index);\r\n offset = index;\r\n } else if (!isInsideComment && currentCharacter + nextCharacter === \"/*\") {\r\n // Enter multiline comment\r\n buffer += jsonString.slice(offset, index);\r\n offset = index;\r\n isInsideComment = multiComment;\r\n index++;\r\n continue;\r\n } else if (isInsideComment === multiComment && currentCharacter + nextCharacter === \"*/\") {\r\n // Exit multiline comment\r\n index++;\r\n isInsideComment = false;\r\n buffer += strip(jsonString, offset, index + 1);\r\n offset = index + 1;\r\n continue;\r\n } else if (trailingCommas && !isInsideComment) {\r\n if (commaIndex !== -1) {\r\n if (currentCharacter === \"}\" || currentCharacter === \"]\") {\r\n // Strip trailing comma\r\n buffer += jsonString.slice(offset, index);\r\n result += strip(buffer, 0, 1) + buffer.slice(1);\r\n buffer = \"\";\r\n offset = index;\r\n commaIndex = -1;\r\n } else if (\r\n currentCharacter !== \" \" &&\r\n currentCharacter !== \"\\t\" &&\r\n currentCharacter !== \"\\r\" &&\r\n currentCharacter !== \"\\n\"\r\n ) {\r\n // Hit non-whitespace following a comma; comma is not trailing\r\n buffer += jsonString.slice(offset, index);\r\n offset = index;\r\n commaIndex = -1;\r\n }\r\n } else if (currentCharacter === \",\") {\r\n // Flush buffer prior to this point, and save new comma index\r\n result += buffer + jsonString.slice(offset, index);\r\n buffer = \"\";\r\n offset = index;\r\n commaIndex = index;\r\n }\r\n }\r\n }\r\n\r\n let results =\r\n result +\r\n buffer +\r\n (isInsideComment ? strip(jsonString.slice(offset), undefined, undefined) : jsonString.slice(offset));\r\n\r\n results = results.replace(/,(\\s*)]/g, \"]\"); // [\"a\", \"b\", ] => [\"a\", \"b\"]\r\n results = results.replace(/,(\\s*)}/g, \"}\"); // { \"foo\": \"bar\", } => { \"foo\": \"bar\"}\r\n\r\n return results;\r\n }\r\n\r\n static setIsDebug(boolVal: boolean) {\r\n Utilities._isDebug = boolVal;\r\n }\r\n\r\n static getBaseUrl(url: string) {\r\n if (url.length < 8) {\r\n return url;\r\n }\r\n\r\n const slashIndex = url.indexOf(\"/\", 9);\r\n\r\n if (slashIndex < 0) {\r\n return url;\r\n }\r\n\r\n return url.substring(0, slashIndex);\r\n }\r\n\r\n static getDateStr(date: Date) {\r\n let dateStr = Utilities.frontPadToLength(date.getFullYear(), 4, \"0\");\r\n\r\n dateStr += Utilities.frontPadToLength(date.getMonth() + 1, 2, \"0\");\r\n dateStr += Utilities.frontPadToLength(date.getDate(), 2, \"0\");\r\n dateStr += Utilities.frontPadToLength(date.getHours(), 2, \"0\");\r\n dateStr += Utilities.frontPadToLength(date.getMinutes(), 2, \"0\");\r\n dateStr += Utilities.frontPadToLength(date.getSeconds(), 2, \"0\");\r\n\r\n return dateStr;\r\n }\r\n\r\n static getDateFromStr(dateStr: string) {\r\n if (!Utilities.isNumeric(dateStr) || dateStr.length !== 14) {\r\n throw new Error(\"Improperly formatted date string: \" + dateStr);\r\n }\r\n\r\n const year = parseInt(dateStr.substring(0, 4)),\r\n month = parseInt(dateStr.substring(4, 6)),\r\n day = parseInt(dateStr.substring(6, 8)),\r\n hours = parseInt(dateStr.substring(8, 10)),\r\n minutes = parseInt(dateStr.substring(10, 12)),\r\n seconds = parseInt(dateStr.substring(12, 14));\r\n\r\n Log.assert(year >= 2022, \"Invalid year: \" + dateStr);\r\n Log.assert(month >= 1 && month <= 12, \"Invalid month: \" + dateStr);\r\n Log.assert(day >= 0 && day <= 31, \"Invalid day: \" + dateStr);\r\n Log.assert(hours >= 0 && hours <= 23, \"Invalid hours: \" + dateStr);\r\n Log.assert(minutes >= 0 && minutes <= 59, \"Invalid minutes: \" + dateStr);\r\n Log.assert(seconds >= 0 && seconds <= 59, \"Invalid seconds: \" + dateStr);\r\n\r\n return new Date(year, month - 1, day, hours, minutes, seconds);\r\n }\r\n\r\n static monthNames: string[] = [\r\n \"January\",\r\n \"February\",\r\n \"March\",\r\n \"April\",\r\n \"May\",\r\n \"June\",\r\n \"July\",\r\n \"August\",\r\n \"September\",\r\n \"October\",\r\n \"November\",\r\n \"December\",\r\n ];\r\n\r\n static monthShortNames: string[] = [\r\n \"Jan\",\r\n \"Feb\",\r\n \"Mar\",\r\n \"Apr\",\r\n \"May\",\r\n \"Jun\",\r\n \"Jul\",\r\n \"Aug\",\r\n \"Sep\",\r\n \"Oct\",\r\n \"Nov\",\r\n \"Dec\",\r\n ];\r\n\r\n static lengthOfDictionary(d: any) {\r\n let c = 0;\r\n\r\n for (const i in d) {\r\n if (i) {\r\n ++c;\r\n }\r\n }\r\n\r\n return c;\r\n }\r\n\r\n static makeSafeForJson(content: string) {\r\n content = content.replace(/\\\\/g, \"/\");\r\n content = content.replace(/\"/gi, \"'\"); // this isn't the full way to do it, but for now...\r\n\r\n return content;\r\n }\r\n\r\n static isAlphaNumeric(candidate: string) {\r\n for (let i = 0; i < candidate.length; i++) {\r\n const charCode = candidate[i];\r\n\r\n if (\r\n !(\r\n (charCode >= \"0\" && charCode <= \"9\") ||\r\n (charCode >= \"a\" && charCode <= \"z\") ||\r\n (charCode >= \"A\" && charCode <= \"Z\")\r\n )\r\n ) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public static getJsonObject(contents: string): any | undefined {\r\n let jsonObject = undefined;\r\n\r\n contents = Utilities.fixJsonContent(contents);\r\n\r\n try {\r\n jsonObject = JSON.parse(contents);\r\n } catch (e: any) {\r\n Log.fail(\"Could not parse JSON: \" + e.message);\r\n }\r\n\r\n return jsonObject;\r\n }\r\n\r\n static appendErrors(source: IErrorable, add: IErrorable, context?: string) {\r\n if (!add.isInErrorState) {\r\n return;\r\n }\r\n\r\n source.isInErrorState = true;\r\n\r\n if (add.errorMessages) {\r\n if (source.errorMessages === undefined) {\r\n source.errorMessages = [];\r\n }\r\n\r\n for (const err of add.errorMessages) {\r\n let newContext = undefined;\r\n\r\n if (context) {\r\n newContext = err.context ? context + \": \" + err.context : context;\r\n } else {\r\n newContext = err.context;\r\n }\r\n\r\n source.errorMessages.push({\r\n message: err.message,\r\n context: newContext,\r\n });\r\n }\r\n }\r\n }\r\n\r\n static isNumeric(candidate: string) {\r\n for (let i = 0; i < candidate.length; i++) {\r\n const charCode = candidate[i];\r\n\r\n if ((charCode < \"0\" || charCode > \"9\") && charCode !== \".\" && (i > 0 || charCode !== \"-\")) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n static isNumericIsh(candidate: string) {\r\n for (let i = 0; i < candidate.length; i++) {\r\n const charCode = candidate[i];\r\n\r\n if (\r\n (charCode < \"0\" || charCode > \"9\") &&\r\n charCode !== \"e\" &&\r\n charCode !== \"+\" &&\r\n charCode !== \",\" &&\r\n charCode !== \".\" &&\r\n charCode !== \"-\"\r\n ) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n static removeQuotes(candidate: string) {\r\n candidate = candidate.trim();\r\n\r\n if (candidate.startsWith('\"')) {\r\n candidate = candidate.substring(1);\r\n } else if (candidate.startsWith('\"')) {\r\n candidate = candidate.substring(0, candidate.length - 1);\r\n }\r\n\r\n return candidate;\r\n }\r\n\r\n static normalizeVersionString(candidate: string) {\r\n candidate = candidate.replace(/v/gi, \"\").trim();\r\n\r\n candidate = candidate.trim();\r\n\r\n if (candidate.startsWith(\".\")) {\r\n candidate = \"0\" + candidate;\r\n }\r\n\r\n if (candidate.endsWith(\".\")) {\r\n candidate = candidate.substring(0, candidate.length - 1);\r\n }\r\n\r\n return candidate;\r\n }\r\n\r\n static isVersionString(candidate: string) {\r\n for (let i = 0; i < candidate.length; i++) {\r\n const charCode = candidate[i];\r\n\r\n if ((charCode < \"0\" || charCode > \"9\") && charCode !== \".\" && charCode !== \"v\") {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n static isAlpha(candidate: string) {\r\n for (let i = 0; i < candidate.length; i++) {\r\n const charCode = candidate[i];\r\n\r\n if (!((charCode >= \"a\" && charCode <= \"z\") || (charCode >= \"A\" && charCode <= \"Z\"))) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n static shallowCloneArray(source: any[]) {\r\n const newArr: any[] = new Array(source.length);\r\n\r\n for (let i = 0; i < source.length; i++) {\r\n newArr[i] = source[i];\r\n }\r\n\r\n return newArr;\r\n }\r\n\r\n static uint8ArrayToBase64(bytes: Uint8Array) {\r\n let binary = \"\";\r\n\r\n const len = bytes.byteLength;\r\n\r\n for (var i = 0; i < len; i++) {\r\n binary += String.fromCharCode(bytes[i]);\r\n }\r\n\r\n if (\r\n CartoApp.isWeb ||\r\n CartoApp.hostType === HostType.vsCodeMainWeb ||\r\n CartoApp.hostType === HostType.vsCodeWebService\r\n ) {\r\n return btoa(binary);\r\n }\r\n\r\n return Buffer.from(binary).toString(\"base64\"); //btoa(binary);\r\n }\r\n\r\n static arrayBufferToBase64(buffer: ArrayBuffer) {\r\n let binary = \"\";\r\n const bytes = new Uint8Array(buffer);\r\n\r\n const len = bytes.byteLength;\r\n\r\n for (var i = 0; i < len; i++) {\r\n binary += String.fromCharCode(bytes[i]);\r\n }\r\n\r\n if (\r\n CartoApp.isWeb ||\r\n CartoApp.hostType === HostType.vsCodeMainWeb ||\r\n CartoApp.hostType === HostType.vsCodeWebService\r\n ) {\r\n return btoa(binary);\r\n }\r\n\r\n return Buffer.from(binary).toString(\"base64\"); // btoa(binary);\r\n }\r\n\r\n static base64ToArrayBuffer(base64buffer: string) {\r\n const start = base64buffer.indexOf(\";base64,\");\r\n\r\n if (start > 0 && start < 50) {\r\n base64buffer = base64buffer.substring(start + 8);\r\n }\r\n\r\n const binary = atob(base64buffer);\r\n\r\n const arrayBuffer = new ArrayBuffer(binary.length);\r\n const bytes = new Uint8Array(arrayBuffer);\r\n\r\n const len = binary.length;\r\n\r\n for (var i = 0; i < len; i++) {\r\n bytes[i] = binary.charCodeAt(i);\r\n }\r\n\r\n return arrayBuffer;\r\n }\r\n\r\n static base64ToUint8Array(base64buffer: string) {\r\n const start = base64buffer.indexOf(\";base64,\");\r\n\r\n if (start > 0 && start < 50) {\r\n base64buffer = base64buffer.substring(start + 8);\r\n }\r\n\r\n const binary = atob(base64buffer);\r\n\r\n const arrayBuffer = new ArrayBuffer(binary.length);\r\n const bytes = new Uint8Array(arrayBuffer);\r\n\r\n const len = binary.length;\r\n\r\n for (var i = 0; i < len; i++) {\r\n bytes[i] = binary.charCodeAt(i);\r\n }\r\n\r\n return bytes;\r\n }\r\n\r\n // UTF8 related string functions adapted from StrangelyTyped/StringView.\r\n static _utf8ReadChar = function (\r\n charStruct: { bytesRead: number; charVal: number },\r\n buf: DataView,\r\n readPos: number,\r\n maxBytes: number\r\n ) {\r\n const firstByte = buf.getUint8(readPos);\r\n\r\n charStruct.bytesRead = 1;\r\n charStruct.charVal = 0;\r\n\r\n if (firstByte & 0x80) {\r\n var numBytes = 0;\r\n var aByte = firstByte;\r\n\r\n while (aByte & 0x80) {\r\n numBytes++;\r\n aByte <<= 1;\r\n }\r\n if (numBytes === 1) {\r\n charStruct.charVal = Utilities.replacementChar;\r\n return;\r\n }\r\n if (numBytes > maxBytes) {\r\n charStruct.charVal = Utilities.replacementChar;\r\n return;\r\n }\r\n\r\n //2 bytes means 3 bits reserved for UTF8 byte encoding, 5 bytes remaining for codepoint, and so on\r\n charStruct.charVal = firstByte & (0xff >> (numBytes + 1));\r\n\r\n for (var i = 1; i < numBytes; i++) {\r\n aByte = buf.getUint8(readPos + i);\r\n\r\n //0xC0 should isolate the continuation flag which should be 0x80\r\n if ((aByte & 0xc0) !== 0x80) {\r\n console.error(\r\n \"UTF-8 read - attempted to read \" + numBytes + \" byte character, found non-continuation at byte \" + i\r\n );\r\n charStruct.charVal = Utilities.replacementChar;\r\n\r\n charStruct.bytesRead = 1;\r\n return;\r\n }\r\n\r\n charStruct.charVal <<= 6;\r\n charStruct.charVal |= aByte & 0x3f;\r\n\r\n if (i === 1) {\r\n const rshift = 8 - (numBytes + 1) - 1;\r\n if (charStruct.charVal >> rshift === 0) {\r\n charStruct.charVal = Utilities.replacementChar;\r\n charStruct.bytesRead = 1;\r\n return;\r\n }\r\n }\r\n charStruct.bytesRead++;\r\n }\r\n\r\n if (charStruct.charVal > 0x10ffff) {\r\n console.error(\"UTF-8 read - found illegally high code point \" + charStruct.charVal);\r\n charStruct.charVal = Utilities.replacementChar;\r\n charStruct.bytesRead = 1;\r\n return;\r\n }\r\n } else {\r\n charStruct.charVal = firstByte;\r\n }\r\n };\r\n\r\n static canonicalizeId(id: string) {\r\n return id.toLowerCase();\r\n }\r\n\r\n static readStringUTF8(buf: DataView, byteOffset: number, bytesToRead: number) {\r\n const nullTerm = typeof bytesToRead === \"undefined\";\r\n var readPos = byteOffset || 0;\r\n\r\n if (!nullTerm && readPos + bytesToRead > buf.byteLength) {\r\n throw new Error(\"Attempted to read \" + (readPos + bytesToRead - buf.byteLength) + \" bytes past end of buffer\");\r\n }\r\n\r\n var str = \"\";\r\n\r\n const charStruct: { bytesRead: number; charVal: number } = { bytesRead: 0, charVal: 0 };\r\n\r\n while (readPos < buf.byteLength && (nullTerm || bytesToRead > readPos - byteOffset)) {\r\n Utilities._utf8ReadChar(\r\n charStruct,\r\n buf,\r\n readPos,\r\n nullTerm ? buf.byteLength - (readPos + byteOffset) : bytesToRead - (readPos - byteOffset)\r\n );\r\n readPos += charStruct.bytesRead;\r\n\r\n if (nullTerm && !charStruct.charVal) {\r\n break;\r\n }\r\n str += String.fromCharCode(charStruct.charVal);\r\n }\r\n return {\r\n str: str,\r\n byteLength: readPos - byteOffset,\r\n };\r\n }\r\n\r\n static readStringASCII(buf: DataView, byteOffset: number, bytesToRead: number) {\r\n var str = \"\";\r\n var byteLength = 0;\r\n byteOffset = byteOffset || 0;\r\n var nullTerm = false;\r\n\r\n if (typeof bytesToRead === \"undefined\") {\r\n nullTerm = true;\r\n bytesToRead = buf.byteLength - buf.byteOffset;\r\n }\r\n\r\n var charCode;\r\n\r\n for (var i = 0; i < bytesToRead; i++) {\r\n charCode = buf.getUint8(i + byteOffset);\r\n if (charCode === 0 && nullTerm) {\r\n break;\r\n }\r\n\r\n str += String.fromCharCode(charCode);\r\n byteLength++;\r\n }\r\n\r\n return {\r\n str: str,\r\n byteLength: byteLength + (nullTerm ? 1 : 0),\r\n };\r\n }\r\n\r\n static readStringASCIIBuffer(buf: Uint8Array, byteOffset: number, bytesToRead: number) {\r\n var str = \"\";\r\n\r\n byteOffset = byteOffset || 0;\r\n\r\n var nullTerm = false;\r\n\r\n if (typeof bytesToRead === \"undefined\") {\r\n nullTerm = true;\r\n bytesToRead = buf.byteLength - buf.byteOffset;\r\n }\r\n\r\n var charCode;\r\n\r\n for (var i = 0; i < bytesToRead; i++) {\r\n charCode = buf[i + byteOffset];\r\n if (charCode === 0 && nullTerm) {\r\n break;\r\n }\r\n\r\n str += String.fromCharCode(charCode);\r\n }\r\n\r\n return str;\r\n }\r\n\r\n static _createUtf8Char(charCode: number, arr: number[]) {\r\n if (charCode < 0x80) {\r\n arr.push(charCode);\r\n } else {\r\n const limits = [0x7f, 0x07ff, 0xffff, 0x1fffff];\r\n let i = 0;\r\n\r\n while (true) {\r\n i++;\r\n\r\n if (i === limits.length) {\r\n Utilities._createUtf8Char(Utilities.replacementChar, arr);\r\n\r\n return;\r\n }\r\n\r\n if (charCode <= limits[i]) {\r\n i += 1;\r\n\r\n var aByte = 0;\r\n var j;\r\n\r\n for (j = 0; j < i; j++) {\r\n aByte <<= 1;\r\n aByte |= 1;\r\n }\r\n\r\n aByte <<= 8 - i;\r\n\r\n aByte |= charCode >> (6 * (i - 1));\r\n arr.push(aByte);\r\n\r\n for (j = 1; j < i; j++) {\r\n aByte = 0x80;\r\n\r\n aByte |= (charCode >> (6 * (i - (j + 1)))) & 0xbf;\r\n arr.push(aByte);\r\n }\r\n\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n\r\n static convertStringToBytes(str: string, encoding: string) {\r\n if (encoding === \"UTF-8\") {\r\n const arr: number[] = [];\r\n\r\n for (let i = 0; i < str.length; i++) {\r\n Utilities._createUtf8Char(str.charCodeAt(i), arr);\r\n }\r\n\r\n return arr;\r\n } else if (encoding === \"ASCII\") {\r\n const arr = [];\r\n\r\n for (let i = 0; i < str.length; i++) {\r\n let chr = str.charCodeAt(i);\r\n\r\n if (chr > 255) {\r\n chr = \"?\".charCodeAt(0);\r\n }\r\n\r\n arr.push(chr);\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n throw new Error();\r\n }\r\n\r\n static ensureNotStartsWithSlash(pathSegment: string) {\r\n while (pathSegment.startsWith(\"/\")) {\r\n pathSegment = pathSegment.substring(1);\r\n }\r\n\r\n return pathSegment;\r\n }\r\n\r\n static ensureStartsWithSlash(pathSegment: string) {\r\n if (!pathSegment.startsWith(\"/\")) {\r\n pathSegment = \"/\" + pathSegment;\r\n }\r\n\r\n return pathSegment;\r\n }\r\n\r\n static ensureEndsWithSlash(pathSegment: string) {\r\n if (!pathSegment.endsWith(\"/\")) {\r\n pathSegment += \"/\";\r\n }\r\n\r\n return pathSegment;\r\n }\r\n\r\n static ensureNotEndsWithSlash(pathSegment: string) {\r\n while (pathSegment.length > 0 && pathSegment.endsWith(\"/\")) {\r\n pathSegment = pathSegment.substring(0, pathSegment.length - 1);\r\n }\r\n\r\n return pathSegment;\r\n }\r\n\r\n static ensureStartsWithBackSlash(pathSegment: string) {\r\n if (!pathSegment.startsWith(\"\\\\\")) {\r\n pathSegment = \"\\\\\" + pathSegment;\r\n }\r\n\r\n return pathSegment;\r\n }\r\n\r\n static ensureEndsWithBackSlash(pathSegment: string) {\r\n if (!pathSegment.endsWith(\"\\\\\")) {\r\n pathSegment += \"\\\\\";\r\n }\r\n\r\n return pathSegment;\r\n }\r\n\r\n static replaceAll(content: string, fromToken: string, toToken: string) {\r\n let nextIndex = content.indexOf(fromToken);\r\n\r\n while (nextIndex >= 0) {\r\n content = content.substring(0, nextIndex) + toToken + content.substring(nextIndex + fromToken.length);\r\n\r\n nextIndex = content.indexOf(fromToken, nextIndex + toToken.length);\r\n }\r\n\r\n return content;\r\n }\r\n\r\n static replaceAllExceptInLines(content: string, fromToken: string, toToken: string, exceptInLinesWith: string[]) {\r\n let nextIndex = content.indexOf(fromToken);\r\n\r\n while (nextIndex >= 0) {\r\n let doReplace = true;\r\n\r\n let previousNewLine = content.lastIndexOf(\"\\n\", nextIndex);\r\n if (previousNewLine >= 0) {\r\n const previousPreviousNewLine = content.lastIndexOf(\"\\n\", previousNewLine - 1);\r\n\r\n if (previousPreviousNewLine >= 0) {\r\n previousNewLine = previousPreviousNewLine;\r\n }\r\n\r\n const lineSegment = content.substring(previousNewLine, nextIndex);\r\n for (const exceptIn of exceptInLinesWith) {\r\n if (lineSegment.indexOf(exceptIn) > 0) {\r\n doReplace = false;\r\n }\r\n }\r\n }\r\n\r\n if (doReplace) {\r\n content = content.substring(0, nextIndex) + toToken + content.substring(nextIndex + fromToken.length);\r\n\r\n nextIndex = content.indexOf(fromToken, nextIndex + toToken.length);\r\n } else {\r\n nextIndex = content.indexOf(fromToken, nextIndex + 1);\r\n }\r\n }\r\n\r\n return content;\r\n }\r\n static createRandomId(length: number) {\r\n let id = \"\";\r\n\r\n for (let i = 0; i < length; i++) {\r\n const main = Math.random() * 6;\r\n\r\n if (main < 1) {\r\n id += String.fromCharCode(Math.floor(Math.random() * 10) + 48);\r\n } else if (main < 4) {\r\n id += String.fromCharCode(Math.floor(Math.random() * 26) + 65);\r\n } else {\r\n id += String.fromCharCode(Math.floor(Math.random() * 26) + 97);\r\n }\r\n }\r\n\r\n return id;\r\n }\r\n\r\n static canonicalizeUuid(uuidString: string) {\r\n return uuidString.trim().toLowerCase();\r\n }\r\n\r\n static isValidUuid(uuidString: string) {\r\n return uuidString.length === 36;\r\n }\r\n\r\n static uuidEqual(uuidStringA: string, uuidStringB: string) {\r\n return Utilities.canonicalizeId(uuidStringA) === Utilities.canonicalizeId(uuidStringB);\r\n }\r\n\r\n static createUuid() {\r\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\r\n let val = CartoApp.generateCryptoRandomNumber(16);\r\n\r\n const r = val | 0,\r\n v = c === \"x\" ? r : (r & 0x3) | 0x8;\r\n\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n static uint8ArraysAreEqual(arrayA: Uint8Array, arrayB: Uint8Array) {\r\n if (arrayA.length !== arrayB.length) {\r\n return false;\r\n }\r\n\r\n for (let i = 0; i < arrayA.length; i++) {\r\n if (arrayA[i] !== arrayB[i]) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n static throwIfUint8ArraysNotEqual(arrayA: Uint8Array, arrayB: Uint8Array) {\r\n if (arrayA.length !== arrayB.length) {\r\n throw new Error(\"Arrays are of mismatched length.\");\r\n }\r\n\r\n for (let i = 0; i < arrayA.length; i++) {\r\n if (arrayA[i] !== arrayB[i]) {\r\n throw new Error(\"Mismatch at position \" + i + \" value A: \" + arrayA[i] + \" value B:\" + arrayB[i]);\r\n }\r\n }\r\n }\r\n\r\n static getString(view: DataView, byteOffset: number, byteLength: number, encoding?: string) {\r\n if (encoding === \"UTF8\" || encoding === undefined) {\r\n const result = Utilities.readStringUTF8(view, byteOffset, byteLength);\r\n Log.assert(result.byteLength === byteLength, \"UTGS\");\r\n return result.str;\r\n } else if (encoding === \"ASCII\") {\r\n const result = Utilities.readStringASCII(view, byteOffset, byteLength);\r\n\r\n return result.str;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n static getSimpleString(str: string) {\r\n str = str.trim();\r\n str = str.replace(/ /gi, \"\");\r\n str = str.replace(/=/gi, \"\");\r\n str = str.replace(/\\?/gi, \"\");\r\n\r\n return str;\r\n }\r\n\r\n static getAsciiString(view: DataView, byteOffset: number, byteLength: number, encoding?: string) {\r\n const result = Utilities.readStringASCII(view, byteOffset, byteLength);\r\n\r\n return result.str;\r\n }\r\n\r\n static getAsciiStringFromBytes(bytes: number[]) {\r\n let str = \"\";\r\n for (let i = 0; i < bytes.length; i++) {\r\n str += String.fromCharCode(bytes[i]);\r\n }\r\n\r\n return str;\r\n }\r\n\r\n static getAsciiStringFromUint8Array(bytes: Uint8Array) {\r\n let str = \"\";\r\n\r\n for (let i = 0; i < bytes.length; i++) {\r\n str += String.fromCharCode(bytes[i]);\r\n }\r\n\r\n return str;\r\n }\r\n\r\n static writeString(view: DataView, byteOffset: number, value: string, encoding: string) {\r\n const arr = Utilities.convertStringToBytes(value, encoding);\r\n\r\n if (arr === undefined) {\r\n return byteOffset;\r\n }\r\n\r\n let i = 0;\r\n\r\n for (i = 0; i < arr.length && byteOffset + i < view.byteLength; i++) {\r\n view.setUint8(byteOffset + i, arr[i]);\r\n }\r\n\r\n return byteOffset + i;\r\n }\r\n\r\n static frontPadToLength(val: string | number, length: number, pad: string): string {\r\n val = val + \"\";\r\n\r\n while (val.length < length) {\r\n val = pad + val;\r\n }\r\n\r\n return val;\r\n }\r\n\r\n static getShortYear(year: number) {\r\n let short = year + \"\"; // cast to string\r\n\r\n if (short.length === 4) {\r\n short = short.substring(2, 4);\r\n }\r\n\r\n return short;\r\n }\r\n\r\n static getFriendlySummary(date: Date) {\r\n if (date === undefined || !(date instanceof Date)) {\r\n Log.fail(\"Empty/wrong-typed date passed in.\");\r\n }\r\n\r\n let returnValue = this.monthShortNames[date.getMonth()] + \" \" + Utilities.frontPadToLength(date.getDate(), 2, \"0\");\r\n\r\n const now = new Date();\r\n\r\n if (date.getFullYear() !== now.getFullYear()) {\r\n returnValue += \" \" + this.getShortYear(date.getFullYear());\r\n } else {\r\n let hours = date.getHours() % 12;\r\n\r\n if (hours === 0) {\r\n hours = 12;\r\n }\r\n\r\n returnValue +=\r\n \" \" + Utilities.frontPadToLength(hours, 2, \"0\") + \":\" + Utilities.frontPadToLength(date.getMinutes(), 2, \"0\");\r\n }\r\n\r\n return returnValue;\r\n }\r\n\r\n static getFriendlySummarySeconds(date: Date) {\r\n if (date === undefined || !(date instanceof Date)) {\r\n Log.fail(\"Empty/wrong-typed date passed in.\");\r\n }\r\n\r\n return (\r\n this.monthShortNames[date.getMonth()] +\r\n \" \" +\r\n Utilities.frontPadToLength(date.getDate(), 2, \"0\") +\r\n \" \" +\r\n this.getShortYear(date.getFullYear()) +\r\n \" \" +\r\n Utilities.frontPadToLength(date.getHours(), 2, \"0\") +\r\n Utilities.frontPadToLength(date.getMinutes(), 2, \"0\") +\r\n \".\" +\r\n Utilities.frontPadToLength(date.getSeconds(), 2, \"0\")\r\n );\r\n }\r\n\r\n static getFileFriendlySummarySeconds(date: Date) {\r\n if (date === undefined || !(date instanceof Date)) {\r\n Log.fail(\"Empty/wrong-typed date passed in.\");\r\n }\r\n\r\n return (\r\n Utilities.frontPadToLength(date.getMonth() + 1, 2, \"0\") +\r\n \"-\" +\r\n Utilities.frontPadToLength(date.getDate(), 2, \"0\") +\r\n \"-\" +\r\n Utilities.frontPadToLength(date.getHours(), 2, \"0\") +\r\n Utilities.frontPadToLength(date.getMinutes(), 2, \"0\") +\r\n Utilities.frontPadToLength(date.getSeconds(), 2, \"0\")\r\n );\r\n }\r\n\r\n static getDateSummary(date: Date) {\r\n return (\r\n date.getMonth() +\r\n 1 +\r\n \".\" +\r\n date.getDate() +\r\n \".\" +\r\n (date.getFullYear() - 2000) +\r\n \".\" +\r\n date.getHours() +\r\n \".\" +\r\n date.getMinutes() +\r\n \".\" +\r\n date.getSeconds()\r\n );\r\n }\r\n\r\n static countChar(source: string, find: string) {\r\n let count = 0;\r\n\r\n let index = source.indexOf(find);\r\n\r\n while (index >= 0) {\r\n count++;\r\n\r\n index = source.indexOf(find, index + find.length);\r\n }\r\n\r\n return count;\r\n }\r\n\r\n static isString(obj: any) {\r\n return typeof obj == \"string\";\r\n }\r\n\r\n static isNullOrUndefined<T>(object: T | undefined | null): object is T {\r\n return (object as T) === undefined || (object as T) === null;\r\n }\r\n}\r\n"]}
|