datapos-connector-file-store-emulator 0.2.390 → 0.2.392

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.
@@ -1,37 +1,37 @@
1
- const M = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
2
- let z = (e = 21) => {
1
+ const z = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
2
+ let j = (e = 21) => {
3
3
  let t = "", i = crypto.getRandomValues(new Uint8Array(e |= 0));
4
4
  for (; e--; )
5
- t += M[i[e] & 63];
5
+ t += z[i[e] & 63];
6
6
  return t;
7
7
  };
8
8
  class b extends Error {
9
9
  locator;
10
10
  /** Logical source of the error. */
11
- constructor(t, i, d) {
12
- super(t, d), this.name = new.target.name, this.locator = i;
11
+ constructor(t, i, s) {
12
+ super(t, s), this.name = new.target.name, this.locator = i;
13
13
  }
14
14
  }
15
- let j = class extends b {
15
+ let v = class extends b {
16
16
  };
17
- class v extends j {
17
+ class u extends v {
18
18
  body;
19
19
  /** Sanitized HTTP response body. */
20
- constructor(t, i, d, s) {
21
- super(t, i, s), this.name = new.target.name, this.body = h(d ?? void 0);
20
+ constructor(t, i, s, d) {
21
+ super(t, i, d), this.name = new.target.name, this.body = g(s ?? void 0);
22
22
  }
23
23
  }
24
- class u extends b {
24
+ class C extends b {
25
25
  }
26
- async function C(e, t, i) {
27
- const d = ` - ${e.statusText}`, s = `${t} Response status '${e.status}${e.statusText ? d : ""}' received.`;
26
+ async function h(e, t, i) {
27
+ const s = ` - ${e.statusText}`, d = `${t} Response status '${e.status}${e.statusText ? s : ""}' received.`;
28
28
  let o;
29
29
  try {
30
30
  o = await e.text();
31
31
  } catch (a) {
32
32
  o = `<body unavailable: ${l(a).message}>`;
33
33
  }
34
- return new v(s, i, o);
34
+ return new u(d, i, o);
35
35
  }
36
36
  function l(e) {
37
37
  if (e instanceof Error) return e;
@@ -46,23 +46,23 @@ function l(e) {
46
46
  }
47
47
  return new Error("Unknown error");
48
48
  }
49
- function h(e) {
49
+ function g(e) {
50
50
  if (!(e == null || e === ""))
51
51
  return e.length > 2048 ? `${e.slice(0, 2048)}... [truncated]` : e;
52
52
  }
53
- function g(e) {
53
+ function w(e) {
54
54
  if (e) {
55
55
  const t = e.lastIndexOf("/"), i = e.lastIndexOf(".", t === -1 ? e.length : t);
56
56
  return i === -1 ? e : e.slice(0, Math.max(0, i));
57
57
  }
58
58
  }
59
- function w(e) {
59
+ function P(e) {
60
60
  if (e) {
61
61
  const t = e.lastIndexOf(".");
62
62
  if (t !== -1) return e.slice(Math.max(0, t + 1));
63
63
  }
64
64
  }
65
- function P(e) {
65
+ function E(e) {
66
66
  switch (e) {
67
67
  case "csv":
68
68
  return "text/csv";
@@ -77,31 +77,31 @@ function P(e) {
77
77
  return "application/octet-stream";
78
78
  }
79
79
  }
80
- async function p(e, t) {
81
- const i = `datapos-tool-${t}`, d = e.find((o) => o.id === i);
82
- if (!d) throw new Error(`Connector could not load unknown tool '${t}'.`);
83
- const s = await import(`https://engine-eu.datapos.app/tools/${t}_v${d.version}/${i}.es.js`);
84
- return new s.Tool();
85
- }
86
- const E = "datapos-connector-file-store-emulator", R = { en: "File Store Emulator" }, S = { "en-gb": "Imitates a cloud-based file storage solution. It hosts a read-only set of files for demonstration, evaluation and testing purposes and is freely available to all users." }, T = null, k = "fileStore", _ = { default: { authMethodId: "none", maxConnectionCount: 1 } }, x = '<svg fill="#000000" height="100%" viewBox="0 0 576 512"><path d="M320 32H64C46.33 32 32 46.33 32 64V448C32 465.7 46.33 480 64 480H296.2C305.1 491.8 317.3 502.3 329.7 511.3C326.6 511.7 323.3 512 320 512H64C28.65 512 0 483.3 0 448V64C0 28.65 28.65 0 64 0H320C355.3 0 384 28.65 384 64V198.6C372.8 201.8 362.1 206 352 211.2V64C352 46.33 337.7 32 320 32V32zM64 144C64 135.2 71.16 128 80 128H304C312.8 128 320 135.2 320 144C320 152.8 312.8 160 304 160H80C71.16 160 64 152.8 64 144zM272 224C280.8 224 288 231.2 288 240C288 248.8 280.8 256 272 256H80C71.16 256 64 248.8 64 240C64 231.2 71.16 224 80 224H272zM208 320C216.8 320 224 327.2 224 336C224 344.8 216.8 352 208 352H80C71.16 352 64 344.8 64 336C64 327.2 71.16 320 80 320H208zM476.7 324.7C482.9 318.4 493.1 318.4 499.3 324.7C505.6 330.9 505.6 341.1 499.3 347.3L427.3 419.3C421.1 425.6 410.9 425.6 404.7 419.3L364.7 379.3C358.4 373.1 358.4 362.9 364.7 356.7C370.9 350.4 381.1 350.4 387.3 356.7L416 385.4L476.7 324.7zM288 368C288 288.5 352.5 224 432 224C511.5 224 576 288.5 576 368C576 447.5 511.5 512 432 512C352.5 512 288 447.5 288 368zM432 480C493.9 480 544 429.9 544 368C544 306.1 493.9 256 432 256C370.1 256 320 306.1 320 368C320 429.9 370.1 480 432 480z"/></svg>', F = '<svg fill="#ffffff" height="100%" viewBox="0 0 576 512"><path d="M320 32H64C46.33 32 32 46.33 32 64V448C32 465.7 46.33 480 64 480H296.2C305.1 491.8 317.3 502.3 329.7 511.3C326.6 511.7 323.3 512 320 512H64C28.65 512 0 483.3 0 448V64C0 28.65 28.65 0 64 0H320C355.3 0 384 28.65 384 64V198.6C372.8 201.8 362.1 206 352 211.2V64C352 46.33 337.7 32 320 32V32zM64 144C64 135.2 71.16 128 80 128H304C312.8 128 320 135.2 320 144C320 152.8 312.8 160 304 160H80C71.16 160 64 152.8 64 144zM272 224C280.8 224 288 231.2 288 240C288 248.8 280.8 256 272 256H80C71.16 256 64 248.8 64 240C64 231.2 71.16 224 80 224H272zM208 320C216.8 320 224 327.2 224 336C224 344.8 216.8 352 208 352H80C71.16 352 64 344.8 64 336C64 327.2 71.16 320 80 320H208zM476.7 324.7C482.9 318.4 493.1 318.4 499.3 324.7C505.6 330.9 505.6 341.1 499.3 347.3L427.3 419.3C421.1 425.6 410.9 425.6 404.7 419.3L364.7 379.3C358.4 373.1 358.4 362.9 364.7 356.7C370.9 350.4 381.1 350.4 387.3 356.7L416 385.4L476.7 324.7zM288 368C288 288.5 352.5 224 432 224C511.5 224 576 288.5 576 368C576 447.5 511.5 512 432 512C352.5 512 288 447.5 288 368zM432 480C493.9 480 544 429.9 544 368C544 306.1 493.9 256 432 256C370.1 256 320 306.1 320 368C320 429.9 370.1 480 432 480z"/></svg>', O = null, N = ["abortOperation", "findObjectFolderPath", "getReadableStream", "listNodes", "previewObject", "retrieveRecords"], U = null, L = "beta", V = "connector", D = "source", G = null, B = null, q = null, H = "0.2.390", Z = {
87
- id: E,
88
- label: R,
89
- description: S,
90
- category: T,
91
- categoryId: k,
92
- implementations: _,
93
- icon: x,
94
- iconDark: F,
95
- lastUpdatedAt: O,
96
- operations: N,
97
- status: U,
98
- statusId: L,
80
+ async function r(e, t) {
81
+ const i = `datapos-tool-${t}`, s = e.find((o) => o.id === i);
82
+ if (!s) throw new Error(`Connector could not load unknown tool '${t}'.`);
83
+ const d = await import(`https://engine-eu.datapos.app/tools/${t}_v${s.version}/${i}.es.js`);
84
+ return new d.Tool();
85
+ }
86
+ const R = "datapos-connector-file-store-emulator", S = { en: "File Store Emulator" }, T = { "en-gb": "Imitates a cloud-based file storage solution. It hosts a read-only set of files for demonstration, evaluation and testing purposes and is freely available to all users." }, x = null, _ = "fileStore", k = { default: { authMethodId: "none", maxConnectionCount: 1 } }, F = '<svg fill="#000000" height="100%" viewBox="0 0 576 512"><path d="M320 32H64C46.33 32 32 46.33 32 64V448C32 465.7 46.33 480 64 480H296.2C305.1 491.8 317.3 502.3 329.7 511.3C326.6 511.7 323.3 512 320 512H64C28.65 512 0 483.3 0 448V64C0 28.65 28.65 0 64 0H320C355.3 0 384 28.65 384 64V198.6C372.8 201.8 362.1 206 352 211.2V64C352 46.33 337.7 32 320 32V32zM64 144C64 135.2 71.16 128 80 128H304C312.8 128 320 135.2 320 144C320 152.8 312.8 160 304 160H80C71.16 160 64 152.8 64 144zM272 224C280.8 224 288 231.2 288 240C288 248.8 280.8 256 272 256H80C71.16 256 64 248.8 64 240C64 231.2 71.16 224 80 224H272zM208 320C216.8 320 224 327.2 224 336C224 344.8 216.8 352 208 352H80C71.16 352 64 344.8 64 336C64 327.2 71.16 320 80 320H208zM476.7 324.7C482.9 318.4 493.1 318.4 499.3 324.7C505.6 330.9 505.6 341.1 499.3 347.3L427.3 419.3C421.1 425.6 410.9 425.6 404.7 419.3L364.7 379.3C358.4 373.1 358.4 362.9 364.7 356.7C370.9 350.4 381.1 350.4 387.3 356.7L416 385.4L476.7 324.7zM288 368C288 288.5 352.5 224 432 224C511.5 224 576 288.5 576 368C576 447.5 511.5 512 432 512C352.5 512 288 447.5 288 368zM432 480C493.9 480 544 429.9 544 368C544 306.1 493.9 256 432 256C370.1 256 320 306.1 320 368C320 429.9 370.1 480 432 480z"/></svg>', O = '<svg fill="#ffffff" height="100%" viewBox="0 0 576 512"><path d="M320 32H64C46.33 32 32 46.33 32 64V448C32 465.7 46.33 480 64 480H296.2C305.1 491.8 317.3 502.3 329.7 511.3C326.6 511.7 323.3 512 320 512H64C28.65 512 0 483.3 0 448V64C0 28.65 28.65 0 64 0H320C355.3 0 384 28.65 384 64V198.6C372.8 201.8 362.1 206 352 211.2V64C352 46.33 337.7 32 320 32V32zM64 144C64 135.2 71.16 128 80 128H304C312.8 128 320 135.2 320 144C320 152.8 312.8 160 304 160H80C71.16 160 64 152.8 64 144zM272 224C280.8 224 288 231.2 288 240C288 248.8 280.8 256 272 256H80C71.16 256 64 248.8 64 240C64 231.2 71.16 224 80 224H272zM208 320C216.8 320 224 327.2 224 336C224 344.8 216.8 352 208 352H80C71.16 352 64 344.8 64 336C64 327.2 71.16 320 80 320H208zM476.7 324.7C482.9 318.4 493.1 318.4 499.3 324.7C505.6 330.9 505.6 341.1 499.3 347.3L427.3 419.3C421.1 425.6 410.9 425.6 404.7 419.3L364.7 379.3C358.4 373.1 358.4 362.9 364.7 356.7C370.9 350.4 381.1 350.4 387.3 356.7L416 385.4L476.7 324.7zM288 368C288 288.5 352.5 224 432 224C511.5 224 576 288.5 576 368C576 447.5 511.5 512 432 512C352.5 512 288 447.5 288 368zM432 480C493.9 480 544 429.9 544 368C544 306.1 493.9 256 432 256C370.1 256 320 306.1 320 368C320 429.9 370.1 480 432 480z"/></svg>', N = null, U = ["abortOperation", "findObjectFolderPath", "getReadableStream", "listNodes", "previewObject", "retrieveRecords"], L = null, D = "beta", V = "connector", G = "source", B = null, q = null, H = null, Z = "0.2.392", K = {
87
+ id: R,
88
+ label: S,
89
+ description: T,
90
+ category: x,
91
+ categoryId: _,
92
+ implementations: k,
93
+ icon: F,
94
+ iconDark: O,
95
+ lastUpdatedAt: N,
96
+ operations: U,
97
+ status: L,
98
+ statusId: D,
99
99
  typeId: V,
100
- usageId: D,
101
- vendorAccountURL: G,
102
- vendorDocumentationURL: B,
103
- vendorHomeURL: q,
104
- version: H
100
+ usageId: G,
101
+ vendorAccountURL: B,
102
+ vendorDocumentationURL: q,
103
+ vendorHomeURL: H,
104
+ version: Z
105
105
  }, f = {
106
106
  "": [{ id: "cpB45vx36UWghglh18MUS", lastModifiedAt: 17435076862165598e-4, name: "ENGAGEMENT_START_EVENTS_202405121858.csv", size: 122800, typeId: "object" }, { id: "GUIHoZJcLIFZ6B7A1bu0r", lastModifiedAt: 1743507686221789e-3, name: "PEOPLE_BIRTH_EVENTS_202405121857.csv", size: 114287, typeId: "object" }, { childCount: 3, name: "AUDATACY Interchange Format", typeId: "folder" }, { childCount: 12, name: "Formula 1", typeId: "folder" }, { childCount: 7, name: "Salesforce API", typeId: "folder" }, { childCount: 156, name: "Salesforce Extract", typeId: "folder" }, { childCount: 20, name: "SAP Employee Central Extract", typeId: "folder" }, { childCount: 7, name: "SAP SuccessFactors API", typeId: "folder" }, { childCount: 12, name: "Test Files", typeId: "folder" }],
107
107
  "/AUDATACY Interchange Format": [{ childCount: 11, name: "Coded Data", typeId: "folder" }, { childCount: 1, name: "Human Resources", typeId: "folder" }, { childCount: 1, name: "Party", typeId: "folder" }],
@@ -122,13 +122,13 @@ const E = "datapos-connector-file-store-emulator", R = { en: "File Store Emulato
122
122
  "/Test Files/Encoding Test Files/encodings": [{ id: "irBUQdMBx4ZhLXyti4t0W", lastModifiedAt: 1743507686243765e-3, name: "big5", size: 614, typeId: "object" }, { id: "BPyMwzoNSnGdUV_dzYEWz", lastModifiedAt: 17435076862438152e-4, name: "euc_jp", size: 3919, typeId: "object" }, { id: "FXjFtwUcRxKmH_ZCAaNz6", lastModifiedAt: 1743507686243867e-3, name: "euc_kr", size: 2480, typeId: "object" }, { id: "5fBDsObvTXORIIgptb-sl", lastModifiedAt: 17435076862439092e-4, name: "gb18030", size: 1665, typeId: "object" }, { id: "7Jt6_ku8bzWNBFjRaagdR", lastModifiedAt: 17435076862439512e-4, name: "iso2022cn", size: 1749, typeId: "object" }, { id: "WLvdjjUGMGnEv3FmDQJ9p", lastModifiedAt: 1743507686243999e-3, name: "iso2022jp", size: 2924, typeId: "object" }, { id: "6CsULI8SIvo4zwFjKAA1_", lastModifiedAt: 17435076862440513e-4, name: "iso2022kr", size: 3172, typeId: "object" }, { id: "SqbmllHEuS76me2jsWjLI", lastModifiedAt: 17435076862440952e-4, name: "iso88591_en", size: 2955, typeId: "object" }, { id: "5oCOldZaxX2XoavVBBgdc", lastModifiedAt: 1743507686244138e-3, name: "iso88592_cs", size: 1600, typeId: "object" }, { id: "UATsUFbSUtqVhVhMJ2sec", lastModifiedAt: 1743507686244182e-3, name: "iso88595_ru", size: 1024, typeId: "object" }, { id: "wC1_pjcjj0NZZWTxqiGaw", lastModifiedAt: 17435076862442336e-4, name: "iso88596_ar", size: 2241, typeId: "object" }, { id: "Pe8RK8l_zBAjLODUX34IB", lastModifiedAt: 1743507686244275e-3, name: "iso88597_el", size: 1033, typeId: "object" }, { id: "Ga6Z1yRgs99Vpa5QrR70_", lastModifiedAt: 17435076862445083e-4, name: "iso88598", size: 2352, typeId: "object" }, { id: "XmtdLSxT84HsoF7OIqye4", lastModifiedAt: 1743507686244566e-3, name: "iso88598_he", size: 2353, typeId: "object" }, { id: "3HCk8XXlua9KEOtc5iseJ", lastModifiedAt: 1743507686244627e-3, name: "iso88599_tr", size: 2424, typeId: "object" }, { id: "zjfA3EHpzaPHAvTkBICWG", lastModifiedAt: 17435076862446736e-4, name: "koi8r", size: 1024, typeId: "object" }, { id: "IRnhQiGe4mxsoQpaJCdRM", lastModifiedAt: 17435076862447236e-4, name: "lang_arabic", size: 4059, typeId: "object" }, { id: "ih-RgplBSErEYOcna-NlI", lastModifiedAt: 17435076862447717e-4, name: "lang_chinese", size: 916, typeId: "object" }, { id: "9EYQqNjgOksavPn--KH46", lastModifiedAt: 17435076862448289e-4, name: "lang_czech", size: 1795, typeId: "object" }, { id: "Xaeq_CiSthaccRyGw22Bx", lastModifiedAt: 17435076862448726e-4, name: "lang_greek", size: 1895, typeId: "object" }, { id: "421DaSaIy8ywB26Rc2GV1", lastModifiedAt: 1743507686244933e-3, name: "lang_hebrew", size: 4124, typeId: "object" }, { id: "N01Ggo186R8phM3c0zLa2", lastModifiedAt: 17435076862449873e-4, name: "lang_japanese", size: 3978, typeId: "object" }, { id: "T8jzTqgGlU30YQd1QvMm3", lastModifiedAt: 17435076862450503e-4, name: "lang_korean", size: 3466, typeId: "object" }, { id: "R-Fkzl2BW0o9Hios70WwI", lastModifiedAt: 17435076862450947e-4, name: "lang_russian", size: 1873, typeId: "object" }, { id: "KiKbYoPDMht0f9ElSfTYZ", lastModifiedAt: 1743507686245141e-3, name: "lang_turkish", size: 2678, typeId: "object" }, { id: "a_RPqwZdZ5DmZOCDUVeiZ", lastModifiedAt: 17435076862451846e-4, name: "shiftjis", size: 2816, typeId: "object" }, { id: "rXd90uYo_IZSqu9U_3Sr6", lastModifiedAt: 1743507686245242e-3, name: "utf16be", size: 1334, typeId: "object" }, { id: "83XbTcV0_WKdvcPEKeuDy", lastModifiedAt: 17435076862452773e-4, name: "utf16le", size: 1334, typeId: "object" }, { id: "Upq9-WDaQTs--Ogg1Qtev", lastModifiedAt: 17435076862453193e-4, name: "utf32be", size: 2664, typeId: "object" }, { id: "mm0RGQoiYeYc7ORPPI2S8", lastModifiedAt: 17435076862453613e-4, name: "utf32le", size: 2664, typeId: "object" }, { id: "J9FIyiit-zK4HquqAwGNE", lastModifiedAt: 17435076862454148e-4, name: "utf8", size: 1125, typeId: "object" }, { id: "pZQOaI1tOrcy2Km0Z7Enb", lastModifiedAt: 17435076862454595e-4, name: "windows_1250", size: 1617, typeId: "object" }, { id: "da-PPmwaWqLyqUz6SRw1v", lastModifiedAt: 1743507686245507e-3, name: "windows_1251", size: 1024, typeId: "object" }, { id: "aw_8vVm1CvdxaiiI3CX-L", lastModifiedAt: 17435076862456494e-4, name: "windows_1252", size: 2976, typeId: "object" }, { id: "-JYzWLdhtRIWC0vwZFj0I", lastModifiedAt: 17435076862456982e-4, name: "windows_1253", size: 1052, typeId: "object" }, { id: "ImvMAQPnb13Mf7mqB7t6m", lastModifiedAt: 17435076862458247e-4, name: "windows_1254", size: 2445, typeId: "object" }, { id: "mYnEtUyasG7Cub5f7WgsT", lastModifiedAt: 17435076862458765e-4, name: "windows_1255", size: 2405, typeId: "object" }, { id: "clQEg9g9e9QiBJcsOcKcs", lastModifiedAt: 17435076862459272e-4, name: "windows_1256", size: 2241, typeId: "object" }]
123
123
  };
124
124
  let I;
125
- async function K(e, t) {
125
+ async function Q(e, t) {
126
126
  const { add_my_numbers: i } = await y();
127
127
  console.log(1111, e, t);
128
- const d = i(Math.trunc(e), Math.trunc(t));
129
- return console.log(2222, d), d;
128
+ const s = i(Math.trunc(e), Math.trunc(t));
129
+ return console.log(2222, s), s;
130
130
  }
131
- async function Q(e) {
131
+ async function J(e) {
132
132
  const { checksum_from_rust: t } = await y();
133
133
  return t(e);
134
134
  }
@@ -136,108 +136,115 @@ async function y() {
136
136
  return I ??= import("./datapos_connector_file_store_emulator_core-CBVDrOML.js"), I;
137
137
  }
138
138
  const m = "https://sample-data-eu.datapos.app";
139
- class X {
139
+ class $ {
140
140
  abortController;
141
141
  config;
142
142
  toolConfigs;
143
143
  constructor(t) {
144
- this.abortController = void 0, this.config = Z, this.toolConfigs = t;
144
+ this.abortController = void 0, this.config = K, this.toolConfigs = t;
145
145
  }
146
- //#region: Operations. #####
147
- /** Abort the currently running operation. */
146
+ //━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
147
+ //#region: Operations.
148
+ /**
149
+ * Abort the currently running operation.
150
+ */
148
151
  abortOperation(t) {
149
152
  t.abortController && (t.abortController.abort(), t.abortController = void 0);
150
153
  }
151
- /** Find the folder path containing the specified object node. */
154
+ /**
155
+ * Find the folder path containing the specified object node.
156
+ */
152
157
  findObjectFolderPath(t, i) {
153
- const d = f;
154
- for (const s in d)
155
- if (Object.hasOwn(d, s) && d[s]?.find((c) => c.typeId === "object" && c.id === i.nodeId))
156
- return Promise.resolve(s);
158
+ const s = f;
159
+ for (const d in s)
160
+ if (Object.hasOwn(s, d) && s[d]?.find((c) => c.typeId === "object" && c.id === i.nodeId))
161
+ return Promise.resolve(d);
157
162
  return Promise.resolve(null);
158
163
  }
159
- /** Get a readable stream for the specified object node path. */
164
+ /**
165
+ * Get a readable stream for the specified object node path.
166
+ */
160
167
  async getReadableStream(t, i) {
161
- const { signal: d } = t.abortController = new AbortController();
168
+ const { signal: s } = t.abortController = new AbortController();
162
169
  try {
163
- const s = await fetch(`${m}/fileStore${i.path}`, { signal: d });
164
- if (!s.ok)
165
- throw await C(s, `Failed to fetch '${i.path}' file.`, "datapos-connector-file-store-emulator|Connector|getReadableStream");
166
- if (s.body == null)
167
- throw new u("Readable streams are not supported in this runtime.", "datapos-connector-file-store-emulator|Connector|getReadableStream.unsupported");
168
- const o = await K(12, 56), a = await Q(t.config.version);
169
- return console.log("sum", a, o), await Promise.resolve(s.body);
170
- } catch (s) {
171
- throw l(s);
170
+ const d = await fetch(`${m}/fileStore${i.path}`, { signal: s });
171
+ if (!d.ok)
172
+ throw await h(d, `Failed to fetch '${i.path}' file.`, "datapos-connector-file-store-emulator|Connector|getReadableStream");
173
+ if (d.body == null)
174
+ throw new C("Readable streams are not supported in this runtime.", "datapos-connector-file-store-emulator|Connector|getReadableStream.unsupported");
175
+ const o = await Q(12, 56), a = await J(t.config.version);
176
+ return console.log("sum", a, o), await Promise.resolve(d.body);
177
+ } catch (d) {
178
+ throw l(d);
172
179
  } finally {
173
180
  t.abortController = void 0;
174
181
  }
175
182
  }
176
- /** Lists all nodes (folders and objects) in the specified folder path. */
183
+ /**
184
+ * Lists all nodes (folders and objects) in the specified folder path.
185
+ */
177
186
  listNodes(t, i) {
178
- const s = f[i.folderPath] ?? [], o = [];
179
- for (const a of s)
180
- a.typeId === "folder" ? o.push(this.constructFolderNodeConfig(i.folderPath, a.name, a.childCount)) : o.push(this.constructObjectNodeConfig(i.folderPath, a.id, a.name, a.lastModifiedAt, a.size));
187
+ const d = f[i.folderPath] ?? [], o = [];
188
+ for (const a of d)
189
+ a.typeId === "folder" ? o.push(X(i.folderPath, a.name, a.childCount)) : o.push(Y(i.folderPath, a.id, a.name, a.lastModifiedAt, a.size));
181
190
  return Promise.resolve({ cursor: void 0, isMore: !1, connectionNodeConfigs: o, totalCount: o.length });
182
191
  }
183
- /** Preview the contents of the object node with the specified path. */
192
+ /**
193
+ * Preview the contents of the object node with the specified path.
194
+ */
184
195
  async previewObject(t, i) {
185
- const { signal: d } = t.abortController = new AbortController();
196
+ const { signal: s } = t.abortController = new AbortController();
186
197
  try {
187
- const s = Date.now(), o = performance.now(), c = await (await p(t.toolConfigs, "file-operators")).previewFile(`${m}/fileStore${i.path}`, d, i.chunkSize), n = await p(t.toolConfigs, "csv-parse");
198
+ const d = Date.now(), o = performance.now(), c = await (await r(t.toolConfigs, "file-operators")).previewFile(`${m}/fileStore${i.path}`, s, i.chunkSize);
199
+ if (c.dataFormatId == null) throw new Error("Connector unable to process files of this type.");
188
200
  if (c.text == null)
189
201
  throw new Error("File is empty.");
190
- {
191
- const A = n.determineSchemaConfig(c.text, [",", ";", "|"]);
192
- console.log("schemaConfig", A);
193
- }
194
- if (c.dataFormatId == null) throw new Error("Connector unable to process files of this type.");
195
- const r = performance.now() - o;
202
+ const n = await r(t.toolConfigs, "csv-parse"), A = [":", ",", "!", "0x1E", ";", " ", " ", "_", "0x1F", "|"], p = await n.determineSchemaConfig(c.text, A), M = performance.now() - o;
196
203
  return {
197
- asAt: s,
204
+ asAt: d,
198
205
  columnConfigs: [],
199
206
  dataFormatId: c.dataFormatId,
200
- duration: r,
207
+ duration: M,
201
208
  encodingId: c.encodingId,
202
209
  encodingConfidenceLevel: c.encodingConfidenceLevel,
203
210
  fileType: c.fileTypeConfig,
204
211
  hasHeaders: void 0,
212
+ recordDelimiterId: p.recordDelimiterId,
205
213
  records: [],
206
214
  size: c.bytes.length,
207
- text: c.text
215
+ text: c.text,
216
+ valueDelimiterId: p.valueDelimiterId
208
217
  };
209
- } catch (s) {
210
- throw l(s);
218
+ } catch (d) {
219
+ throw l(d);
211
220
  } finally {
212
221
  t.abortController = void 0;
213
222
  }
214
223
  }
215
- /** Retrieves all records from a CSV object node using streaming and chunked processing. */
216
- async retrieveRecords(t, i, d, s) {
224
+ /**
225
+ * Retrieves all records from a CSV object node using streaming and chunked processing.
226
+ */
227
+ async retrieveRecords(t, i, s, d) {
217
228
  t.abortController = new AbortController();
218
229
  try {
219
- const o = await p(t.toolConfigs, "csv-parse"), a = { delimiter: i.valueDelimiterId, info: !0, relax_column_count: !0, relax_quotes: !0 }, c = `${m}/fileStore${i.path}`, n = await o.parseStream(i, a, c, t.abortController, d);
220
- s(n);
230
+ const o = await r(t.toolConfigs, "csv-parse"), a = { delimiter: i.valueDelimiterId, info: !0, relax_column_count: !0, relax_quotes: !0 }, c = `${m}/fileStore${i.path}`, n = await o.parseStream(i, a, c, t.abortController, s);
231
+ d(n);
221
232
  } catch (o) {
222
233
  throw l(o);
223
234
  } finally {
224
235
  t.abortController = void 0;
225
236
  }
226
237
  }
227
- //#endregion
228
- //#region: Helpers. #####
229
- /** Construct folder node configuration. */
230
- constructFolderNodeConfig(t, i, d) {
231
- return { id: z(), childCount: d, extension: void 0, folderPath: t, label: i, name: i, typeId: "folder" };
232
- }
233
- /** Construct object (file) node configuration. */
234
- constructObjectNodeConfig(t, i, d, s, o) {
235
- const a = g(d) ?? "", c = w(d), n = s, r = P(c);
236
- return { id: i, extension: c, folderPath: t, label: d, lastModifiedAt: n, mimeType: r, name: a, size: o, typeId: "object" };
237
- }
238
- //#endregion
238
+ //#endregion ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
239
+ }
240
+ function X(e, t, i) {
241
+ return { id: j(), childCount: i, extension: void 0, folderPath: e, label: t, name: t, typeId: "folder" };
242
+ }
243
+ function Y(e, t, i, s, d) {
244
+ const o = w(i) ?? "", a = P(i), c = s, n = E(a);
245
+ return { id: t, extension: a, folderPath: e, label: i, lastModifiedAt: c, mimeType: n, name: o, size: d, typeId: "object" };
239
246
  }
240
247
  export {
241
- X as Connector
248
+ $ as Connector
242
249
  };
243
250
  //# sourceMappingURL=datapos-connector-file-store-emulator.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"datapos-connector-file-store-emulator.es.js","sources":["../node_modules/nanoid/url-alphabet/index.js","../node_modules/nanoid/index.browser.js","../node_modules/@datapos/datapos-shared/dist/datapos-shared-errors.es.js","../node_modules/@datapos/datapos-shared/dist/datapos-shared-utilities.es.js","../node_modules/@datapos/datapos-shared/dist/datapos-shared-tools.es.js","../src/rustBridge.ts","../src/index.ts"],"sourcesContent":["export const urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n","/* @ts-self-types=\"./index.d.ts\" */\nimport { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'\nexport { urlAlphabet } from './url-alphabet/index.js'\nexport let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nexport let customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << Math.log2(alphabet.length - 1)) - 1\n let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step | 0\n while (j--) {\n id += alphabet[bytes[j] & mask] || ''\n if (id.length >= size) return id\n }\n }\n }\n}\nexport let customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size | 0, random)\nexport let nanoid = (size = 21) => {\n let id = ''\n let bytes = crypto.getRandomValues(new Uint8Array((size |= 0)))\n while (size--) {\n id += scopedUrlAlphabet[bytes[size] & 63]\n }\n return id\n}\n","class i extends Error {\n locator;\n /** Logical source of the error. */\n constructor(o, t, r) {\n super(o, r), this.name = new.target.name, this.locator = t;\n }\n}\nclass a extends i {\n}\nclass g extends a {\n}\nclass p extends a {\n}\nclass c extends a {\n body;\n /** Sanitized HTTP response body. */\n constructor(o, t, r, n) {\n super(o, t, n), this.name = new.target.name, this.body = E(r ?? void 0);\n }\n}\nclass y extends i {\n}\nclass m extends a {\n componentName;\n /** Vue component name, if available. */\n info;\n /** Vue error info string. */\n constructor(o, t, r, n, s) {\n super(o, t, s), this.name = new.target.name, this.info = r, this.componentName = n;\n }\n}\nclass w extends a {\n}\nclass h extends a {\n}\nasync function b(e, o, t) {\n const r = ` - ${e.statusText}`, n = `${o} Response status '${e.status}${e.statusText ? r : \"\"}' received.`;\n let s;\n try {\n s = await e.text();\n } catch (d) {\n s = `<body unavailable: ${l(d).message}>`;\n }\n return new c(n, t, s);\n}\nfunction k(e) {\n return e.map((o) => o.message).join(\" \");\n}\nfunction x(e) {\n try {\n e();\n } catch {\n }\n}\nfunction l(e) {\n if (e instanceof Error) return e;\n if (typeof e == \"string\") return new Error(e);\n if (typeof e == \"number\" || typeof e == \"boolean\" || typeof e == \"bigint\") return new Error(String(e));\n if (typeof e == \"symbol\") return new Error(e.description ?? \"Unknown error\");\n if (e != null && typeof e == \"object\")\n try {\n return new Error(JSON.stringify(e));\n } catch {\n return new Error(\"Unknown error\");\n }\n return new Error(\"Unknown error\");\n}\nfunction R(e) {\n const o = /* @__PURE__ */ new Set(), t = [];\n let r = e;\n for (; r != null && !o.has(r); ) {\n o.add(r);\n let n;\n if (r instanceof c)\n n = { componentName: void 0, body: r.body, info: void 0, locator: r.locator, message: r.message, name: r.name, stack: r.stack }, r = r.cause;\n else if (r instanceof m)\n n = {\n componentName: r.componentName,\n body: void 0,\n info: r.info,\n locator: r.locator,\n message: r.message,\n name: r.name,\n stack: r.stack\n }, r = r.cause;\n else if (r instanceof i)\n n = { componentName: void 0, body: void 0, info: void 0, locator: r.locator, message: r.message, name: r.name, stack: r.stack }, r = r.cause;\n else if (r instanceof Error) {\n const s = r;\n n = { componentName: void 0, body: void 0, info: void 0, locator: \"\", message: s.message, name: s.name, stack: s.stack }, r = s.cause;\n } else\n n = { componentName: void 0, body: void 0, info: void 0, locator: \"\", message: f(r), name: \"Error\", stack: void 0 }, r = void 0;\n /(?:\\.{3}|[.!?])$/.test(n.message) || (n.message += \".\"), t.push(n);\n }\n return t;\n}\nfunction f(e) {\n let o;\n try {\n o = JSON.stringify(e);\n } catch {\n typeof e == \"symbol\" ? o = e.description ?? \"Unknown error\" : typeof e == \"bigint\" ? o = e.toString() : o = \"Unknown error\";\n }\n return o === \"\" && (o = \"Unknown error\"), o;\n}\nfunction E(e) {\n if (!(e == null || e === \"\"))\n return e.length > 2048 ? `${e.slice(0, 2048)}... [truncated]` : e;\n}\nexport {\n g as APIError,\n a as ApplicationError,\n p as EngineError,\n c as FetchError,\n y as OperationalError,\n m as VueHandledError,\n h as WindowHandledPromiseRejectionError,\n w as WindowHandledRuntimeError,\n b as buildFetchError,\n k as concatenateSerialisedErrorMessages,\n x as ignoreErrors,\n l as normalizeToError,\n R as serialiseError\n};\n","const c = \"en-US\", s = /* @__PURE__ */ new Map();\nfunction f(e) {\n switch (e) {\n case \"Edm.Binary\":\n return \"unknown\";\n // Binary...\n case \"Edm.Boolean\":\n return \"boolean\";\n case \"Edm.Byte\":\n return \"wholeNumber\";\n case \"Edm.DateTime\":\n return \"moment\";\n // DateTime...\n case \"Edm.DateTimeOffset\":\n return \"moment\";\n // DateTimeOffset...\n case \"Edm.Decimal\":\n return \"decimalNumber\";\n case \"Edm.Double\":\n return \"decimalNumber\";\n case \"Edm.Guid\":\n return \"string\";\n case \"Edm.Int16\":\n return \"wholeNumber\";\n case \"Edm.Int32\":\n return \"wholeNumber\";\n case \"Edm.Int64\":\n return \"wholeNumber\";\n case \"Edm.SByte\":\n return \"wholeNumber\";\n case \"Edm.Single\":\n return \"decimalNumber\";\n case \"Edm.String\":\n return \"string\";\n case \"Edm.Time\":\n return \"momentTime\";\n // Time...\n default:\n return \"unknown\";\n }\n}\nfunction l(e) {\n if (e) {\n const t = e.lastIndexOf(\"/\"), n = e.lastIndexOf(\".\", t === -1 ? e.length : t);\n return n === -1 ? e : e.slice(0, Math.max(0, n));\n }\n}\nfunction m(e) {\n if (e) {\n const t = e.lastIndexOf(\".\");\n if (t !== -1) return e.slice(Math.max(0, t + 1));\n }\n}\nfunction r(e, t = 2, n = t, i = c) {\n if (e == null) return \"\";\n const u = `${i}decimal${t}.${n}`;\n let a = s.get(u);\n return a || (a = new Intl.NumberFormat(i, {\n localeMatcher: \"best fit\",\n maximumFractionDigits: t,\n minimumFractionDigits: n,\n minimumIntegerDigits: 1,\n style: \"decimal\",\n useGrouping: !0\n }), s.set(u, a)), a.format(e);\n}\nfunction d(e) {\n return e == null ? \"\" : e < 1e3 ? o(e) : e < 1e6 ? `${r(e / 1e3, 2, 0)}K` : e < 1e9 ? `${r(e / 1e6, 2, 0)}M` : e < 1e12 ? `${r(e / 1e9, 2, 0)}B` : `${r(e / 1e12, 2, 0)}T`;\n}\nfunction x(e) {\n return e == null ? \"\" : e === 1 ? \"1 byte\" : e < 1024 ? `${o(e)} bytes` : e < 1048576 ? `${r(e / 1024, 2, 0)} KB` : e < 1073741824 ? `${r(e / 1048576, 2, 0)} MB` : e < 1099511627776 ? `${r(e / 1073741824, 2, 0)} GB` : `${r(e / 1099511627776, 2, 0)} TB`;\n}\nfunction p(e) {\n return e == null ? \"\" : e < 1e3 ? `${o(e)} ms` : e === 1e3 ? `${o(e)} sec` : e < 6e4 ? `${r(e / 1e3, 2, 0)} secs` : e === 6e4 ? \"1 min\" : e < 36e5 ? `${r(e / 6e4, 2, 0)} mins` : e === 36e5 ? \"1 hr\" : e < 864e5 ? `${r(e / 36e5, 2, 0)} hrs` : e === 864e5 ? \"1 day\" : `${r(e / 864e5, 2, 0)} days`;\n}\nfunction o(e, t = c) {\n if (e == null) return \"\";\n const n = `${t}decimal0.0`;\n let i = s.get(n);\n return i || (i = new Intl.NumberFormat(t, {\n localeMatcher: \"best fit\",\n maximumFractionDigits: 0,\n minimumFractionDigits: 0,\n minimumIntegerDigits: 1,\n style: \"decimal\",\n useGrouping: !0\n }), s.set(n, i)), i.format(e);\n}\nfunction E(e) {\n switch (e) {\n case \"csv\":\n return \"text/csv\";\n case \"tab\":\n case \"tsv\":\n return \"text/tab-separated-values\";\n case \"xls\":\n return \"application/vnd.ms-excel\";\n case \"xlsx\":\n return \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\n default:\n return \"application/octet-stream\";\n }\n}\nexport {\n f as convertODataTypeIdToUsageTypeId,\n m as extractExtensionFromPath,\n l as extractNameFromPath,\n r as formatNumberAsDecimalNumber,\n p as formatNumberAsDuration,\n d as formatNumberAsSize,\n x as formatNumberAsStorageSize,\n o as formatNumberAsWholeNumber,\n E as lookupMimeTypeForExtension\n};\n","async function a(e, o) {\n const n = `datapos-tool-${o}`, t = e.find((r) => r.id === n);\n if (!t) throw new Error(`Connector could not load unknown tool '${o}'.`);\n const l = await import(`https://engine-eu.datapos.app/tools/${o}_v${t.version}/${n}.es.js`);\n return new l.Tool();\n}\nexport {\n a as loadTool\n};\n","// Dependencies - Framework\nimport type * as RustModule from '../rust/datapos-connector-file-store-emulator-core/pkg/datapos_connector_file_store_emulator_core.js';\n\n// Interfaces/Types\ntype RustBindings = typeof RustModule;\n\n// Module Variables\nlet rustBindingsPromise: Promise<RustBindings> | undefined;\n\n// Utilities\nasync function addNumbersWithRust(left: number, right: number): Promise<number> {\n const { add_my_numbers } = await loadRustBindings();\n console.log(1111, left, right);\n const yyyy = add_my_numbers(Math.trunc(left), Math.trunc(right));\n console.log(2222, yyyy);\n return yyyy;\n}\n\n// Utilities\nasync function checksumWithRust(input: string): Promise<number> {\n const { checksum_from_rust } = await loadRustBindings();\n return checksum_from_rust(input);\n}\n\n// Helpers\nasync function loadRustBindings(): Promise<RustBindings> {\n rustBindingsPromise ??= import('../rust/datapos-connector-file-store-emulator-core/pkg/datapos_connector_file_store_emulator_core.js');\n return rustBindingsPromise;\n}\n\n// Exposures\nexport { addNumbersWithRust, checksumWithRust };\n","/**\n * File store emulator connector class.\n *\n * TODO: Consider Cloudflare R2 Download URL: https://plugins-eu.datapositioning.app/connectors/datapos-connector-file-store-emulator-es.js.\n * This would allow us to secure the bucket?\n */\n\n/** Vendor dependencies. */\nimport { nanoid } from 'nanoid';\n\n/** Framework dependencies. */\nimport type { Tool as CSVParseTool } from '@datapos/datapos-tool-csv-parse';\nimport type { DataViewPreviewConfig } from '@datapos/datapos-shared';\nimport type { Tool as FileOperatorsTool } from '@datapos/datapos-tool-file-operators';\nimport { buildFetchError, normalizeToError, OperationalError } from '@datapos/datapos-shared/errors';\nimport type {\n ConnectionNodeConfig,\n ConnectorConfig,\n ConnectorInterface,\n FindObjectFolderPathOptions,\n GetReadableStreamOptions,\n ListNodesOptions,\n ListNodesResult,\n PreviewObjectOptions,\n RetrieveRecordsOptions,\n RetrieveRecordsSummary\n} from '@datapos/datapos-shared/component/connector';\nimport { extractExtensionFromPath, extractNameFromPath, lookupMimeTypeForExtension } from '@datapos/datapos-shared/utilities';\nimport { loadTool, type ToolConfig } from '@datapos/datapos-shared/component/tool';\n\n/** Data dependencies. */\nimport config from '~/config.json';\nimport fileStoreFolderPathData from '@/fileStoreFolderPaths.json';\nimport { addNumbersWithRust, checksumWithRust } from '@/rustBridge';\n\n/** File store folder paths. */\ntype FileStoreFolderNode =\n | ({ typeId: 'folder'; childCount: number } & { name: string })\n | ({ typeId: 'object'; id: string; lastModifiedAt: number; size: number } & { name: string });\ntype FileStoreFolderPaths = Record<string, FileStoreFolderNode[]>;\n\n/** Constants */\nconst URL_PREFIX = 'https://sample-data-eu.datapos.app';\n\n/** File store emulator connector. */\nclass Connector implements ConnectorInterface {\n abortController: AbortController | undefined;\n readonly config: ConnectorConfig;\n readonly toolConfigs;\n\n constructor(toolConfigs: ToolConfig[]) {\n this.abortController = undefined;\n this.config = config as ConnectorConfig;\n this.toolConfigs = toolConfigs;\n }\n\n //#region: Operations. #####\n\n /** Abort the currently running operation. */\n abortOperation(connector: ConnectorInterface): void {\n if (!connector.abortController) return;\n connector.abortController.abort();\n connector.abortController = undefined;\n }\n\n /** Find the folder path containing the specified object node. */\n findObjectFolderPath(connector: ConnectorInterface, options: FindObjectFolderPathOptions): Promise<string | null> {\n const fileStoreFolderPaths = fileStoreFolderPathData as FileStoreFolderPaths;\n // Loop through the folder path data checking for an object entry with an identifier equal to the object name.\n for (const folderPath in fileStoreFolderPaths) {\n if (Object.hasOwn(fileStoreFolderPaths, folderPath)) {\n // eslint-disable-next-line security/detect-object-injection\n const folderPathNodes = fileStoreFolderPaths[folderPath];\n const folderPathNode = folderPathNodes?.find((folderPathNode) => folderPathNode.typeId === 'object' && folderPathNode.id === options.nodeId);\n if (folderPathNode) return Promise.resolve(folderPath); // Found, return folder path.\n }\n }\n return Promise.resolve(null); // Not found.\n }\n\n /** Get a readable stream for the specified object node path. */\n async getReadableStream(connector: ConnectorInterface, options: GetReadableStreamOptions): Promise<ReadableStream<Uint8Array>> {\n // Create an abort controller and extract its signal.\n const { signal } = (connector.abortController = new AbortController());\n\n try {\n const response = await fetch(`${URL_PREFIX}/fileStore${options.path}`, { signal });\n if (!response.ok) {\n throw await buildFetchError(response, `Failed to fetch '${options.path}' file.`, 'datapos-connector-file-store-emulator|Connector|getReadableStream');\n }\n if (response.body == null) {\n throw new OperationalError('Readable streams are not supported in this runtime.', 'datapos-connector-file-store-emulator|Connector|getReadableStream.unsupported');\n }\n\n // TODO: Remove after testing.\n const xxx = await addNumbersWithRust(12, 56);\n const sum = await checksumWithRust(connector.config.version);\n console.log('sum', sum, xxx);\n\n return await Promise.resolve(response.body);\n } catch (error) {\n throw normalizeToError(error);\n } finally {\n connector.abortController = undefined;\n }\n }\n\n /** Lists all nodes (folders and objects) in the specified folder path. */\n listNodes(connector: ConnectorInterface, options: ListNodesOptions): Promise<ListNodesResult> {\n const fileStoreFolderPaths = fileStoreFolderPathData as FileStoreFolderPaths;\n const folderNodes = fileStoreFolderPaths[options.folderPath] ?? [];\n const connectionNodeConfigs: ConnectionNodeConfig[] = [];\n for (const folderNode of folderNodes) {\n if (folderNode.typeId === 'folder') {\n connectionNodeConfigs.push(this.constructFolderNodeConfig(options.folderPath, folderNode.name, folderNode.childCount));\n } else {\n connectionNodeConfigs.push(this.constructObjectNodeConfig(options.folderPath, folderNode.id, folderNode.name, folderNode.lastModifiedAt, folderNode.size));\n }\n }\n return Promise.resolve({ cursor: undefined, isMore: false, connectionNodeConfigs, totalCount: connectionNodeConfigs.length });\n }\n\n /** Preview the contents of the object node with the specified path. */\n async previewObject(connector: ConnectorInterface, options: PreviewObjectOptions): Promise<DataViewPreviewConfig> {\n // Create an abort controller and extract its signal.\n const { signal } = (connector.abortController = new AbortController());\n\n try {\n const asAt = Date.now();\n const startedAt = performance.now();\n\n const fileOperatorsTool = await loadTool<FileOperatorsTool>(connector.toolConfigs, 'file-operators');\n const previewConfig = await fileOperatorsTool.previewFile(`${URL_PREFIX}/fileStore${options.path}`, signal, options.chunkSize);\n\n const csvParseTool = await loadTool<CSVParseTool>(connector.toolConfigs, 'csv-parse');\n if (previewConfig.text == null) {\n throw new Error('File is empty.');\n } else {\n const schemaConfig = csvParseTool.determineSchemaConfig(previewConfig.text, [',', ';', '|']);\n console.log('schemaConfig', schemaConfig);\n }\n\n if (previewConfig.dataFormatId == null) throw new Error('Connector unable to process files of this type.');\n\n const duration = performance.now() - startedAt;\n return {\n asAt,\n columnConfigs: [],\n dataFormatId: previewConfig.dataFormatId,\n duration,\n encodingId: previewConfig.encodingId,\n encodingConfidenceLevel: previewConfig.encodingConfidenceLevel,\n fileType: previewConfig.fileTypeConfig,\n hasHeaders: undefined,\n records: [],\n size: previewConfig.bytes.length,\n text: previewConfig.text\n };\n } catch (error) {\n throw normalizeToError(error);\n } finally {\n connector.abortController = undefined;\n }\n }\n /** Retrieves all records from a CSV object node using streaming and chunked processing. */\n async retrieveRecords(\n connector: ConnectorInterface,\n options: RetrieveRecordsOptions,\n chunk: (records: (string[] | Record<string, unknown>)[]) => void,\n complete: (result: RetrieveRecordsSummary) => void\n ): Promise<void> {\n connector.abortController = new AbortController();\n\n try {\n const csvParseTool = await loadTool<CSVParseTool>(connector.toolConfigs, 'csv-parse');\n const parseStreamOptions = { delimiter: options.valueDelimiterId, info: true, relax_column_count: true, relax_quotes: true };\n const url = `${URL_PREFIX}/fileStore${options.path}`;\n const summary = await csvParseTool.parseStream(options, parseStreamOptions, url, connector.abortController, chunk);\n complete(summary);\n } catch (error) {\n throw normalizeToError(error);\n } finally {\n connector.abortController = undefined;\n }\n }\n\n //#endregion\n\n //#region: Helpers. #####\n\n /** Construct folder node configuration. */\n private constructFolderNodeConfig(folderPath: string, name: string, childCount: number): ConnectionNodeConfig {\n return { id: nanoid(), childCount, extension: undefined, folderPath, label: name, name, typeId: 'folder' };\n }\n\n /** Construct object (file) node configuration. */\n private constructObjectNodeConfig(folderPath: string, id: string, fullName: string, lastModifiedAt: number, size: number): ConnectionNodeConfig {\n const name = extractNameFromPath(fullName) ?? '';\n const extension = extractExtensionFromPath(fullName);\n const lastModifiedAtTimestamp = lastModifiedAt;\n const mimeType = lookupMimeTypeForExtension(extension);\n return { id, extension, folderPath, label: fullName, lastModifiedAt: lastModifiedAtTimestamp, mimeType, name, size, typeId: 'object' };\n }\n\n //#endregion\n}\n\n// Exports.\nexport { Connector };\n"],"names":["urlAlphabet","nanoid","size","id","bytes","scopedUrlAlphabet","i","o","t","r","c","a","n","E","y","b","s","d","l","m","rustBindingsPromise","addNumbersWithRust","left","right","add_my_numbers","loadRustBindings","yyyy","checksumWithRust","input","checksum_from_rust","URL_PREFIX","Connector","toolConfigs","config","connector","options","fileStoreFolderPaths","fileStoreFolderPathData","folderPath","folderPathNode","signal","response","buildFetchError","OperationalError","xxx","sum","error","normalizeToError","folderNodes","connectionNodeConfigs","folderNode","asAt","startedAt","previewConfig","loadTool","csvParseTool","schemaConfig","duration","chunk","complete","parseStreamOptions","url","summary","name","childCount","fullName","lastModifiedAt","extractNameFromPath","extension","extractExtensionFromPath","lastModifiedAtTimestamp","mimeType","lookupMimeTypeForExtension"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]}
1
+ {"version":3,"file":"datapos-connector-file-store-emulator.es.js","sources":["../node_modules/nanoid/url-alphabet/index.js","../node_modules/nanoid/index.browser.js","../node_modules/@datapos/datapos-shared/dist/datapos-shared-errors.es.js","../node_modules/@datapos/datapos-shared/dist/datapos-shared-utilities.es.js","../node_modules/@datapos/datapos-shared/dist/datapos-shared-tools.es.js","../src/rustBridge.ts","../src/index.ts"],"sourcesContent":["export const urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n","/* @ts-self-types=\"./index.d.ts\" */\nimport { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'\nexport { urlAlphabet } from './url-alphabet/index.js'\nexport let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nexport let customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << Math.log2(alphabet.length - 1)) - 1\n let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step | 0\n while (j--) {\n id += alphabet[bytes[j] & mask] || ''\n if (id.length >= size) return id\n }\n }\n }\n}\nexport let customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size | 0, random)\nexport let nanoid = (size = 21) => {\n let id = ''\n let bytes = crypto.getRandomValues(new Uint8Array((size |= 0)))\n while (size--) {\n id += scopedUrlAlphabet[bytes[size] & 63]\n }\n return id\n}\n","class i extends Error {\n locator;\n /** Logical source of the error. */\n constructor(o, t, r) {\n super(o, r), this.name = new.target.name, this.locator = t;\n }\n}\nclass a extends i {\n}\nclass g extends a {\n}\nclass p extends a {\n}\nclass c extends a {\n body;\n /** Sanitized HTTP response body. */\n constructor(o, t, r, n) {\n super(o, t, n), this.name = new.target.name, this.body = E(r ?? void 0);\n }\n}\nclass y extends i {\n}\nclass m extends a {\n componentName;\n /** Vue component name, if available. */\n info;\n /** Vue error info string. */\n constructor(o, t, r, n, s) {\n super(o, t, s), this.name = new.target.name, this.info = r, this.componentName = n;\n }\n}\nclass w extends a {\n}\nclass h extends a {\n}\nasync function b(e, o, t) {\n const r = ` - ${e.statusText}`, n = `${o} Response status '${e.status}${e.statusText ? r : \"\"}' received.`;\n let s;\n try {\n s = await e.text();\n } catch (d) {\n s = `<body unavailable: ${l(d).message}>`;\n }\n return new c(n, t, s);\n}\nfunction k(e) {\n return e.map((o) => o.message).join(\" \");\n}\nfunction x(e) {\n try {\n e();\n } catch {\n }\n}\nfunction l(e) {\n if (e instanceof Error) return e;\n if (typeof e == \"string\") return new Error(e);\n if (typeof e == \"number\" || typeof e == \"boolean\" || typeof e == \"bigint\") return new Error(String(e));\n if (typeof e == \"symbol\") return new Error(e.description ?? \"Unknown error\");\n if (e != null && typeof e == \"object\")\n try {\n return new Error(JSON.stringify(e));\n } catch {\n return new Error(\"Unknown error\");\n }\n return new Error(\"Unknown error\");\n}\nfunction R(e) {\n const o = /* @__PURE__ */ new Set(), t = [];\n let r = e;\n for (; r != null && !o.has(r); ) {\n o.add(r);\n let n;\n if (r instanceof c)\n n = { componentName: void 0, body: r.body, info: void 0, locator: r.locator, message: r.message, name: r.name, stack: r.stack }, r = r.cause;\n else if (r instanceof m)\n n = {\n componentName: r.componentName,\n body: void 0,\n info: r.info,\n locator: r.locator,\n message: r.message,\n name: r.name,\n stack: r.stack\n }, r = r.cause;\n else if (r instanceof i)\n n = { componentName: void 0, body: void 0, info: void 0, locator: r.locator, message: r.message, name: r.name, stack: r.stack }, r = r.cause;\n else if (r instanceof Error) {\n const s = r;\n n = { componentName: void 0, body: void 0, info: void 0, locator: \"\", message: s.message, name: s.name, stack: s.stack }, r = s.cause;\n } else\n n = { componentName: void 0, body: void 0, info: void 0, locator: \"\", message: f(r), name: \"Error\", stack: void 0 }, r = void 0;\n /(?:\\.{3}|[.!?])$/.test(n.message) || (n.message += \".\"), t.push(n);\n }\n return t;\n}\nfunction f(e) {\n let o;\n try {\n o = JSON.stringify(e);\n } catch {\n typeof e == \"symbol\" ? o = e.description ?? \"Unknown error\" : typeof e == \"bigint\" ? o = e.toString() : o = \"Unknown error\";\n }\n return o === \"\" && (o = \"Unknown error\"), o;\n}\nfunction E(e) {\n if (!(e == null || e === \"\"))\n return e.length > 2048 ? `${e.slice(0, 2048)}... [truncated]` : e;\n}\nexport {\n g as APIError,\n a as ApplicationError,\n p as EngineError,\n c as FetchError,\n y as OperationalError,\n m as VueHandledError,\n h as WindowHandledPromiseRejectionError,\n w as WindowHandledRuntimeError,\n b as buildFetchError,\n k as concatenateSerialisedErrorMessages,\n x as ignoreErrors,\n l as normalizeToError,\n R as serialiseError\n};\n","const c = \"en-US\", s = /* @__PURE__ */ new Map();\nfunction f(e) {\n switch (e) {\n case \"Edm.Binary\":\n return \"unknown\";\n // Binary...\n case \"Edm.Boolean\":\n return \"boolean\";\n case \"Edm.Byte\":\n return \"wholeNumber\";\n case \"Edm.DateTime\":\n return \"moment\";\n // DateTime...\n case \"Edm.DateTimeOffset\":\n return \"moment\";\n // DateTimeOffset...\n case \"Edm.Decimal\":\n return \"decimalNumber\";\n case \"Edm.Double\":\n return \"decimalNumber\";\n case \"Edm.Guid\":\n return \"string\";\n case \"Edm.Int16\":\n return \"wholeNumber\";\n case \"Edm.Int32\":\n return \"wholeNumber\";\n case \"Edm.Int64\":\n return \"wholeNumber\";\n case \"Edm.SByte\":\n return \"wholeNumber\";\n case \"Edm.Single\":\n return \"decimalNumber\";\n case \"Edm.String\":\n return \"string\";\n case \"Edm.Time\":\n return \"momentTime\";\n // Time...\n default:\n return \"unknown\";\n }\n}\nfunction l(e) {\n if (e) {\n const t = e.lastIndexOf(\"/\"), n = e.lastIndexOf(\".\", t === -1 ? e.length : t);\n return n === -1 ? e : e.slice(0, Math.max(0, n));\n }\n}\nfunction m(e) {\n if (e) {\n const t = e.lastIndexOf(\".\");\n if (t !== -1) return e.slice(Math.max(0, t + 1));\n }\n}\nfunction r(e, t = 2, n = t, i = c) {\n if (e == null) return \"\";\n const u = `${i}decimal${t}.${n}`;\n let a = s.get(u);\n return a || (a = new Intl.NumberFormat(i, {\n localeMatcher: \"best fit\",\n maximumFractionDigits: t,\n minimumFractionDigits: n,\n minimumIntegerDigits: 1,\n style: \"decimal\",\n useGrouping: !0\n }), s.set(u, a)), a.format(e);\n}\nfunction d(e) {\n return e == null ? \"\" : e < 1e3 ? o(e) : e < 1e6 ? `${r(e / 1e3, 2, 0)}K` : e < 1e9 ? `${r(e / 1e6, 2, 0)}M` : e < 1e12 ? `${r(e / 1e9, 2, 0)}B` : `${r(e / 1e12, 2, 0)}T`;\n}\nfunction x(e) {\n return e == null ? \"\" : e === 1 ? \"1 byte\" : e < 1024 ? `${o(e)} bytes` : e < 1048576 ? `${r(e / 1024, 2, 0)} KB` : e < 1073741824 ? `${r(e / 1048576, 2, 0)} MB` : e < 1099511627776 ? `${r(e / 1073741824, 2, 0)} GB` : `${r(e / 1099511627776, 2, 0)} TB`;\n}\nfunction p(e) {\n return e == null ? \"\" : e < 1e3 ? `${o(e)} ms` : e === 1e3 ? `${o(e)} sec` : e < 6e4 ? `${r(e / 1e3, 2, 0)} secs` : e === 6e4 ? \"1 min\" : e < 36e5 ? `${r(e / 6e4, 2, 0)} mins` : e === 36e5 ? \"1 hr\" : e < 864e5 ? `${r(e / 36e5, 2, 0)} hrs` : e === 864e5 ? \"1 day\" : `${r(e / 864e5, 2, 0)} days`;\n}\nfunction o(e, t = c) {\n if (e == null) return \"\";\n const n = `${t}decimal0.0`;\n let i = s.get(n);\n return i || (i = new Intl.NumberFormat(t, {\n localeMatcher: \"best fit\",\n maximumFractionDigits: 0,\n minimumFractionDigits: 0,\n minimumIntegerDigits: 1,\n style: \"decimal\",\n useGrouping: !0\n }), s.set(n, i)), i.format(e);\n}\nfunction E(e) {\n switch (e) {\n case \"csv\":\n return \"text/csv\";\n case \"tab\":\n case \"tsv\":\n return \"text/tab-separated-values\";\n case \"xls\":\n return \"application/vnd.ms-excel\";\n case \"xlsx\":\n return \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\n default:\n return \"application/octet-stream\";\n }\n}\nexport {\n f as convertODataTypeIdToUsageTypeId,\n m as extractExtensionFromPath,\n l as extractNameFromPath,\n r as formatNumberAsDecimalNumber,\n p as formatNumberAsDuration,\n d as formatNumberAsSize,\n x as formatNumberAsStorageSize,\n o as formatNumberAsWholeNumber,\n E as lookupMimeTypeForExtension\n};\n","async function a(e, o) {\n const n = `datapos-tool-${o}`, t = e.find((r) => r.id === n);\n if (!t) throw new Error(`Connector could not load unknown tool '${o}'.`);\n const l = await import(`https://engine-eu.datapos.app/tools/${o}_v${t.version}/${n}.es.js`);\n return new l.Tool();\n}\nexport {\n a as loadTool\n};\n","// Dependencies - Framework\nimport type * as RustModule from '../rust/datapos-connector-file-store-emulator-core/pkg/datapos_connector_file_store_emulator_core.js';\n\n// Interfaces/Types\ntype RustBindings = typeof RustModule;\n\n// Module Variables\nlet rustBindingsPromise: Promise<RustBindings> | undefined;\n\n// Utilities\nasync function addNumbersWithRust(left: number, right: number): Promise<number> {\n const { add_my_numbers } = await loadRustBindings();\n console.log(1111, left, right);\n const yyyy = add_my_numbers(Math.trunc(left), Math.trunc(right));\n console.log(2222, yyyy);\n return yyyy;\n}\n\n// Utilities\nasync function checksumWithRust(input: string): Promise<number> {\n const { checksum_from_rust } = await loadRustBindings();\n return checksum_from_rust(input);\n}\n\n// Helpers\nasync function loadRustBindings(): Promise<RustBindings> {\n rustBindingsPromise ??= import('../rust/datapos-connector-file-store-emulator-core/pkg/datapos_connector_file_store_emulator_core.js');\n return rustBindingsPromise;\n}\n\n// Exposures\nexport { addNumbersWithRust, checksumWithRust };\n","/**\n * File store emulator connector class.\n *\n * TODO: Consider Cloudflare R2 Download URL: https://plugins-eu.datapositioning.app/connectors/datapos-connector-file-store-emulator-es.js.\n * This would allow us to secure the bucket?\n */\n\n// Vendor dependencies.\nimport { nanoid } from 'nanoid';\n\n// Framework dependencies.\nimport type { Tool as CSVParseTool } from '@datapos/datapos-tool-csv-parse';\nimport type { DataViewPreviewConfig, ValueDelimiterId } from '@datapos/datapos-shared';\nimport type { Tool as FileOperatorsTool } from '@datapos/datapos-tool-file-operators';\nimport { buildFetchError, normalizeToError, OperationalError } from '@datapos/datapos-shared/errors';\nimport type {\n ConnectionNodeConfig,\n ConnectorConfig,\n ConnectorInterface,\n FindObjectFolderPathOptions,\n GetReadableStreamOptions,\n ListNodesOptions,\n ListNodesResult,\n PreviewObjectOptions,\n RetrieveRecordsOptions,\n RetrieveRecordsSummary\n} from '@datapos/datapos-shared/component/connector';\nimport { extractExtensionFromPath, extractNameFromPath, lookupMimeTypeForExtension } from '@datapos/datapos-shared/utilities';\nimport { loadTool, type ToolConfig } from '@datapos/datapos-shared/component/tool';\n\n// Data dependencies.\nimport config from '~/config.json';\nimport fileStoreFolderPathData from '@/fileStoreFolderPaths.json';\nimport { addNumbersWithRust, checksumWithRust } from '@/rustBridge';\n\n/**\n * File store folder paths.\n */\ntype FileStoreFolderNode =\n | ({ typeId: 'folder'; childCount: number } & { name: string })\n | ({ typeId: 'object'; id: string; lastModifiedAt: number; size: number } & { name: string });\ntype FileStoreFolderPaths = Record<string, FileStoreFolderNode[]>;\n\n// Constants.\nconst URL_PREFIX = 'https://sample-data-eu.datapos.app';\n\n/**\n * File store emulator connector.\n */\nclass Connector implements ConnectorInterface {\n abortController: AbortController | undefined;\n readonly config: ConnectorConfig;\n readonly toolConfigs;\n\n constructor(toolConfigs: ToolConfig[]) {\n this.abortController = undefined;\n this.config = config as ConnectorConfig;\n this.toolConfigs = toolConfigs;\n }\n\n //━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n //#region: Operations.\n\n /**\n * Abort the currently running operation.\n */\n abortOperation(connector: ConnectorInterface): void {\n if (!connector.abortController) return;\n connector.abortController.abort();\n connector.abortController = undefined;\n }\n\n /**\n * Find the folder path containing the specified object node.\n */\n findObjectFolderPath(connector: ConnectorInterface, options: FindObjectFolderPathOptions): Promise<string | null> {\n const fileStoreFolderPaths = fileStoreFolderPathData as FileStoreFolderPaths;\n // Loop through the folder path data checking for an object entry with an identifier equal to the object name.\n for (const folderPath in fileStoreFolderPaths) {\n if (Object.hasOwn(fileStoreFolderPaths, folderPath)) {\n // eslint-disable-next-line security/detect-object-injection\n const folderPathNodes = fileStoreFolderPaths[folderPath];\n const folderPathNode = folderPathNodes?.find((folderPathNode) => folderPathNode.typeId === 'object' && folderPathNode.id === options.nodeId);\n if (folderPathNode) return Promise.resolve(folderPath); // Found, return folder path.\n }\n }\n return Promise.resolve(null); // Not found.\n }\n\n /**\n * Get a readable stream for the specified object node path.\n */\n async getReadableStream(connector: ConnectorInterface, options: GetReadableStreamOptions): Promise<ReadableStream<Uint8Array>> {\n // Create an abort controller and extract its signal.\n const { signal } = (connector.abortController = new AbortController());\n\n try {\n const response = await fetch(`${URL_PREFIX}/fileStore${options.path}`, { signal });\n if (!response.ok) {\n throw await buildFetchError(response, `Failed to fetch '${options.path}' file.`, 'datapos-connector-file-store-emulator|Connector|getReadableStream');\n }\n if (response.body == null) {\n throw new OperationalError('Readable streams are not supported in this runtime.', 'datapos-connector-file-store-emulator|Connector|getReadableStream.unsupported');\n }\n\n // TODO: Remove after testing.\n const xxx = await addNumbersWithRust(12, 56);\n const sum = await checksumWithRust(connector.config.version);\n console.log('sum', sum, xxx);\n\n return await Promise.resolve(response.body);\n } catch (error) {\n throw normalizeToError(error);\n } finally {\n connector.abortController = undefined;\n }\n }\n\n /**\n * Lists all nodes (folders and objects) in the specified folder path.\n */\n listNodes(connector: ConnectorInterface, options: ListNodesOptions): Promise<ListNodesResult> {\n const fileStoreFolderPaths = fileStoreFolderPathData as FileStoreFolderPaths;\n const folderNodes = fileStoreFolderPaths[options.folderPath] ?? [];\n const connectionNodeConfigs: ConnectionNodeConfig[] = [];\n for (const folderNode of folderNodes) {\n if (folderNode.typeId === 'folder') {\n connectionNodeConfigs.push(constructFolderNodeConfig(options.folderPath, folderNode.name, folderNode.childCount));\n } else {\n connectionNodeConfigs.push(constructObjectNodeConfig(options.folderPath, folderNode.id, folderNode.name, folderNode.lastModifiedAt, folderNode.size));\n }\n }\n return Promise.resolve({ cursor: undefined, isMore: false, connectionNodeConfigs, totalCount: connectionNodeConfigs.length });\n }\n\n /**\n * Preview the contents of the object node with the specified path.\n */\n async previewObject(connector: ConnectorInterface, options: PreviewObjectOptions): Promise<DataViewPreviewConfig> {\n // Create an abort controller and extract its signal.\n const { signal } = (connector.abortController = new AbortController());\n\n try {\n const asAt = Date.now();\n const startedAt = performance.now();\n\n const fileOperatorsTool = await loadTool<FileOperatorsTool>(connector.toolConfigs, 'file-operators');\n const previewConfig = await fileOperatorsTool.previewFile(`${URL_PREFIX}/fileStore${options.path}`, signal, options.chunkSize);\n\n if (previewConfig.dataFormatId == null) throw new Error('Connector unable to process files of this type.');\n if (previewConfig.text == null) {\n throw new Error('File is empty.');\n }\n\n const csvParseTool = await loadTool<CSVParseTool>(connector.toolConfigs, 'csv-parse');\n const delimiters: ValueDelimiterId[] = [':', ',', '!', '0x1E', ';', ' ', '\\t', '_', '0x1F', '|'];\n const schemaConfig = await csvParseTool.determineSchemaConfig(previewConfig.text, delimiters);\n\n const duration = performance.now() - startedAt;\n return {\n asAt,\n columnConfigs: [],\n dataFormatId: previewConfig.dataFormatId,\n duration,\n encodingId: previewConfig.encodingId,\n encodingConfidenceLevel: previewConfig.encodingConfidenceLevel,\n fileType: previewConfig.fileTypeConfig,\n hasHeaders: undefined,\n recordDelimiterId: schemaConfig.recordDelimiterId,\n records: [],\n size: previewConfig.bytes.length,\n text: previewConfig.text,\n valueDelimiterId: schemaConfig.valueDelimiterId\n };\n } catch (error) {\n throw normalizeToError(error);\n } finally {\n connector.abortController = undefined;\n }\n }\n /**\n * Retrieves all records from a CSV object node using streaming and chunked processing.\n */\n async retrieveRecords(\n connector: ConnectorInterface,\n options: RetrieveRecordsOptions,\n chunk: (records: (string[] | Record<string, unknown>)[]) => void,\n complete: (result: RetrieveRecordsSummary) => void\n ): Promise<void> {\n connector.abortController = new AbortController();\n\n try {\n const csvParseTool = await loadTool<CSVParseTool>(connector.toolConfigs, 'csv-parse');\n const parseStreamOptions = { delimiter: options.valueDelimiterId, info: true, relax_column_count: true, relax_quotes: true };\n const url = `${URL_PREFIX}/fileStore${options.path}`;\n const summary = await csvParseTool.parseStream(options, parseStreamOptions, url, connector.abortController, chunk);\n complete(summary);\n } catch (error) {\n throw normalizeToError(error);\n } finally {\n connector.abortController = undefined;\n }\n }\n\n //#endregion ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n}\n\n//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n//#region: Helpers.\n\n/**\n * Construct folder node configuration.\n */\nfunction constructFolderNodeConfig(folderPath: string, name: string, childCount: number): ConnectionNodeConfig {\n return { id: nanoid(), childCount, extension: undefined, folderPath, label: name, name, typeId: 'folder' };\n}\n\n/**\n * Construct object (file) node configuration.\n */\nfunction constructObjectNodeConfig(folderPath: string, id: string, fullName: string, lastModifiedAt: number, size: number): ConnectionNodeConfig {\n const name = extractNameFromPath(fullName) ?? '';\n const extension = extractExtensionFromPath(fullName);\n const lastModifiedAtTimestamp = lastModifiedAt;\n const mimeType = lookupMimeTypeForExtension(extension);\n return { id, extension, folderPath, label: fullName, lastModifiedAt: lastModifiedAtTimestamp, mimeType, name, size, typeId: 'object' };\n}\n\n//#endregion ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n// Exports.\nexport { Connector };\n"],"names":["urlAlphabet","nanoid","size","id","bytes","scopedUrlAlphabet","i","o","t","r","c","a","n","E","y","b","s","d","l","m","rustBindingsPromise","addNumbersWithRust","left","right","add_my_numbers","loadRustBindings","yyyy","checksumWithRust","input","checksum_from_rust","URL_PREFIX","Connector","toolConfigs","config","connector","options","fileStoreFolderPaths","fileStoreFolderPathData","folderPath","folderPathNode","signal","response","buildFetchError","OperationalError","xxx","sum","error","normalizeToError","folderNodes","connectionNodeConfigs","folderNode","constructFolderNodeConfig","constructObjectNodeConfig","asAt","startedAt","previewConfig","loadTool","csvParseTool","delimiters","schemaConfig","duration","chunk","complete","parseStreamOptions","url","summary","name","childCount","fullName","lastModifiedAt","extractNameFromPath","extension","extractExtensionFromPath","lastModifiedAtTimestamp","mimeType","lookupMimeTypeForExtension"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]}
@@ -1,27 +1,37 @@
1
1
  import { DataViewPreviewConfig } from '@datapos/datapos-shared';
2
2
  import { ConnectorConfig, ConnectorInterface, FindObjectFolderPathOptions, GetReadableStreamOptions, ListNodesOptions, ListNodesResult, PreviewObjectOptions, RetrieveRecordsOptions, RetrieveRecordsSummary } from '@datapos/datapos-shared/component/connector';
3
3
  import { ToolConfig } from '@datapos/datapos-shared/component/tool';
4
- /** File store emulator connector. */
4
+ /**
5
+ * File store emulator connector.
6
+ */
5
7
  declare class Connector implements ConnectorInterface {
6
8
  abortController: AbortController | undefined;
7
9
  readonly config: ConnectorConfig;
8
10
  readonly toolConfigs: ToolConfig[];
9
11
  constructor(toolConfigs: ToolConfig[]);
10
- /** Abort the currently running operation. */
12
+ /**
13
+ * Abort the currently running operation.
14
+ */
11
15
  abortOperation(connector: ConnectorInterface): void;
12
- /** Find the folder path containing the specified object node. */
16
+ /**
17
+ * Find the folder path containing the specified object node.
18
+ */
13
19
  findObjectFolderPath(connector: ConnectorInterface, options: FindObjectFolderPathOptions): Promise<string | null>;
14
- /** Get a readable stream for the specified object node path. */
20
+ /**
21
+ * Get a readable stream for the specified object node path.
22
+ */
15
23
  getReadableStream(connector: ConnectorInterface, options: GetReadableStreamOptions): Promise<ReadableStream<Uint8Array>>;
16
- /** Lists all nodes (folders and objects) in the specified folder path. */
24
+ /**
25
+ * Lists all nodes (folders and objects) in the specified folder path.
26
+ */
17
27
  listNodes(connector: ConnectorInterface, options: ListNodesOptions): Promise<ListNodesResult>;
18
- /** Preview the contents of the object node with the specified path. */
28
+ /**
29
+ * Preview the contents of the object node with the specified path.
30
+ */
19
31
  previewObject(connector: ConnectorInterface, options: PreviewObjectOptions): Promise<DataViewPreviewConfig>;
20
- /** Retrieves all records from a CSV object node using streaming and chunked processing. */
32
+ /**
33
+ * Retrieves all records from a CSV object node using streaming and chunked processing.
34
+ */
21
35
  retrieveRecords(connector: ConnectorInterface, options: RetrieveRecordsOptions, chunk: (records: (string[] | Record<string, unknown>)[]) => void, complete: (result: RetrieveRecordsSummary) => void): Promise<void>;
22
- /** Construct folder node configuration. */
23
- private constructFolderNodeConfig;
24
- /** Construct object (file) node configuration. */
25
- private constructObjectNodeConfig;
26
36
  }
27
37
  export { Connector };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "datapos-connector-file-store-emulator",
3
- "version": "0.2.390",
3
+ "version": "0.2.392",
4
4
  "license": "MIT",
5
5
  "author": "Jonathan Terrell <terrell.jm@gmail.com>",
6
6
  "private": false,
@@ -26,13 +26,13 @@
26
26
  ],
27
27
  "prettier": "@datapos/datapos-development/prettierrc",
28
28
  "dependencies": {
29
- "@datapos/datapos-shared": "^0.3.434",
29
+ "@datapos/datapos-shared": "^0.3.436",
30
30
  "nanoid": "^5.1.6"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@datapos/datapos-development": "^0.3.438",
34
- "@datapos/datapos-tool-csv-parse": "^0.0.62",
35
- "@datapos/datapos-tool-file-operators": "^0.0.10",
34
+ "@datapos/datapos-tool-csv-parse": "^0.0.72",
35
+ "@datapos/datapos-tool-file-operators": "^0.0.13",
36
36
  "@datapos/eslint-config-datapos": "^1.0.35",
37
37
  "@types/node": "^25.0.3",
38
38
  "@typescript-eslint/eslint-plugin": "^8.51.0",