@opengis/gis 0.2.117 → 0.2.119

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.
Files changed (30) hide show
  1. package/dist/{CardIcon-FxpK90rl.js → CardIcon-ODZgA2Pb.js} +1 -1
  2. package/dist/EntityTablePage-UMttc2-F.js +281 -0
  3. package/dist/{ExtentOutlineLayer.vue_vue_type_script_setup_true_lang-Bl5ZwNQX.js → ExtentOutlineLayer.vue_vue_type_script_setup_true_lang-DLAIOHJh.js} +1 -1
  4. package/dist/{FileEdit-C7tteUeG.js → FileEdit-GikPLv1T.js} +1 -1
  5. package/dist/{HeaderActions.vue_vue_type_script_setup_true_lang-CKEep8BL.js → HeaderActions.vue_vue_type_script_setup_true_lang-CTKkmXWD.js} +1 -1
  6. package/dist/{MapSettings-CjJ7WWkn.js → MapSettings-CbW0TfZl.js} +2 -2
  7. package/dist/{MonacoEditor.vue_vue_type_script_setup_true_lang-Bs7gz6Lt.js → MonacoEditor.vue_vue_type_script_setup_true_lang-D3ZPeXMw.js} +92 -73
  8. package/dist/RastersTablePage-CXqscX0i.js +245 -0
  9. package/dist/{cartocss-C_O8qG3h.js → cartocss-306ZE1Ha.js} +6 -6
  10. package/dist/{import-utils-BbZ1gVp-.js → import-utils-CHIDSKHz.js} +1 -1
  11. package/dist/index-CbdZv1jy.js +10123 -0
  12. package/dist/index.css +1 -1
  13. package/dist/index.js +1 -1
  14. package/dist/index.umd.cjs +41 -41
  15. package/dist/{raster-Du8ZMtjf.js → raster-Cn6l0xfZ.js} +4 -4
  16. package/dist/{register-B2gF-GzA.js → register-4wblFcw2.js} +3 -3
  17. package/dist/{service-BnPCDVwm.js → service-2uWyAfnR.js} +6 -6
  18. package/dist/{vs-datatable-QKks38xL.js → vs-datatable-D_Xzh4qf.js} +1 -1
  19. package/module/test/cls/doc_status.json +31 -31
  20. package/module/test/select/core.user_uid.sql +1 -1
  21. package/package.json +1 -1
  22. package/server/plugins/mapnik/funcs/checkRasterFile.js +19 -18
  23. package/server/routes/mapnik/controllers/clearTiles.js +15 -7
  24. package/server/routes/mapnik/controllers/createXml.js +5 -4
  25. package/server/routes/mapnik/controllers/createXmlMulti.js +3 -2
  26. package/server/routes/mapnik/controllers/rasterInfo.js +5 -4
  27. package/server/routes/mapnik/controllers/rtile.js +2 -2
  28. package/dist/EntityTablePage-ii-Wz0YZ.js +0 -286
  29. package/dist/RastersTablePage-DpKkFOyo.js +0 -359
  30. package/dist/index-4aSsUBB8.js +0 -10020
@@ -1,10 +1,10 @@
1
1
  import { defineComponent as F, resolveDirective as Ce, openBlock as o, createElementBlock as d, createElementVNode as s, Fragment as q, renderList as B, toDisplayString as c, withDirectives as ie, createTextVNode as Re, normalizeClass as W, ref as h, watch as S, computed as g, vModelText as Ee, onMounted as Se, onBeforeUnmount as Ie, unref as je, createCommentVNode as U, createVNode as M, withCtx as ze, createBlock as L, resolveDynamicComponent as Me } from "vue";
2
2
  import { useRouter as Le, useRoute as Ne } from "vue-router";
3
3
  import { TooltipDirective as Ue, notify as D } from "@opengis/core";
4
- import { _ as qe, u as Be, f as Te, M as De, i as Pe, j as le } from "./index-4aSsUBB8.js";
5
- import { F as Fe } from "./FileEdit-C7tteUeG.js";
6
- import { _ as Ve, a as Qe, b as Ge, c as Ae } from "./HeaderActions.vue_vue_type_script_setup_true_lang-CKEep8BL.js";
7
- import { _ as Oe } from "./ExtentOutlineLayer.vue_vue_type_script_setup_true_lang-Bl5ZwNQX.js";
4
+ import { _ as qe, u as Be, f as Te, M as De, i as Pe, j as le } from "./index-CbdZv1jy.js";
5
+ import { F as Fe } from "./FileEdit-GikPLv1T.js";
6
+ import { _ as Ve, a as Qe, b as Ge, c as Ae } from "./HeaderActions.vue_vue_type_script_setup_true_lang-CTKkmXWD.js";
7
+ import { _ as Oe } from "./ExtentOutlineLayer.vue_vue_type_script_setup_true_lang-DLAIOHJh.js";
8
8
  const We = { class: "flex-1 overflow-y-auto p-4 sm:p-6" }, Xe = { class: "space-y-3" }, Ye = { class: "bg-white p-3 rounded-xl border border-gray-200 shadow-sm" }, Ke = { class: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2" }, Ze = { class: "text-xs text-gray-500 mb-1" }, He = {
9
9
  key: 0,
10
10
  class: "text-base text-md font-semibold text-gray-900"
@@ -2,9 +2,9 @@ import { defineComponent as B, mergeModels as j, useModel as S, computed as h, d
2
2
  import { useRoute as Z, useRouter as ee } from "vue-router";
3
3
  import { notify as F } from "@opengis/core";
4
4
  import { _ as te } from "./TableFormHeader.vue_vue_type_script_setup_true_lang-Mci_tseM.js";
5
- import { V as N } from "./vs-datatable-QKks38xL.js";
6
- import { _ as z, n as R, m as E, r as H } from "./import-utils-BbZ1gVp-.js";
7
- import { a as ae, b as le, c as se, d as oe, e as ie } from "./index-4aSsUBB8.js";
5
+ import { V as N } from "./vs-datatable-D_Xzh4qf.js";
6
+ import { _ as z, n as R, m as E, r as H } from "./import-utils-CHIDSKHz.js";
7
+ import { a as ae, b as le, c as se, d as oe, e as ie } from "./index-CbdZv1jy.js";
8
8
  import { LucideChevronRight as re } from "lucide-vue-next";
9
9
  import { _ as ne } from "./MapSettingsTabs.vue_vue_type_script_setup_true_lang-CKCK3NqY.js";
10
10
  const ue = { class: "vs-form" }, de = { class: "vs-form__body auto-rows-max container" }, ce = { class: "flex flex-wrap" }, me = { class: "h-fit w-full mb-6 bg-white border border-gray-200 rounded-lg p-6" }, ve = { class: "h-fit w-full flex flex-wrap" }, pe = { class: "w-full" }, fe = /* @__PURE__ */ B({
@@ -1,12 +1,12 @@
1
1
  import { openBlock as C, createElementBlock as M, createElementVNode as v, defineComponent as Z, ref as S, watch as T, createTextVNode as Di, createVNode as j, createBlock as N, createCommentVNode as P, defineAsyncComponent as Ri, unref as ve, withCtx as qe, withDirectives as Be, vModelText as Ye, normalizeClass as he, Fragment as Nn, renderList as Mn, toDisplayString as te, getCurrentInstance as Dn, onBeforeUnmount as Rn, toRef as $i, computed as Se, onMounted as ji, resolveDynamicComponent as Ui } from "vue";
2
2
  import { useRoute as Bi, useRouter as Yi } from "vue-router";
3
3
  import { notify as z } from "@opengis/core";
4
- import { _ as Ne, u as $n, f as Pi, M as Hi, g as Vi, h as qi, i as Ki, j as mn, k as zi, l as Gi, m as Qi, s as hn } from "./index-4aSsUBB8.js";
5
- import { _ as Wi, a as Ji, b as Zi, c as Xi } from "./HeaderActions.vue_vue_type_script_setup_true_lang-CKEep8BL.js";
6
- import { S as el, C as nl } from "./CardIcon-FxpK90rl.js";
7
- import { _ as jn } from "./MonacoEditor.vue_vue_type_script_setup_true_lang-Bs7gz6Lt.js";
8
- import { V as Me } from "./vs-datatable-QKks38xL.js";
9
- import { _ as Je, m as Ze, r as xe } from "./import-utils-BbZ1gVp-.js";
4
+ import { _ as Ne, u as $n, f as Pi, M as Hi, g as Vi, h as qi, i as Ki, j as mn, k as zi, l as Gi, m as Qi, s as hn } from "./index-CbdZv1jy.js";
5
+ import { _ as Wi, a as Ji, b as Zi, c as Xi } from "./HeaderActions.vue_vue_type_script_setup_true_lang-CTKkmXWD.js";
6
+ import { S as el, C as nl } from "./CardIcon-ODZgA2Pb.js";
7
+ import { _ as jn } from "./MonacoEditor.vue_vue_type_script_setup_true_lang-D3ZPeXMw.js";
8
+ import { V as Me } from "./vs-datatable-D_Xzh4qf.js";
9
+ import { _ as Je, m as Ze, r as xe } from "./import-utils-CHIDSKHz.js";
10
10
  /*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */
11
11
  function Un(e) {
12
12
  return typeof e > "u" || e === null;
@@ -1,7 +1,7 @@
1
1
  import { defineComponent as F, mergeModels as O, defineAsyncComponent as I, useModel as R, ref as y, watch as K, openBlock as o, createElementBlock as s, createElementVNode as e, createVNode as $, unref as x, withCtx as S, createStaticVNode as V, useSlots as P, computed as H, Fragment as b, createTextVNode as U, createCommentVNode as N, renderList as A, normalizeStyle as Q, toDisplayString as M, normalizeClass as z, withModifiers as X, createBlock as Y, resolveDynamicComponent as ee, withDirectives as te, renderSlot as ne } from "vue";
2
2
  import { notify as E } from "@opengis/core";
3
3
  import { Edit as le, Trash as oe } from "lucide-vue-next";
4
- import { _ as u } from "./index-4aSsUBB8.js";
4
+ import { _ as u } from "./index-CbdZv1jy.js";
5
5
  const se = { class: "flex items-center justify-center col-span-3 gap-2" }, re = { class: "flex justify-end p-[20px] gap-[10px] border-t w-full" }, ie = /* @__PURE__ */ F({
6
6
  __name: "vs-datatable-controls",
7
7
  props: /* @__PURE__ */ O({
@@ -1,32 +1,32 @@
1
- [
2
- {
3
- "id": "1",
4
- "text": "Діючий",
5
- "color": "#1ab394"
6
- },
7
- {
8
- "id": "2",
9
- "text": "Зупинений",
10
- "color": "#ed82c8"
11
- },
12
- {
13
- "id": "3",
14
- "text": "Скасований",
15
- "color": "#4a4a4a"
16
- },
17
- {
18
- "id": "5",
19
- "text": "Проектний",
20
- "color": "#6495ed"
21
- },
22
- {
23
- "id": "7",
24
- "text": "Очікує розгляду",
25
- "color": "#92b8ef"
26
- },
27
- {
28
- "id": "10",
29
- "text": "Архівний",
30
- "color": "#d48428"
31
- }
1
+ [
2
+ {
3
+ "id": "1",
4
+ "text": "Діючий",
5
+ "color": "#1ab394"
6
+ },
7
+ {
8
+ "id": "2",
9
+ "text": "Зупинений",
10
+ "color": "#ed82c8"
11
+ },
12
+ {
13
+ "id": "3",
14
+ "text": "Скасований",
15
+ "color": "#4a4a4a"
16
+ },
17
+ {
18
+ "id": "5",
19
+ "text": "Проектний",
20
+ "color": "#6495ed"
21
+ },
22
+ {
23
+ "id": "7",
24
+ "text": "Очікує розгляду",
25
+ "color": "#92b8ef"
26
+ },
27
+ {
28
+ "id": "10",
29
+ "text": "Архівний",
30
+ "color": "#d48428"
31
+ }
32
32
  ]
@@ -1 +1 @@
1
- select uid, coalesce(coalesce(sur_name,'')||coalesce(' '||user_name,'') ||coalesce(' '||father_name,''),login) as text from admin.users
1
+ select uid, coalesce(coalesce(sur_name,'')||coalesce(' '||user_name,'') ||coalesce(' '||father_name,''),login) as text from admin.users
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengis/gis",
3
- "version": "0.2.117",
3
+ "version": "0.2.119",
4
4
  "type": "module",
5
5
  "author": "Softpro",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  import path from 'node:path';
2
2
 
3
- import { eventStream } from '@opengis/fastify-table/utils.js';
3
+ import { config, eventStream } from '@opengis/fastify-table/utils.js';
4
4
 
5
5
  import mapnik from "./mapnik.js";
6
6
 
@@ -11,8 +11,8 @@ const {
11
11
  function sequence(arr, fn) {
12
12
  const obj = {};
13
13
  return arr.reduce(
14
- (promise, relpath, idx) => promise.then(() => fn({
15
- relpath, idx,
14
+ (promise, item, idx) => promise.then(() => fn({
15
+ ...item, idx,
16
16
  })).then(r => Object.assign(obj, r)),
17
17
  Promise.resolve(),
18
18
  ).then(() => obj);
@@ -20,7 +20,7 @@ function sequence(arr, fn) {
20
20
 
21
21
  const unsafe = true;
22
22
 
23
- export default async function checkRasterFile({ arr, reply, nocache }) {
23
+ export default async function checkRasterFile({ rows, reply, nocache }) {
24
24
  const callback = reply ? eventStream(reply) : () => { };
25
25
 
26
26
  let
@@ -31,22 +31,23 @@ export default async function checkRasterFile({ arr, reply, nocache }) {
31
31
  renderErrorCount = 0,
32
32
  rasterInfoErrorCount = 0;
33
33
 
34
- const result = await sequence((arr || []), async ({
35
- relpath, idx,
34
+ const result = await sequence((rows || []), async ({
35
+ relpath, srid, idx,
36
36
  }) => {
37
- callback(`${idx + 1}/${arr.length} (${relpath})`);
37
+ callback(`${idx + 1}/${rows.length} (${relpath})`);
38
+ const relpath1 = [config.mapnik?.folder, 'raster', relpath].filter(Boolean).join('/');
38
39
 
39
40
  // check raster upload status, skip for directories
40
- const uploadStatus = !path.extname(relpath) ? {} : await GetRasterStatus({ path: relpath });
41
+ const uploadStatus = !path.extname(relpath) ? {} : await GetRasterStatus({ path: relpath1 });
41
42
 
42
43
  if (uploadStatus.exists === false) {
43
44
  fileNotFoundCount += 1;
44
- callback(`file not found: ${relpath} `);
45
+ callback(`file not found: ${relpath1} `);
45
46
  return null;
46
47
  }
47
48
 
48
49
  // create at xml/:id with name only, always - by path
49
- const resp = await CreateXML({ path: relpath, nocache }, (msg) => {
50
+ const resp = await CreateXML({ path: relpath1, srid, nocache }, (msg) => {
50
51
  if (typeof msg === 'string' && msg === 'XML creation complete') {
51
52
  createdCount += 1;
52
53
  }
@@ -58,18 +59,18 @@ export default async function checkRasterFile({ arr, reply, nocache }) {
58
59
 
59
60
  if (resp.error?.message && resp.error.message.startsWith('5 NOT_FOUND')) {
60
61
  fileNotFoundCount += 1;
61
- callback(`directory not found: ${relpath} `);
62
+ callback(`directory not found: ${relpath1} `);
62
63
  return null;
63
64
  }
64
65
 
65
66
  if (resp.error) {
66
67
  xmlErrorCount += 1;
67
- callback(`create xml error: ${resp.error.toString()} (${relpath})`);
68
+ callback(`create xml error: ${resp.error.toString()} (${relpath1})`);
68
69
  return null;
69
70
  }
70
71
 
71
72
  const data = await RenderTile({
72
- path: relpath,
73
+ path: relpath1,
73
74
  width: 256,
74
75
  bbox: [3713463.7081504324, 6088362.176970857, 3713616.5822070027, 6088515.051027427], // /:id/18/155363/91245.png
75
76
  ttl: '0',
@@ -77,23 +78,23 @@ export default async function checkRasterFile({ arr, reply, nocache }) {
77
78
 
78
79
  if (data.err) {
79
80
  renderErrorCount += 1;
80
- callback(`render error: ${data.err} (${relpath})`);
81
+ callback(`render error: ${data.err} (${relpath1})`);
81
82
  return null;
82
83
  }
83
- callback(`render ok: ${relpath} `);
84
+ callback(`render ok: ${relpath1} `);
84
85
 
85
86
  const { data: rasterInfo, err } = await GetRasterInfo({
86
- path: relpath,
87
+ path: relpath1,
87
88
  ttl: '0',
88
89
  }).catch(e => ({ err: e }));
89
90
 
90
91
  if (err) {
91
92
  rasterInfoErrorCount += 1;
92
- callback(`raster info error: ${err} (${relpath})`);
93
+ callback(`raster info error: ${err} (${relpath1})`);
93
94
  return null;
94
95
  }
95
96
 
96
- return { [relpath]: rasterInfo };
97
+ return { [relpath1]: rasterInfo };
97
98
  });
98
99
 
99
100
  callback(`${existsCount} - xml exists`);
@@ -52,7 +52,17 @@ export default async function clearTiles({
52
52
  return reply.status(404).send({ error: 'raster / cartocss not found', code: 404 });
53
53
  }
54
54
 
55
- const relpath = [config.mapnik?.folder, carto.cartocss_id ? 'vector' : 'raster', raster.source_path || (carto.cartocss_id && carto.source_path ? carto.source_path : params.id)].filter(Boolean).join('/');
55
+ const getParams = () => {
56
+ if (carto.cartocss_id && carto.source_path) {
57
+ return { name: [config.mapnik?.folder, 'vector', carto.source_path].filter(Boolean).join('/') };
58
+ }
59
+ if (carto.cartocss_id) {
60
+ return { name: [config.mapnik?.folder, 'xml', carto.cartocss_id].filter(Boolean).join('/') };
61
+ }
62
+ return { path: [config.mapnik?.folder, 'raster', raster.source_path].filter(Boolean).join('/') };
63
+ };
64
+
65
+ const { path: relpath, name } = getParams();
56
66
 
57
67
  if (query.debug) {
58
68
  const md5 = raster.source_path
@@ -71,13 +81,11 @@ export default async function clearTiles({
71
81
  };
72
82
  }
73
83
 
74
- const opt = {
75
- path: carto.cartocss_id ? null : relpath, // for rasters only
76
- name: carto.cartocss_id ? `/data/map/${relpath}` : null, // required for cartocss
77
- };
78
-
79
84
  try {
80
- const data = await ClearTile(opt);
85
+ const data = await ClearTile({
86
+ path: relpath, // for rasters only
87
+ name, // for cartocss
88
+ });
81
89
 
82
90
  // if empty directory not found (no tiles rendered yet)
83
91
  if (data.result === 'skip') {
@@ -1,6 +1,6 @@
1
1
  import path from 'node:path';
2
2
 
3
- import { pgClients, eventStream } from '@opengis/fastify-table/utils.js';
3
+ import { config, pgClients, eventStream } from '@opengis/fastify-table/utils.js';
4
4
 
5
5
  import mapnik from '../../../plugins/mapnik/funcs/mapnik.js';
6
6
 
@@ -32,10 +32,11 @@ export default async function createXml({
32
32
  return reply.status(400).send({ error: 'raster source_path not set', code: 400 });
33
33
  }
34
34
 
35
- const relpath = `/map/raster/${data.source_path}`;
35
+ // const relpath = `/map/raster/${data.source_path}`;
36
+ const relpath = [config.mapnik?.folder, 'raster', data.source_path].filter(Boolean).join('/');
36
37
 
37
38
  // check raster upload status, skip for directories
38
- const uploadStatus = path.extname(relpath) ? await GetRasterStatus({ path: data.source_path }) : {};
39
+ const uploadStatus = path.extname(data.source_path) ? await GetRasterStatus({ path: relpath }) : {};
39
40
 
40
41
  if (uploadStatus.exists === false) {
41
42
  return reply.status(400).send({ error: 'raster not uploaded', code: 400 });
@@ -51,7 +52,7 @@ export default async function createXml({
51
52
 
52
53
  // create at xml/:id with name only, always - by path
53
54
  const resp = await CreateXML({
54
- path: data.source_path,
55
+ path: relpath,
55
56
  name: id, // create additional xml named as primary key at xml directory
56
57
  previewZoom: data.raster_zoom, // preview<=>detailed, default = 16 if file size > 1GB
57
58
  // srid: data.srid, // auto detected if not supplied
@@ -42,18 +42,19 @@ export default async function createXmlMulti({
42
42
  id: 'raster_id',
43
43
  relpath: 'source_path',
44
44
  table: 'gis.rasters',
45
+ srid: 'srid',
45
46
  query: `source_path is not null ${params.id ? ` and raster_id = '${params.id}'` : ''}`,
46
47
  }];
47
48
 
48
49
  applyHookSync('beforeCreateXmlMulti', { list, id: params.id });
49
50
 
50
- const rows = await Promise.all(list.filter(el => el.id && el.table && el.relpath).map(async el => pg.query(el.q ? `select ${el.id} as id, ${el.relpath} as relpath, '${el.table}' as table from (${el.q})q` : `select ${el.id} as id, ${el.relpath} as relpath, '${el.table}' as table from ${el.table} where ${el.query || 'true'}`).then(e => e.rows || []))).then(e => e.flat());
51
+ const rows = await Promise.all(list.filter(el => el.id && el.table && el.relpath).map(async el => pg.query(el.q ? `select ${el.id} as id, ${el.relpath} as relpath, '${el.table}' as table from (${el.q})q` : `select ${el.id} as id, ${el.relpath} as relpath, '${el.table}' as table, ${el.srid || ''} as srid from ${el.table} where ${el.query || 'true'}`).then(e => e.rows || []))).then(e => e.flat());
51
52
 
52
53
  if (!rows.length) {
53
54
  return reply.status(404).send({ error: 'empty rows', code: 404 });
54
55
  }
55
56
 
56
- const results = await checkRasterFile({ arr: rows.map(row => row.relpath), reply, nocache: query.nocache });
57
+ const results = await checkRasterFile({ rows, reply, nocache: query.nocache });
57
58
 
58
59
  const q = Object.keys(results || {}).filter(key => results[key] && results[key].extent).map(key => {
59
60
  const { extent } = results[key];
@@ -31,13 +31,13 @@ export default async function rasterInfo({
31
31
 
32
32
  const proj4 = raster.proj4 || (raster.srid && pg.pk?.['public.spatial_ref_sys'] ? await pg.query('select proj4text from public.spatial_ref_sys where srid=$1', [raster.srid]).then(el => el.rows?.[0]?.proj4text) : undefined);
33
33
 
34
- const relpath = ['raster', config.mapnik?.folder, 'raster', raster.source_path].filter(Boolean).join('/');
34
+ const relpath = [config.mapnik?.folder, 'raster', raster.source_path].filter(Boolean).join('/');
35
35
 
36
- const { data, cache } = await GetRasterInfo({
36
+ const { data, cache, error } = await GetRasterInfo({
37
37
  path: relpath,
38
38
  proj4,
39
39
  ttl: query.nocache ? '0' : '1h',
40
- });
40
+ }).catch(err => ({ error: err.toString() }));
41
41
 
42
42
  if (query.debug) {
43
43
  return { data, cache, raster };
@@ -45,8 +45,9 @@ export default async function rasterInfo({
45
45
 
46
46
  return {
47
47
  time: Date.now() - time,
48
- ...data,
48
+ ...data || {},
49
49
  ...raster,
50
+ error,
50
51
  cache,
51
52
  url: `${prefix}/gis-rtile/${Buffer.from(raster.source_path).toString('base64url')}/{z}/{x}/{y}.png`,
52
53
  };
@@ -95,10 +95,10 @@ export default async function gisRtile({
95
95
 
96
96
  const getParams = () => {
97
97
  if (data.type === 'css' && data.source_path) {
98
- return { name: path.posix.join('/data/map', config.mapnik?.folder || '', 'vector', data.source_path, 'map') };
98
+ return { name: path.posix.join(config.mapnik?.folder || '', 'vector', data.source_path) };
99
99
  }
100
100
  if (data.type === 'css') {
101
- return { name: path.posix.join('/data/map', config.mapnik?.folder || '', 'xml', id) };
101
+ return { name: path.posix.join(config.mapnik?.folder || '', 'xml', id) };
102
102
  }
103
103
  return { path: path.posix.join(config.mapnik?.folder || '', 'raster', data.source_path) };
104
104
  };