feat!: init project v2

This commit is contained in:
Artemy 2024-04-24 18:52:28 +03:00
parent f10f91c676
commit ff8e88b39b
25 changed files with 924 additions and 4115 deletions

View file

@ -1,23 +0,0 @@
module.exports = {
env: {
commonjs: true,
es2021: true,
node: true,
},
extends: "eslint:recommended",
overrides: [
{
env: {
node: true,
},
files: [".eslintrc.{js,cjs}"],
parserOptions: {
sourceType: "script",
},
},
],
parserOptions: {
ecmaVersion: "latest",
},
rules: {},
};

2
.gitattributes vendored
View file

@ -1,2 +0,0 @@
# Auto detect text files and perform LF normalization
* text=auto

128
.gitignore vendored
View file

@ -1,127 +1 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
*.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Snowpack dependency directory (https://snowpack.dev/)
web_modules/
# TypeScript cache
*.tsbuildinfo
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional stylelint cache
.stylelintcache
# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local
# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache
# Next.js build output
.next
out
# Nuxt.js build / generate output
.nuxt
dist
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
# vuepress build output
.vuepress/dist
# vuepress v2.x temp and cache directory
.temp
.cache
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port
# Stores VSCode versions used for testing VSCode extensions
.vscode-test
# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*
/target

730
Cargo.lock generated Normal file
View file

@ -0,0 +1,730 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "ahash"
version = "0.8.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
dependencies = [
"cfg-if",
"once_cell",
"version_check",
"zerocopy",
]
[[package]]
name = "aho-corasick"
version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
dependencies = [
"memchr",
]
[[package]]
name = "allocator-api2"
version = "0.2.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f"
[[package]]
name = "anstream"
version = "0.6.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb"
dependencies = [
"anstyle",
"anstyle-parse",
"anstyle-query",
"anstyle-wincon",
"colorchoice",
"utf8parse",
]
[[package]]
name = "anstyle"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc"
[[package]]
name = "anstyle-parse"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c"
dependencies = [
"utf8parse",
]
[[package]]
name = "anstyle-query"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648"
dependencies = [
"windows-sys",
]
[[package]]
name = "anstyle-wincon"
version = "3.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7"
dependencies = [
"anstyle",
"windows-sys",
]
[[package]]
name = "approx"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
dependencies = [
"num-traits",
]
[[package]]
name = "autocfg"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80"
[[package]]
name = "byteorder"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
[[package]]
name = "cfg-if"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "cimengine-build-tools"
version = "2.0.0"
dependencies = [
"clap",
"geo",
"geojson",
"serde",
"serde_json",
"toml_edit",
"wax",
]
[[package]]
name = "clap"
version = "4.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0"
dependencies = [
"clap_builder",
"clap_derive",
]
[[package]]
name = "clap_builder"
version = "4.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4"
dependencies = [
"anstream",
"anstyle",
"clap_lex",
"strsim",
]
[[package]]
name = "clap_derive"
version = "4.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64"
dependencies = [
"heck",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "clap_lex"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce"
[[package]]
name = "colorchoice"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
[[package]]
name = "const_format"
version = "0.2.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3a214c7af3d04997541b18d432afaff4c455e79e2029079647e72fc2bd27673"
dependencies = [
"const_format_proc_macros",
]
[[package]]
name = "const_format_proc_macros"
version = "0.2.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c7f6ff08fd20f4f299298a28e2dfa8a8ba1036e6cd2460ac1de7b425d76f2500"
dependencies = [
"proc-macro2",
"quote",
"unicode-xid",
]
[[package]]
name = "earcutr"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "79127ed59a85d7687c409e9978547cffb7dc79675355ed22da6b66fd5f6ead01"
dependencies = [
"itertools",
"num-traits",
]
[[package]]
name = "either"
version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2"
[[package]]
name = "equivalent"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
[[package]]
name = "float_next_after"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8bf7cc16383c4b8d58b9905a8509f02926ce3058053c056376248d958c9df1e8"
[[package]]
name = "geo"
version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f811f663912a69249fa620dcd2a005db7254529da2d8a0b23942e81f47084501"
dependencies = [
"earcutr",
"float_next_after",
"geo-types",
"geographiclib-rs",
"log",
"num-traits",
"robust",
"rstar",
"spade",
]
[[package]]
name = "geo-types"
version = "0.7.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ff16065e5720f376fbced200a5ae0f47ace85fd70b7e54269790281353b6d61"
dependencies = [
"approx",
"num-traits",
"rstar",
"serde",
]
[[package]]
name = "geographiclib-rs"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6e5ed84f8089c70234b0a8e0aedb6dc733671612ddc0d37c6066052f9781960"
dependencies = [
"libm",
]
[[package]]
name = "geojson"
version = "0.24.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a5d728c1df1fbf328d74151efe6cb0586f79ee813346ea981add69bd22c9241b"
dependencies = [
"geo-types",
"log",
"serde",
"serde_json",
"thiserror",
]
[[package]]
name = "hash32"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606"
dependencies = [
"byteorder",
]
[[package]]
name = "hashbrown"
version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
dependencies = [
"ahash",
"allocator-api2",
]
[[package]]
name = "heapless"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad"
dependencies = [
"hash32",
"stable_deref_trait",
]
[[package]]
name = "heck"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
[[package]]
name = "indexmap"
version = "2.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26"
dependencies = [
"equivalent",
"hashbrown",
]
[[package]]
name = "itertools"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
dependencies = [
"either",
]
[[package]]
name = "itoa"
version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
[[package]]
name = "libm"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"
[[package]]
name = "log"
version = "0.4.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
[[package]]
name = "memchr"
version = "2.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d"
[[package]]
name = "minimal-lexical"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
[[package]]
name = "nom"
version = "7.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
dependencies = [
"memchr",
"minimal-lexical",
]
[[package]]
name = "num-traits"
version = "0.2.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a"
dependencies = [
"autocfg",
"libm",
]
[[package]]
name = "once_cell"
version = "1.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
[[package]]
name = "pori"
version = "0.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4a63d338dec139f56dacc692ca63ad35a6be6a797442479b55acd611d79e906"
dependencies = [
"nom",
]
[[package]]
name = "proc-macro2"
version = "1.0.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
version = "1.0.36"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
dependencies = [
"proc-macro2",
]
[[package]]
name = "regex"
version = "1.10.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c"
dependencies = [
"aho-corasick",
"memchr",
"regex-automata",
"regex-syntax",
]
[[package]]
name = "regex-automata"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea"
dependencies = [
"aho-corasick",
"memchr",
"regex-syntax",
]
[[package]]
name = "regex-syntax"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56"
[[package]]
name = "robust"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cbf4a6aa5f6d6888f39e980649f3ad6b666acdce1d78e95b8a2cb076e687ae30"
[[package]]
name = "rstar"
version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "133315eb94c7b1e8d0cb097e5a710d850263372fd028fff18969de708afc7008"
dependencies = [
"heapless",
"num-traits",
"smallvec",
]
[[package]]
name = "ryu"
version = "1.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1"
[[package]]
name = "same-file"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
dependencies = [
"winapi-util",
]
[[package]]
name = "serde"
version = "1.0.198"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9846a40c979031340571da2545a4e5b7c4163bdae79b301d5f86d03979451fcc"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.198"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e88edab869b01783ba905e7d0153f9fc1a6505a96e4ad3018011eedb838566d9"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "serde_json"
version = "1.0.116"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813"
dependencies = [
"itoa",
"ryu",
"serde",
]
[[package]]
name = "smallvec"
version = "1.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
[[package]]
name = "spade"
version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61addf9117b11d1f5b4bf6fe94242ba25f59d2d4b2080544b771bd647024fd00"
dependencies = [
"hashbrown",
"num-traits",
"robust",
"smallvec",
]
[[package]]
name = "stable_deref_trait"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
[[package]]
name = "strsim"
version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
[[package]]
name = "syn"
version = "2.0.60"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "thiserror"
version = "1.0.59"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
version = "1.0.59"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "toml_datetime"
version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
[[package]]
name = "toml_edit"
version = "0.22.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3328d4f68a705b2a4498da1d580585d39a6510f98318a2cec3018a7ec61ddef"
dependencies = [
"indexmap",
"toml_datetime",
"winnow",
]
[[package]]
name = "unicode-ident"
version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
[[package]]
name = "unicode-xid"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
[[package]]
name = "utf8parse"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
[[package]]
name = "version_check"
version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
[[package]]
name = "walkdir"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
dependencies = [
"same-file",
"winapi-util",
]
[[package]]
name = "wax"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d12a78aa0bab22d2f26ed1a96df7ab58e8a93506a3e20adb47c51a93b4e1357"
dependencies = [
"const_format",
"itertools",
"nom",
"pori",
"regex",
"thiserror",
"walkdir",
]
[[package]]
name = "winapi-util"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "134306a13c5647ad6453e8deaec55d3a44d6021970129e6188735e74bf546697"
dependencies = [
"windows-sys",
]
[[package]]
name = "windows-sys"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
dependencies = [
"windows-targets",
]
[[package]]
name = "windows-targets"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb"
dependencies = [
"windows_aarch64_gnullvm",
"windows_aarch64_msvc",
"windows_i686_gnu",
"windows_i686_gnullvm",
"windows_i686_msvc",
"windows_x86_64_gnu",
"windows_x86_64_gnullvm",
"windows_x86_64_msvc",
]
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263"
[[package]]
name = "windows_aarch64_msvc"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6"
[[package]]
name = "windows_i686_gnu"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670"
[[package]]
name = "windows_i686_gnullvm"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9"
[[package]]
name = "windows_i686_msvc"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf"
[[package]]
name = "windows_x86_64_gnu"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596"
[[package]]
name = "windows_x86_64_msvc"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0"
[[package]]
name = "winnow"
version = "0.6.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0c976aaaa0e1f90dbb21e9587cdaf1d9679a1cde8875c0d6bd83ab96a208352"
dependencies = [
"memchr",
]
[[package]]
name = "zerocopy"
version = "0.7.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be"
dependencies = [
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
version = "0.7.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6"
dependencies = [
"proc-macro2",
"quote",
"syn",
]

19
Cargo.toml Normal file
View file

@ -0,0 +1,19 @@
[package]
name = "cimengine-build-tools"
version = "2.0.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
clap = { version = "4.5.4", features = ["derive"] }
geo = "0.28.0"
geojson = "0.24.1"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
toml_edit = "0.22.12"
wax = "0.6.0"
[[bin]]
name = "cimengine"
path = "src/main.rs"

21
LICENSE
View file

@ -1,21 +0,0 @@
MIT License
Copyright (c) 2023 Artemy
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -1,50 +1,3 @@
# CIMEngine build tools
This is new version. WIP rewriting on rust.
## Installation
```bash
npm i cimengine-build-tools
```
or
```bash
npm i cimengine-build-tools -g
```
## Usage
### Tools
1. cimengine-init - Initializes the cimengine project
2. cimengine-build - Assembles project files into a single geojson
3. cimengine-country-fix - Transforms the country geojson file (merges polygons and simplifies them)
### cimengine-init
params: name - name of project
usage: `cimengine-init --name map`
### cimengine-build
params:
1. projectFolder - folder with project generated by cimengine-init (If this parameter is specified, no other parameters are needed)
2. layers - path to layers.yaml
3. properties - path to properties.yaml
4. config - path to config.yaml
5. countries - path to countries folder
6. natureObjects - path to nature folder
7. roads - path to roads folder
8. output - path to output file
usage: `cimengine-build --projectFolder ./map`
### cimengine-country-fix
params:
1. countryPath - path to country file
2. simplify - Simplification accuracy of polygons (optional)
usage: `cimengine-country-fix --countryPath ./map/src/countries/usa.geojson`
To see the old version, goto [old-branch](https://github.com/CIMEngine/cimengine-build-tools/tree/old-js)

3251
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,42 +0,0 @@
{
"name": "cimengine-build-tools",
"version": "1.6.0",
"description": "Geojson data processing tools for CIMEngine",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"bin": {
"cimengine-build": "./tools/GeoBuilder.js",
"cimengine-country-fix": "./tools/CountryFixer.js",
"cimengine-init": "./tools/ProjectInit.js"
},
"repository": {
"type": "git",
"url": "git+https://github.com/CIMEngine/cimengine-build-tools.git"
},
"keywords": [
"cimengine",
"geojson",
"geo",
"map",
"tools",
"processing"
],
"author": "artegoser",
"license": "MIT",
"bugs": {
"url": "https://github.com/CIMEngine/cimengine-build-tools/issues"
},
"homepage": "https://github.com/CIMEngine/cimengine-build-tools#readme",
"dependencies": {
"@turf/turf": "^6.5.0",
"lodash": "^4.17.21",
"md5": "^2.3.0",
"yaml": "^2.3.1",
"yargs": "^17.7.2"
},
"devDependencies": {
"eslint": "^8.56.0"
}
}

1
src/build/mod.rs Normal file
View file

@ -0,0 +1 @@
pub fn build() {}

23
src/init.rs Normal file
View file

@ -0,0 +1,23 @@
use std::{fs, path::Path};
pub fn init(name: String) {
let config = include_str!("./templates/config.toml");
let country_config = include_str!("./templates/country.toml");
let geojson = include_str!("./templates/sample.geojson");
let root_folder = Path::new(&name);
let country_folder = Path::new(&name).join("countries").join("sample_country_id");
let nature_folder = Path::new(&name).join("nature");
fs::create_dir_all(&country_folder).unwrap();
fs::create_dir_all(&nature_folder).unwrap();
fs::write(root_folder.join("config.toml"), config).unwrap();
fs::write(country_folder.join("country.toml"), country_config).unwrap();
fs::write(country_folder.join("country.geojson"), geojson).unwrap();
fs::write(nature_folder.join("water.geojson"), geojson).unwrap();
fs::write(nature_folder.join("sand.geojson"), geojson).unwrap();
fs::write(nature_folder.join("grass.geojson"), geojson).unwrap();
}

17
src/main.rs Normal file
View file

@ -0,0 +1,17 @@
use clap::Parser;
mod build;
mod init;
mod types;
use types::Commands;
fn main() {
let args = types::Cli::parse();
match args.cmd {
Commands::Build => build::build(),
Commands::Init { name } => init::init(name),
_ => unimplemented!(),
}
}

39
src/templates/config.toml Normal file
View file

@ -0,0 +1,39 @@
[country]
# Order matters when building countries. This affects the processing of area intersections
layers = ["sample_country_id"]
[[processing]]
output_folder = "out"
countries_file = "countries.json"
geo_file = "geo.geojson"
# generate_colors = false
# show_markers = false
# Include or exclude countries based on tags
# Glob syntax is supported
[[processing.tags]]
include = [] # [] = not filtered
# exclude = ["test", "test2"]
# [[processing.countries_rewrite]]
# name = "name"
# color = "#000000"
# Information for public repository in cimengine. See: https://github.com/CIMEngine/MapList
# [[processing.public]]
# name = "Sample Map"
# geo = "https://example.com/geo.geojson"
# countries = "https://example.com/countries.json"
[[nature]]
id = "water"
color = "#75cff0"
[[nature]]
id = "sand"
color = "#efe9e1"
[[nature]]
id = "grass"
color = "#d1e6be"

View file

@ -0,0 +1,5 @@
name = "Sample Country"
description = "This is a sample country"
foundation_date = "2024-01-01"
flag = "https://example.com/flag.png"
about = "https://example.com/about.html"

87
src/types.rs Normal file
View file

@ -0,0 +1,87 @@
use clap::{Parser, Subcommand};
use serde::{Deserialize, Serialize};
#[derive(Debug, Parser)]
#[command(name = "cimengine", bin_name = "cimengine")]
#[command(about = "CIMEngine build tools")]
pub struct Cli {
#[command(subcommand)]
pub cmd: Commands,
}
#[derive(Debug, Subcommand)]
#[clap(author, version, about)]
pub enum Commands {
/// Build project
Build,
/// Initialize a new project
Init {
#[clap(default_value = "map")]
name: String,
},
/// Fix geospatial file
Fix {
/// Path to geospatial file supported by cimengine
#[clap(short, long)]
path: String,
},
/// Utility for creating countries, roads, etc.
New {
#[command(subcommand)]
cmd: NewCommands,
},
}
#[derive(Debug, Subcommand)]
pub enum NewCommands {
/// Create new country
Country { name: String },
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct Config {
country: CountryConfig,
processing: Vec<ProcessingConfig>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct CountryConfig {
layers: Vec<String>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct ProcessingConfig {
generate_colors: Option<bool>,
show_markers: Option<bool>,
output_folder: String,
countries_file: String,
geo_file: String,
tags: Option<ProcessingTagsConfig>,
countries_rewrite: Option<CountryRewriteConfig>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct ProcessingTagsConfig {
include: Vec<String>,
exclude: Vec<String>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct CountryRewriteConfig {
name: Option<String>,
description: Option<String>,
foundation_date: Option<String>,
flag: Option<String>,
about: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct Country {
name: String,
description: String,
foundation_date: String,
flag: String,
about: Option<String>,
tags: Option<Vec<String>>,
}

View file

@ -1,70 +0,0 @@
#!/usr/bin/env node
const turf = require("@turf/turf");
const fs = require("fs");
const yargs = require("yargs/yargs");
const { hideBin } = require("yargs/helpers");
const args = yargs(hideBin(process.argv)).argv;
let simplify = Number(args.simplify) || false;
let co_features = JSON.parse(fs.readFileSync(args.countryPath));
let nonPoly = co_features.features.filter(
(v) => !v.geometry.type.endsWith("Polygon")
);
nonPoly = nonPoly.map((v) => {
if (v.properties.type === "landmark") {
v.properties.type = "landmark-0";
}
if (!v.properties.type) {
v.properties.type = "city";
}
return v;
});
let polygons = co_features.features.filter((v) =>
v.geometry.type.endsWith("Polygon")
);
let props = {};
for (let feature of polygons) {
if (props[feature.properties.name]) continue;
props[feature.properties.name] = {
stroke: feature.properties.stroke,
fill: feature.properties.fill,
type: feature.properties.type,
tags: feature.properties.tags,
};
}
polygons = turf.dissolve(turf.featureCollection(polygons), {
propertyName: "some-undefined-value",
});
if (simplify !== false) {
polygons = turf.simplify(polygons, {
tolerance: simplify,
highQuality: true,
});
}
polygons.features = polygons.features.map((v) => {
v.properties = {
name: v.properties.name,
fill: props[v.properties.name].fill,
stroke: props[v.properties.name].stroke,
type: props[v.properties.name].type,
tags: props[v.properties.name].tags,
};
return v;
});
polygons.features = polygons.features.concat(nonPoly);
console.log("done");
fs.writeFileSync(args.countryPath, JSON.stringify(polygons, null, " "));

View file

@ -1,419 +0,0 @@
#!/usr/bin/env node
const turf = require("@turf/turf");
const fs = require("fs");
const YAML = require("yaml");
const _ = require("lodash");
const path = require("node:path");
const md5 = require("md5");
const yargs = require("yargs/yargs");
const { hideBin } = require("yargs/helpers");
const args = yargs(hideBin(process.argv)).argv;
const geofixConf = {
projectFolder: args.projectFolder,
layers: args.layers || path.join(args.projectFolder, "src", "layers.yaml"),
properties:
args.properties || path.join(args.projectFolder, "src", "properties.yaml"),
config: args.config || path.join(args.projectFolder, "src", "config.yaml"),
countries:
args.countries || path.join(args.projectFolder, "src", "countries"),
naturesObjects:
args.naturesObjects || path.join(args.projectFolder, "src", "nature"),
roads: args.roads || path.join(args.projectFolder, "src", "roads"),
output: args.output || path.join(args.projectFolder, "geo.geojson"),
};
let layers = YAML.parse(fs.readFileSync(geofixConf.layers, "utf-8"));
let countries_properties =
YAML.parse(fs.readFileSync(geofixConf.properties, "utf-8")) || {};
let config = YAML.parse(fs.readFileSync(geofixConf.config, "utf-8"));
let features = [];
for (let country of layers) {
let properties = countries_properties[country] || {};
let co_features = JSON.parse(
fs.readFileSync(
path.join(geofixConf.countries, `${country}.geojson`),
"utf-8"
)
);
co_features.features = co_features.features.flatMap((val) => {
if (val?.geometry?.type === "MultiPolygon") {
return val.geometry.coordinates.map((coordinateSet) => {
return {
...val,
geometry: {
type: "Polygon",
coordinates: coordinateSet,
},
};
});
} else {
return val;
}
});
co_features.features = co_features.features.map((val) => {
if (val?.geometry?.type.endsWith("Polygon")) {
val.properties = {};
}
return val;
});
fs.writeFileSync(
path.join(geofixConf.countries, `${country}.geojson`),
JSON.stringify(co_features, null, " ")
);
if (!properties.fill) {
properties.fill = `#${md5(country).substring(0, 6)}`;
}
if (!properties.stroke) {
properties.stroke = `#${md5(country).substring(6, 12)}`;
}
co_features = co_features.features;
features.unshift(
...co_features.map((val) => {
if (val.geometry.type == "Polygon") {
val.properties = properties || {};
val.properties.name = country;
}
return val;
})
);
}
let geo = {
type: "FeatureCollection",
features,
};
geo.features = geo.features.filter((v) => v.properties.name);
console.time("Total");
console.log("Dissolve");
console.time("Dissolve");
let nonPoly = geo.features.filter((v) => !v.geometry.type.endsWith("Polygon"));
nonPoly = nonPoly.map((v) => {
if (v.properties.type === "landmark") {
v.properties.type = "landmark-0";
}
if (!v.properties.type) {
v.properties.type = "city";
}
return v;
});
let polygons = geo.features.filter((v) => v.geometry.type.endsWith("Polygon"));
let props = {};
for (let feature of polygons) {
if (props[feature.properties.name]) continue;
props[feature.properties.name] = {
stroke: feature.properties.stroke,
fill: feature.properties.fill,
type: feature.properties.type,
tags: feature.properties.tags,
};
}
let dissolved = turf.dissolve(turf.featureCollection(polygons), {
propertyName: "name",
});
dissolved.features = dissolved.features.map((v) => {
v.properties = {
name: v.properties.name,
fill: props[v.properties.name].fill,
stroke: props[v.properties.name].stroke,
type: props[v.properties.name].type,
tags: props[v.properties.name].tags,
};
return v;
});
geo.features = dissolved.features.concat(nonPoly);
console.timeEnd("Dissolve");
console.log();
console.log("Polygons to MultiPolygons");
console.time("Polygons to MultiPolygons");
polygons = geo.features.filter((v) => v.geometry.type.endsWith("Polygon"));
nonPoly = geo.features.filter((v) => !v.geometry.type.endsWith("Polygon"));
let countries = {};
for (let somePolygon of polygons) {
if (!countries[somePolygon.properties.name]) {
countries[somePolygon.properties.name] = {
type: "Feature",
properties: somePolygon.properties,
geometry: {
type: "MultiPolygon",
coordinates: [],
},
};
}
if (somePolygon.geometry.type === "MultiPolygon") {
countries[somePolygon.properties.name].geometry.coordinates = countries[
somePolygon.properties.name
].concat(somePolygon.geometry.coordinates);
} else if (somePolygon.geometry.type === "Polygon") {
countries[somePolygon.properties.name].geometry.coordinates.push(
somePolygon.geometry.coordinates
);
}
}
let multiPolygons = Object.values(countries);
geo.features = multiPolygons.concat(nonPoly);
console.timeEnd("Polygons to MultiPolygons");
console.log();
console.log("Difference");
console.time("Difference");
for (let g = 0; g < geo.features.length; g++) {
for (let i = 0; i < geo.features.length; i++) {
try {
if (
geo.features[g] === geo.features[i] ||
geo.features[i]?.properties.type === "sand" ||
geo.features[i]?.properties.type === "water" ||
geo.features[i]?.properties.type === "grass" ||
geo.features[g]?.properties.type === "sand" ||
geo.features[g]?.properties.type === "water" ||
geo.features[g]?.properties.type === "grass"
) {
continue;
}
if (
(geo.features[g]?.geometry.type === "Polygon" ||
geo.features[g]?.geometry.type === "MultiPolygon") &&
(geo.features[i]?.geometry.type === "Polygon" ||
geo.features[i]?.geometry.type === "MultiPolygon")
) {
let p1 =
geo.features[g]?.geometry.type === "MultiPolygon"
? turf.multiPolygon(
geo.features[g].geometry.coordinates,
geo.features[g].properties
)
: turf.polygon(
geo.features[g].geometry.coordinates,
geo.features[g].properties
);
let p2 =
geo.features[i]?.geometry.type === "MultiPolygon"
? turf.multiPolygon(
geo.features[i].geometry.coordinates,
geo.features[i].properties
)
: turf.polygon(
geo.features[i].geometry.coordinates,
geo.features[i].properties
);
let diff = turf.difference(p1, p2);
geo.features[g] = diff ? diff : geo.features[g];
} else continue;
} catch (e) {
console.log("Error, skip \n", e, "\n");
}
}
}
console.timeEnd("Difference");
console.log();
console.log("Add Map Components");
console.time("Add Map Components");
let sand = JSON.parse(
fs.readFileSync(path.join(geofixConf.naturesObjects, "sand.geojson"), "utf-8")
).features;
let water = JSON.parse(
fs.readFileSync(
path.join(geofixConf.naturesObjects, "water.geojson"),
"utf-8"
)
).features;
let grass = JSON.parse(
fs.readFileSync(
path.join(geofixConf.naturesObjects, "grass.geojson"),
"utf-8"
)
).features;
let white_road = JSON.parse(
fs.readFileSync(path.join(geofixConf.roads, "white.geojson"), "utf-8")
).features;
let orange_road = JSON.parse(
fs.readFileSync(path.join(geofixConf.roads, "orange.geojson"), "utf-8")
).features;
let yellow_road = JSON.parse(
fs.readFileSync(path.join(geofixConf.roads, "yellow.geojson"), "utf-8")
).features;
let road_sizes = JSON.parse(
fs.readFileSync(path.join(geofixConf.roads, "sizes.json"), "utf-8")
);
let map_comps = [
...water.map((val) => {
val.properties.type = "water";
val.properties.fill = "#75cff0";
val.properties.stroke = "#75cff0";
val.properties["fill-opacity"] = 1;
return val;
}),
...sand.map((val) => {
val.properties.type = "sand";
val.properties.fill = "#efe9e1";
val.properties.stroke = "#efe9e1";
val.properties["fill-opacity"] = 1;
return val;
}),
...grass.map((val) => {
val.properties.type = "grass";
val.properties.fill = "#d1e6be";
val.properties.stroke = "#d1e6be";
val.properties["fill-opacity"] = 1;
return val;
}),
...white_road.map((val) => {
let total = turf.buffer(
val,
road_sizes[val.properties.type] || road_sizes["middle"]
);
total.properties.type = "white_road";
val.properties.fill = "#fff";
val.properties.stroke = "#fff";
val.properties["fill-opacity"] = 1;
return total;
}),
...yellow_road.map((val) => {
let total = turf.buffer(
val,
road_sizes[val.properties.type] || road_sizes["middle"]
);
total.properties.type = "yellow_road";
val.properties.fill = "#ffc107";
val.properties.stroke = "#ffc107";
val.properties["fill-opacity"] = 1;
return total;
}),
...orange_road.map((val) => {
let total = turf.buffer(
val,
road_sizes[val.properties.type] || road_sizes["big"]
);
total.properties.type = "orange_road";
val.properties.fill = "#fd7e14";
val.properties.stroke = "#fd7e14";
val.properties["fill-opacity"] = 1;
return total;
}),
];
props = {};
for (let feature of map_comps) {
if (props[feature.properties.type]) continue;
props[feature.properties.type] = {
stroke: feature.properties.stroke,
fill: feature.properties.fill,
type: feature.properties.type,
tags: feature.properties.tags,
"fill-opacity": feature.properties["fill-opacity"],
};
}
map_comps = turf.dissolve(turf.featureCollection(map_comps), {
propertyName: "type",
});
map_comps.features = map_comps.features.map((v) => {
v.properties = {
fill: props[v.properties.type].fill,
stroke: props[v.properties.type].stroke,
type: props[v.properties.type].type,
tags: props[v.properties.type].tags,
"fill-opacity": props[v.properties.type]["fill-opacity"],
};
return v;
});
geo.features = [...map_comps.features, ...geo.features];
console.timeEnd("Add Map Components");
console.log();
if (config?.tags) {
console.log("Filter countries by tags");
console.time("Filter countries by tags");
geo.features = geo.features.filter((val) => {
if (_.intersection(config.tags, val.properties.tags).length === 0)
return false;
// else if (config?.cities == false && val.geometry.type === "Point")
// return false;
else return true;
});
console.timeEnd("Filter countries by tag");
console.log();
}
if (config?.reProperty) {
console.log("replace Properties");
console.time("replace Properties");
geo.features = geo.features.map((val) => {
val.properties = config.reProperty;
return val;
});
console.timeEnd("replace Properties");
console.log();
}
console.log("Set new ids and area");
console.time("Set new ids and area");
let id = 0;
geo.features = geo.features.map((val) => {
val.id = id++;
if (val.geometry.type.endsWith("Polygon") && !val.properties.type) {
val.properties.area = (turf.area(val) / 1000000)
.toFixed(2)
.replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, "$1 ");
}
return val;
});
console.timeEnd("Set new ids and area");
fs.writeFileSync(geofixConf.output, JSON.stringify(geo, null, " "));
console.timeEnd("Total");

View file

@ -1,70 +0,0 @@
#!/usr/bin/env node
const yargs = require("yargs/yargs");
const { hideBin } = require("yargs/helpers");
const args = yargs(hideBin(process.argv)).argv;
const fs = require("fs");
const path = require("path");
let geojsonTemplate = fs.readFileSync(
path.join(__dirname, "file_templates", "geojson.geojson")
);
let configTemplate = fs.readFileSync(
path.join(__dirname, "file_templates", "config.yaml")
);
let propertiesTemplate = fs.readFileSync(
path.join(__dirname, "file_templates", "properties.yaml")
);
let layersTemplate = fs.readFileSync(
path.join(__dirname, "file_templates", "layers.yaml")
);
let countriesTemplate = fs.readFileSync(
path.join(__dirname, "file_templates", "countries.json")
);
let roadSizesTemplate = fs.readFileSync(
path.join(__dirname, "file_templates", "roadSizes.json")
);
let settingsTemplate = fs.readFileSync(
path.join(__dirname, "file_templates", "map_settings.json")
);
let name = args.name || "cime-project";
let currpath = path.join(process.cwd(), name, "src");
fs.mkdirSync(path.join(currpath, "countries"), { recursive: true });
fs.mkdirSync(path.join(currpath, "nature"), { recursive: true });
fs.mkdirSync(path.join(currpath, "roads"), { recursive: true });
fs.writeFileSync(path.join(currpath, "config.yaml"), configTemplate);
fs.writeFileSync(path.join(currpath, "properties.yaml"), propertiesTemplate);
fs.writeFileSync(path.join(currpath, "layers.yaml"), layersTemplate);
fs.writeFileSync(path.join(currpath, "countries.json"), countriesTemplate);
fs.writeFileSync(
path.join(currpath, "..", "map_settings.json"),
settingsTemplate
);
fs.writeFileSync(path.join(currpath, "roads", "sizes.json"), roadSizesTemplate);
let geoTemplateFiles = [
path.join("roads", "orange.geojson"),
path.join("roads", "white.geojson"),
path.join("roads", "yellow.geojson"),
path.join("nature", "grass.geojson"),
path.join("nature", "sand.geojson"),
path.join("nature", "water.geojson"),
];
for (let geoFile of geoTemplateFiles) {
fs.writeFileSync(path.join(currpath, geoFile), geojsonTemplate);
}
console.log("Done!");

View file

@ -1,11 +0,0 @@
# config is optional
# ---
# tags:
# - tags
# - for
# - polygon
# - selection
# reProperty:
# new: "Properties"
# for: "Polygons"
# cities: false

View file

@ -1,11 +0,0 @@
// example:
// [
// {
// "idc": "usa",
// "description": "strong country",
// "name": "United States of America",
// "date": "January 2, 1776",
// "img": "https://upload.wikimedia.org/wikipedia/commons/thumb/a/a9/Flag_of_the_United_States_%28DoS_ECA_Color_Standard%29.svg/125px-Flag_of_the_United_States_%28DoS_ECA_Color_Standard%29.svg.png",
// "about": "https://en.wikipedia.org/wiki/United_States"
// }
// ]

View file

@ -1,3 +0,0 @@
# ids of countries
# - usa
# - china

View file

@ -1,5 +0,0 @@
{
"name": "Map name",
"geoURL": "link to geo.geojson",
"countryInfoURL": "link to countries.json"
}

View file

@ -1,6 +0,0 @@
# ---
# usa:
# fill: "#09aa1c"
# stroke: "#09aa1c"
# tags:
# - nato

View file

@ -1,5 +0,0 @@
{
"small": 0.006,
"middle": 0.014,
"big": 0.028
}