@devoplus/one-sdk 0.0.0-stage → 0.2.0-next.112

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 (139) hide show
  1. package/CHANGELOG.md +268 -0
  2. package/README.md +894 -2
  3. package/bin/accessRequest.d.mts +96 -0
  4. package/bin/accessRequest.mjs +340 -0
  5. package/bin/appOps.d.mts +97 -0
  6. package/bin/appOps.mjs +336 -0
  7. package/bin/dataCommand.mjs +131 -0
  8. package/bin/devConfig.mjs +132 -0
  9. package/bin/one.mjs +341 -0
  10. package/bin/session.mjs +239 -0
  11. package/dist/agentInput.d.ts +9 -0
  12. package/dist/agentInput.d.ts.map +1 -0
  13. package/dist/agentInput.js +102 -0
  14. package/dist/agentInput.js.map +1 -0
  15. package/dist/agentTools.d.ts +83 -0
  16. package/dist/agentTools.d.ts.map +1 -0
  17. package/dist/agentTools.js +164 -0
  18. package/dist/agentTools.js.map +1 -0
  19. package/dist/ai.d.ts +67 -0
  20. package/dist/ai.d.ts.map +1 -0
  21. package/dist/ai.js +129 -0
  22. package/dist/ai.js.map +1 -0
  23. package/dist/audit.d.ts +21 -0
  24. package/dist/audit.d.ts.map +1 -0
  25. package/dist/audit.js +58 -0
  26. package/dist/audit.js.map +1 -0
  27. package/dist/backend.d.ts +27 -0
  28. package/dist/backend.d.ts.map +1 -0
  29. package/dist/backend.js +63 -0
  30. package/dist/backend.js.map +1 -0
  31. package/dist/cache.d.ts +20 -0
  32. package/dist/cache.d.ts.map +1 -0
  33. package/dist/cache.js +84 -0
  34. package/dist/cache.js.map +1 -0
  35. package/dist/client.d.ts +147 -0
  36. package/dist/client.d.ts.map +1 -0
  37. package/dist/client.js +469 -0
  38. package/dist/client.js.map +1 -0
  39. package/dist/components.d.ts +235 -0
  40. package/dist/components.d.ts.map +1 -0
  41. package/dist/components.js +1491 -0
  42. package/dist/components.js.map +1 -0
  43. package/dist/context.d.ts +110 -0
  44. package/dist/context.d.ts.map +1 -0
  45. package/dist/context.js +126 -0
  46. package/dist/context.js.map +1 -0
  47. package/dist/data/crud.d.ts +74 -0
  48. package/dist/data/crud.d.ts.map +1 -0
  49. package/dist/data/crud.js +614 -0
  50. package/dist/data/crud.js.map +1 -0
  51. package/dist/data/ddl.d.ts +76 -0
  52. package/dist/data/ddl.d.ts.map +1 -0
  53. package/dist/data/ddl.js +362 -0
  54. package/dist/data/ddl.js.map +1 -0
  55. package/dist/data/fold.d.ts +14 -0
  56. package/dist/data/fold.d.ts.map +1 -0
  57. package/dist/data/fold.js +76 -0
  58. package/dist/data/fold.js.map +1 -0
  59. package/dist/data/model.d.ts +113 -0
  60. package/dist/data/model.d.ts.map +1 -0
  61. package/dist/data/model.js +408 -0
  62. package/dist/data/model.js.map +1 -0
  63. package/dist/data/values.d.ts +29 -0
  64. package/dist/data/values.d.ts.map +1 -0
  65. package/dist/data/values.js +152 -0
  66. package/dist/data/values.js.map +1 -0
  67. package/dist/dexa.d.ts +44 -0
  68. package/dist/dexa.d.ts.map +1 -0
  69. package/dist/dexa.js +74 -0
  70. package/dist/dexa.js.map +1 -0
  71. package/dist/dexaCommand.d.ts +116 -0
  72. package/dist/dexaCommand.d.ts.map +1 -0
  73. package/dist/dexaCommand.js +226 -0
  74. package/dist/dexaCommand.js.map +1 -0
  75. package/dist/export/columns.d.ts +62 -0
  76. package/dist/export/columns.d.ts.map +1 -0
  77. package/dist/export/columns.js +127 -0
  78. package/dist/export/columns.js.map +1 -0
  79. package/dist/export/csv.d.ts +10 -0
  80. package/dist/export/csv.d.ts.map +1 -0
  81. package/dist/export/csv.js +30 -0
  82. package/dist/export/csv.js.map +1 -0
  83. package/dist/export/report.d.ts +19 -0
  84. package/dist/export/report.d.ts.map +1 -0
  85. package/dist/export/report.js +91 -0
  86. package/dist/export/report.js.map +1 -0
  87. package/dist/export/response.d.ts +14 -0
  88. package/dist/export/response.d.ts.map +1 -0
  89. package/dist/export/response.js +70 -0
  90. package/dist/export/response.js.map +1 -0
  91. package/dist/export/xlsx.d.ts +15 -0
  92. package/dist/export/xlsx.d.ts.map +1 -0
  93. package/dist/export/xlsx.js +167 -0
  94. package/dist/export/xlsx.js.map +1 -0
  95. package/dist/export/zip.d.ts +7 -0
  96. package/dist/export/zip.d.ts.map +1 -0
  97. package/dist/export/zip.js +83 -0
  98. package/dist/export/zip.js.map +1 -0
  99. package/dist/files.d.ts +52 -0
  100. package/dist/files.d.ts.map +1 -0
  101. package/dist/files.js +137 -0
  102. package/dist/files.js.map +1 -0
  103. package/dist/index.d.ts +31 -0
  104. package/dist/index.d.ts.map +1 -0
  105. package/dist/index.js +35 -0
  106. package/dist/index.js.map +1 -0
  107. package/dist/jobs.d.ts +57 -0
  108. package/dist/jobs.d.ts.map +1 -0
  109. package/dist/jobs.js +157 -0
  110. package/dist/jobs.js.map +1 -0
  111. package/dist/log.d.ts +22 -0
  112. package/dist/log.d.ts.map +1 -0
  113. package/dist/log.js +107 -0
  114. package/dist/log.js.map +1 -0
  115. package/dist/notify.d.ts +41 -0
  116. package/dist/notify.d.ts.map +1 -0
  117. package/dist/notify.js +11 -0
  118. package/dist/notify.js.map +1 -0
  119. package/dist/org.d.ts +184 -0
  120. package/dist/org.d.ts.map +1 -0
  121. package/dist/org.js +114 -0
  122. package/dist/org.js.map +1 -0
  123. package/dist/people.d.ts +39 -0
  124. package/dist/people.d.ts.map +1 -0
  125. package/dist/people.js +88 -0
  126. package/dist/people.js.map +1 -0
  127. package/dist/problem.d.ts +12 -0
  128. package/dist/problem.d.ts.map +1 -0
  129. package/dist/problem.js +33 -0
  130. package/dist/problem.js.map +1 -0
  131. package/dist/runtime.d.ts +92 -0
  132. package/dist/runtime.d.ts.map +1 -0
  133. package/dist/runtime.js +8 -0
  134. package/dist/runtime.js.map +1 -0
  135. package/dist/scenarios.d.ts +125 -0
  136. package/dist/scenarios.d.ts.map +1 -0
  137. package/dist/scenarios.js +251 -0
  138. package/dist/scenarios.js.map +1 -0
  139. package/package.json +55 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/export/report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export type ExportFormat = 'csv' | 'xlsx' | 'html';
2
+ export declare const EXPORT_DOWNLOAD_MAX_BYTES: number;
3
+ /** Dosya adını tek parçaya indirger (yol ayırıcısı, denetim karakteri, tırnak yok) ve uzantıyı ekler. */
4
+ export declare function exportFileName(raw: string, format: ExportFormat): string;
5
+ /** `attachment; filename="<ASCII yedek>"; filename*=UTF-8''<yüzde kodlu>` (RFC 6266 §4.3). */
6
+ export declare function contentDisposition(fileName: string): string;
7
+ /** `Content-Disposition` değerinden dosya adı (`filename*` öncelikli); bulunamazsa `null`. */
8
+ export declare function downloadFileName(header: string | null): string | null;
9
+ /** Dışa aktarılan içeriği indirme yanıtına çevirir. */
10
+ export declare function exportResponse(content: string | Uint8Array, options: {
11
+ fileName: string;
12
+ format: ExportFormat;
13
+ }): Response;
14
+ //# sourceMappingURL=response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/export/response.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAA;AAElD,eAAO,MAAM,yBAAyB,QAAqB,CAAA;AAU3D,yGAAyG;AACzG,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CASxE;AAOD,8FAA8F;AAC9F,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED,8FAA8F;AAC9F,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAYrE;AAED,uDAAuD;AACvD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,OAAO,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GAAG,QAAQ,CAe1H"}
@@ -0,0 +1,70 @@
1
+ // İndirme yanıtı (D-85): doğru içerik türü + RFC 6266 `Content-Disposition` (Türkçe dosya adı `filename*` ile).
2
+ //
3
+ // Uygulama arayüzü dosyayı belirteçli istekle alır ve Portal'a `one.download({ name, mime, data })` ile verir (iframe'de
4
+ // indirme kapalıdır, D-76 U6). Dosya adı yanıt başlığından okunabilir (`downloadFileName`); `one.download` en çok
5
+ // 25 MB kabul eder — `EXPORT_DOWNLOAD_MAX_BYTES` aşılırsa yanıt üretilmez (`ONE-SDK-E-121`).
6
+ import { DOWNLOAD_MAX_BYTES } from '../client.js';
7
+ import { OneError } from '../context.js';
8
+ import { XLSX_CONTENT_TYPE } from './xlsx.js';
9
+ export const EXPORT_DOWNLOAD_MAX_BYTES = DOWNLOAD_MAX_BYTES;
10
+ const CONTENT_TYPES = {
11
+ csv: 'text/csv; charset=utf-8',
12
+ xlsx: XLSX_CONTENT_TYPE,
13
+ html: 'text/html; charset=utf-8',
14
+ };
15
+ const TR_ASCII = { ç: 'c', Ç: 'C', ğ: 'g', Ğ: 'G', ı: 'i', İ: 'I', ö: 'o', Ö: 'O', ş: 's', Ş: 'S', ü: 'u', Ü: 'U' };
16
+ /** Dosya adını tek parçaya indirger (yol ayırıcısı, denetim karakteri, tırnak yok) ve uzantıyı ekler. */
17
+ export function exportFileName(raw, format) {
18
+ // eslint-disable-next-line no-control-regex
19
+ let base = raw.replace(/[\u0000-\u001f\u007f"\\/:*?<>|]+/g, ' ').replace(/\s+/g, ' ').trim();
20
+ const ext = `.${format}`;
21
+ if (base.toLowerCase().endsWith(ext))
22
+ base = base.slice(0, -ext.length);
23
+ // Baştaki/sondaki nokta ve boşluk atılır (gizli dosya ya da yalnız ".." adı olmasın).
24
+ base = base.replace(/^[.\s]+/, '').replace(/[.\s]+$/, '');
25
+ base = [...base].slice(0, 120).join('');
26
+ return `${base || 'rapor'}${ext}`;
27
+ }
28
+ /** RFC 5987 attr-char dışı her bayt yüzde kodlanır (encodeURIComponent'in bıraktığı `'()*!` dahil). */
29
+ function encodeRfc5987(text) {
30
+ return encodeURIComponent(text).replace(/['()*!]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);
31
+ }
32
+ /** `attachment; filename="<ASCII yedek>"; filename*=UTF-8''<yüzde kodlu>` (RFC 6266 §4.3). */
33
+ export function contentDisposition(fileName) {
34
+ const ascii = [...fileName].map((ch) => TR_ASCII[ch] ?? (/[ -~]/.test(ch) && ch !== '"' && ch !== '\\' && ch !== '%' ? ch : '_')).join('');
35
+ return `attachment; filename="${ascii}"; filename*=UTF-8''${encodeRfc5987(fileName)}`;
36
+ }
37
+ /** `Content-Disposition` değerinden dosya adı (`filename*` öncelikli); bulunamazsa `null`. */
38
+ export function downloadFileName(header) {
39
+ if (!header)
40
+ return null;
41
+ const star = /filename\*\s*=\s*UTF-8''([^;]+)/i.exec(header);
42
+ if (star) {
43
+ try {
44
+ return decodeURIComponent(star[1].trim());
45
+ }
46
+ catch {
47
+ // yedeğe düş
48
+ }
49
+ }
50
+ const plain = /filename\s*=\s*"([^"]*)"/i.exec(header) ?? /filename\s*=\s*([^;]+)/i.exec(header);
51
+ return plain ? plain[1].trim() : null;
52
+ }
53
+ /** Dışa aktarılan içeriği indirme yanıtına çevirir. */
54
+ export function exportResponse(content, options) {
55
+ const bytes = typeof content === 'string' ? new TextEncoder().encode(content) : content;
56
+ if (bytes.byteLength > EXPORT_DOWNLOAD_MAX_BYTES)
57
+ throw new OneError(400, 'ONE-SDK-E-121', `Dosya ${Math.round(EXPORT_DOWNLOAD_MAX_BYTES / 1024 / 1024)} MB indirme sınırını aşıyor; süzgeci daraltın.`);
58
+ const name = exportFileName(options.fileName, options.format);
59
+ return new Response(bytes, {
60
+ status: 200,
61
+ headers: {
62
+ 'content-type': CONTENT_TYPES[options.format],
63
+ 'content-disposition': contentDisposition(name),
64
+ 'content-length': String(bytes.byteLength),
65
+ 'cache-control': 'no-store',
66
+ 'x-content-type-options': 'nosniff',
67
+ },
68
+ });
69
+ }
70
+ //# sourceMappingURL=response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/export/response.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type ExportColumn, type ExportOptions, type ExportRow } from './columns.ts';
2
+ export interface XlsxOptions extends ExportOptions {
3
+ /** Sayfa adı (en çok 31 karakter; `[]:*?/\` atılır). Varsayılan "Rapor" / "Report". */
4
+ sheetName?: string;
5
+ }
6
+ export declare const XLSX_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
7
+ export declare function xmlEscape(text: string): string;
8
+ /** 0 → A, 25 → Z, 26 → AA … */
9
+ export declare function columnLetter(index: number): string;
10
+ /** Takvim günü → Excel seri günü (1900 tarih sistemi; 1899-12-30 sıfır noktası, 1900-03-01 sonrası için doğru). */
11
+ export declare function excelSerial(y: number, mo: number, d: number, h?: number, mi?: number, s?: number): number;
12
+ export declare function sanitizeSheetName(raw: string | undefined, lang: 'tr' | 'en'): string;
13
+ /** Satırları XLSX dosyasına (bayt dizisi) çevirir; `exportResponse(bytes, { format: 'xlsx', … })` ile indirilebilir. */
14
+ export declare function toXlsx(rows: readonly ExportRow[], columns: readonly ExportColumn[], options?: XlsxOptions): Uint8Array;
15
+ //# sourceMappingURL=xlsx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xlsx.d.ts","sourceRoot":"","sources":["../../src/export/xlsx.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAoF,MAAM,cAAc,CAAA;AAGtK,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,uFAAuF;IACvF,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,eAAO,MAAM,iBAAiB,sEAAsE,CAAA;AAMpG,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,+BAA+B;AAC/B,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CASlD;AAED,mHAAmH;AACnH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,SAAI,EAAE,EAAE,SAAI,EAAE,CAAC,SAAI,GAAG,MAAM,CAG1F;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,CAIpF;AAuCD,wHAAwH;AACxH,wBAAgB,MAAM,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,EAAE,OAAO,EAAE,SAAS,YAAY,EAAE,EAAE,OAAO,GAAE,WAAgB,GAAG,UAAU,CAuF1H"}
@@ -0,0 +1,167 @@
1
+ // XLSX dışa aktarma (D-85) — bağımlılıksız: SpreadsheetML (Office Open XML) parçaları sıkıştırmasız ZIP'e konur.
2
+ //
3
+ // Dosya en küçük geçerli yapıyı taşır: [Content_Types].xml · _rels/.rels · xl/workbook.xml · xl/_rels/workbook.xml.rels ·
4
+ // xl/styles.xml · xl/worksheets/sheet1.xml. Metin hücreleri `inlineStr`'dir (paylaşılan dizi tablosu yok); sayı, para,
5
+ // tarih ve tarih-saat hücreleri SAYI olarak yazılır ve biçim kodu alır — Excel'de toplanabilir, sıralanabilir kalırlar.
6
+ // para → sayı (kuruş / 100) + "#,##0.00"
7
+ // tarih → Excel seri günü + "dd.mm.yyyy" (en: "yyyy-mm-dd")
8
+ // tarih-saat → seçilen saat dilimindeki (varsayılan Europe/Istanbul) seri değer + "dd.mm.yyyy hh:mm"
9
+ // evet/hayır → mantıksal hücre (Excel kendi dilinde DOĞRU/YANLIŞ gösterir)
10
+ // Metin hücresi asla formül olarak yorumlanmaz (inlineStr). XML'e giremeyen denetim karakterleri atılır; Excel'in hücre
11
+ // sınırını (32.767 karakter) aşan metin kırpılır.
12
+ import { checkExportInput, formatCell, localize, moneyMinorOf, resolveOptions, zonedParts } from './columns.js';
13
+ import { zipStore } from './zip.js';
14
+ export const XLSX_CONTENT_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
15
+ const CELL_TEXT_MAX = 32_767;
16
+ // eslint-disable-next-line no-control-regex
17
+ const XML_INVALID = /[\u0000-\u0008\u000b\u000c\u000e-\u001f￾￿]|[\ud800-\udbff](?![\udc00-\udfff])|(?<![\ud800-\udbff])[\udc00-\udfff]/g;
18
+ export function xmlEscape(text) {
19
+ return text.replace(XML_INVALID, '').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
20
+ }
21
+ /** 0 → A, 25 → Z, 26 → AA … */
22
+ export function columnLetter(index) {
23
+ let n = index + 1;
24
+ let out = '';
25
+ while (n > 0) {
26
+ const r = (n - 1) % 26;
27
+ out = String.fromCharCode(65 + r) + out;
28
+ n = Math.floor((n - 1) / 26);
29
+ }
30
+ return out;
31
+ }
32
+ /** Takvim günü → Excel seri günü (1900 tarih sistemi; 1899-12-30 sıfır noktası, 1900-03-01 sonrası için doğru). */
33
+ export function excelSerial(y, mo, d, h = 0, mi = 0, s = 0) {
34
+ const days = (Date.UTC(y, mo - 1, d) - Date.UTC(1899, 11, 30)) / 86_400_000;
35
+ return days + (h * 3600 + mi * 60 + s) / 86_400;
36
+ }
37
+ export function sanitizeSheetName(raw, lang) {
38
+ const cleaned = (raw ?? '').replace(/[[\]:*?/\\]/g, ' ').replace(XML_INVALID, '').trim().replace(/^'+|'+$/g, '');
39
+ const name = [...cleaned].slice(0, 31).join('').trim();
40
+ return name || (lang === 'tr' ? 'Rapor' : 'Report');
41
+ }
42
+ // Stil dizinleri (styles.xml cellXfs sırası).
43
+ const S_HEADER = 1;
44
+ const S_DATE = 2;
45
+ const S_DATETIME = 3;
46
+ const S_MONEY = 4;
47
+ function stylesXml(lang) {
48
+ const date = lang === 'tr' ? 'dd.mm.yyyy' : 'yyyy-mm-dd';
49
+ return ('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n' +
50
+ '<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">' +
51
+ `<numFmts count="3"><numFmt numFmtId="164" formatCode="${date}"/><numFmt numFmtId="165" formatCode="${date} hh:mm"/>` +
52
+ '<numFmt numFmtId="166" formatCode="#,##0.00"/></numFmts>' +
53
+ '<fonts count="2"><font><sz val="11"/><name val="Calibri"/><family val="2"/></font><font><b/><sz val="11"/><name val="Calibri"/><family val="2"/></font></fonts>' +
54
+ '<fills count="2"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill></fills>' +
55
+ '<borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders>' +
56
+ '<cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs>' +
57
+ '<cellXfs count="5">' +
58
+ '<xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/>' +
59
+ '<xf numFmtId="0" fontId="1" fillId="0" borderId="0" xfId="0" applyFont="1"/>' +
60
+ '<xf numFmtId="164" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/>' +
61
+ '<xf numFmtId="165" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/>' +
62
+ '<xf numFmtId="166" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/>' +
63
+ '</cellXfs><cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles>' +
64
+ '</styleSheet>');
65
+ }
66
+ function textCell(ref, text, style = 0) {
67
+ const clipped = text.length > CELL_TEXT_MAX ? text.slice(0, CELL_TEXT_MAX) : text;
68
+ return `<c r="${ref}" t="inlineStr"${style ? ` s="${style}"` : ''}><is><t xml:space="preserve">${xmlEscape(clipped)}</t></is></c>`;
69
+ }
70
+ function numberCell(ref, n, style = 0) {
71
+ return `<c r="${ref}"${style ? ` s="${style}"` : ''}><v>${String(n)}</v></c>`;
72
+ }
73
+ /** Satırları XLSX dosyasına (bayt dizisi) çevirir; `exportResponse(bytes, { format: 'xlsx', … })` ile indirilebilir. */
74
+ export function toXlsx(rows, columns, options = {}) {
75
+ checkExportInput(rows, columns);
76
+ const resolved = resolveOptions(options);
77
+ const sheetName = sanitizeSheetName(options.sheetName, resolved.lang);
78
+ const widths = columns.map((c) => Math.max(8, [...localize(c.title, resolved.lang)].length + 2));
79
+ const xmlRows = [];
80
+ xmlRows.push(`<row r="1">${columns.map((c, i) => textCell(`${columnLetter(i)}1`, localize(c.title, resolved.lang), S_HEADER)).join('')}</row>`);
81
+ rows.forEach((row, ri) => {
82
+ const r = ri + 2;
83
+ const cells = [];
84
+ columns.forEach((c, ci) => {
85
+ const ref = `${columnLetter(ci)}${r}`;
86
+ const value = row?.[c.key];
87
+ if (value === null || value === undefined || value === '')
88
+ return;
89
+ const type = c.type ?? 'text';
90
+ let xml = null;
91
+ if (type === 'number' && typeof value === 'number' && Number.isFinite(value))
92
+ xml = numberCell(ref, value);
93
+ else if (type === 'money') {
94
+ const minor = moneyMinorOf(value);
95
+ if (minor !== null)
96
+ xml = numberCell(ref, minor / 100, S_MONEY);
97
+ }
98
+ else if (type === 'date' && typeof value === 'string') {
99
+ const m = /^(\d{4})-(\d{2})-(\d{2})$/.exec(value);
100
+ if (m)
101
+ xml = numberCell(ref, excelSerial(Number(m[1]), Number(m[2]), Number(m[3])), S_DATE);
102
+ }
103
+ else if (type === 'datetime' && typeof value === 'string') {
104
+ const p = zonedParts(value, resolved.timeZone);
105
+ if (p)
106
+ xml = numberCell(ref, excelSerial(p.y, p.mo, p.d, p.h, p.mi, p.s), S_DATETIME);
107
+ }
108
+ else if (type === 'boolean') {
109
+ xml = `<c r="${ref}" t="b"><v>${value === true || value === 1 || value === 'true' ? 1 : 0}</v></c>`;
110
+ }
111
+ if (xml === null) {
112
+ const text = formatCell(value, c, resolved);
113
+ xml = textCell(ref, text);
114
+ widths[ci] = Math.max(widths[ci], Math.min([...text].length + 2, 60));
115
+ }
116
+ else
117
+ widths[ci] = Math.max(widths[ci], type === 'datetime' ? 18 : type === 'date' ? 12 : 14);
118
+ cells.push(xml);
119
+ });
120
+ xmlRows.push(`<row r="${r}">${cells.join('')}</row>`);
121
+ });
122
+ const lastRef = `${columnLetter(columns.length - 1)}${rows.length + 1}`;
123
+ const cols = columns
124
+ .map((c, i) => {
125
+ const w = c.width !== undefined && Number.isFinite(c.width) ? Math.min(80, Math.max(4, c.width)) : Math.min(60, widths[i]);
126
+ return `<col min="${i + 1}" max="${i + 1}" width="${w}" customWidth="1"/>`;
127
+ })
128
+ .join('');
129
+ const sheet = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n' +
130
+ '<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">' +
131
+ `<dimension ref="A1:${lastRef}"/>` +
132
+ '<sheetViews><sheetView workbookViewId="0"><pane ySplit="1" topLeftCell="A2" activePane="bottomLeft" state="frozen"/></sheetView></sheetViews>' +
133
+ '<sheetFormatPr defaultRowHeight="15"/>' +
134
+ `<cols>${cols}</cols>` +
135
+ `<sheetData>${xmlRows.join('')}</sheetData>` +
136
+ '</worksheet>';
137
+ const workbook = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n' +
138
+ '<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">' +
139
+ `<sheets><sheet name="${xmlEscape(sheetName)}" sheetId="1" r:id="rId1"/></sheets></workbook>`;
140
+ const workbookRels = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n' +
141
+ '<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">' +
142
+ '<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/>' +
143
+ '<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/>' +
144
+ '</Relationships>';
145
+ const rootRels = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n' +
146
+ '<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">' +
147
+ '<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>' +
148
+ '</Relationships>';
149
+ const contentTypes = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n' +
150
+ '<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">' +
151
+ '<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>' +
152
+ '<Default Extension="xml" ContentType="application/xml"/>' +
153
+ '<Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/>' +
154
+ '<Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>' +
155
+ '<Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/>' +
156
+ '</Types>';
157
+ const enc = new TextEncoder();
158
+ return zipStore([
159
+ { name: '[Content_Types].xml', data: enc.encode(contentTypes) },
160
+ { name: '_rels/.rels', data: enc.encode(rootRels) },
161
+ { name: 'xl/workbook.xml', data: enc.encode(workbook) },
162
+ { name: 'xl/_rels/workbook.xml.rels', data: enc.encode(workbookRels) },
163
+ { name: 'xl/styles.xml', data: enc.encode(stylesXml(resolved.lang)) },
164
+ { name: 'xl/worksheets/sheet1.xml', data: enc.encode(sheet) },
165
+ ]);
166
+ }
167
+ //# sourceMappingURL=xlsx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xlsx.js","sourceRoot":"","sources":["../../src/export/xlsx.ts"],"names":[],"mappings":"AAAA,iHAAiH;AACjH,EAAE;AACF,0HAA0H;AAC1H,uHAAuH;AACvH,wHAAwH;AACxH,kDAAkD;AAClD,oEAAoE;AACpE,wGAAwG;AACxG,8EAA8E;AAC9E,wHAAwH;AACxH,kDAAkD;AAClD,OAAO,EAAyD,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACtK,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAOnC,MAAM,CAAC,MAAM,iBAAiB,GAAG,mEAAmE,CAAA;AACpG,MAAM,aAAa,GAAG,MAAM,CAAA;AAE5B,4CAA4C;AAC5C,MAAM,WAAW,GAAG,oHAAoH,CAAA;AAExI,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AACjI,CAAC;AAED,+BAA+B;AAC/B,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA;IACjB,IAAI,GAAG,GAAG,EAAE,CAAA;IACZ,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;QACtB,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;QACvC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;IAC9B,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,mHAAmH;AACnH,MAAM,UAAU,WAAW,CAAC,CAAS,EAAE,EAAU,EAAE,CAAS,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;IAChF,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,UAAU,CAAA;IAC3E,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAA;AACjD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAuB,EAAE,IAAiB;IAC1E,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;IAChH,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IACtD,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;AACrD,CAAC;AAED,8CAA8C;AAC9C,MAAM,QAAQ,GAAG,CAAC,CAAA;AAClB,MAAM,MAAM,GAAG,CAAC,CAAA;AAChB,MAAM,UAAU,GAAG,CAAC,CAAA;AACpB,MAAM,OAAO,GAAG,CAAC,CAAA;AAEjB,SAAS,SAAS,CAAC,IAAiB;IAClC,MAAM,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAA;IACxD,OAAO,CACL,2DAA2D;QAC3D,gFAAgF;QAChF,yDAAyD,IAAI,yCAAyC,IAAI,WAAW;QACrH,0DAA0D;QAC1D,iKAAiK;QACjK,0HAA0H;QAC1H,yFAAyF;QACzF,8FAA8F;QAC9F,qBAAqB;QACrB,gEAAgE;QAChE,8EAA8E;QAC9E,wFAAwF;QACxF,wFAAwF;QACxF,wFAAwF;QACxF,gGAAgG;QAChG,eAAe,CAChB,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW,EAAE,IAAY,EAAE,KAAK,GAAG,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACjF,OAAO,SAAS,GAAG,kBAAkB,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,gCAAgC,SAAS,CAAC,OAAO,CAAC,eAAe,CAAA;AACpI,CAAC;AAED,SAAS,UAAU,CAAC,GAAW,EAAE,CAAS,EAAE,KAAK,GAAG,CAAC;IACnD,OAAO,SAAS,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,MAAM,CAAC,CAAC,CAAC,UAAU,CAAA;AAC/E,CAAC;AAED,wHAAwH;AACxH,MAAM,UAAU,MAAM,CAAC,IAA0B,EAAE,OAAgC,EAAE,OAAO,GAAgB,EAAE;IAC5G,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC/B,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;IACxC,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;IACrE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;IAChG,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,OAAO,CAAC,IAAI,CAAC,cAAc,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAA;IAC/I,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE;QACvB,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAChB,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE;YACxB,MAAM,GAAG,GAAG,GAAG,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAA;YACrC,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YAC1B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;gBAAE,OAAM;YACjE,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,MAAM,CAAA;YAC7B,IAAI,GAAG,GAAkB,IAAI,CAAA;YAC7B,IAAI,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;iBACrG,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC1B,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;gBACjC,IAAI,KAAK,KAAK,IAAI;oBAAE,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,GAAG,GAAG,EAAE,OAAO,CAAC,CAAA;YACjE,CAAC;iBAAM,IAAI,IAAI,KAAK,MAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACxD,MAAM,CAAC,GAAG,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACjD,IAAI,CAAC;oBAAE,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;YAC7F,CAAC;iBAAM,IAAI,IAAI,KAAK,UAAU,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC5D,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;gBAC9C,IAAI,CAAC;oBAAE,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;YACvF,CAAC;iBAAM,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC9B,GAAG,GAAG,SAAS,GAAG,cAAc,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAA;YACrG,CAAC;YACD,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACjB,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAA;gBAC3C,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;gBACzB,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;YACxE,CAAC;;gBAAM,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAE,EAAE,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YAC/F,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACjB,CAAC,CAAC,CAAA;QACF,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAA;IACvD,CAAC,CAAC,CAAA;IACF,MAAM,OAAO,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAA;IACvE,MAAM,IAAI,GAAG,OAAO;SACjB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACZ,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAE,CAAC,CAAA;QAC3H,OAAO,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,qBAAqB,CAAA;IAC5E,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAA;IACX,MAAM,KAAK,GACT,2DAA2D;QAC3D,6JAA6J;QAC7J,sBAAsB,OAAO,KAAK;QAClC,+IAA+I;QAC/I,wCAAwC;QACxC,SAAS,IAAI,SAAS;QACtB,cAAc,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc;QAC5C,cAAc,CAAA;IAChB,MAAM,QAAQ,GACZ,2DAA2D;QAC3D,4JAA4J;QAC5J,wBAAwB,SAAS,CAAC,SAAS,CAAC,iDAAiD,CAAA;IAC/F,MAAM,YAAY,GAChB,2DAA2D;QAC3D,sFAAsF;QACtF,+IAA+I;QAC/I,iIAAiI;QACjI,kBAAkB,CAAA;IACpB,MAAM,QAAQ,GACZ,2DAA2D;QAC3D,sFAAsF;QACtF,8IAA8I;QAC9I,kBAAkB,CAAA;IACpB,MAAM,YAAY,GAChB,2DAA2D;QAC3D,8EAA8E;QAC9E,oGAAoG;QACpG,0DAA0D;QAC1D,kIAAkI;QAClI,0IAA0I;QAC1I,4HAA4H;QAC5H,UAAU,CAAA;IACZ,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAA;IAC7B,OAAO,QAAQ,CAAC;QACd,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE;QAC/D,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;QACnD,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;QACvD,EAAE,IAAI,EAAE,4BAA4B,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE;QACtE,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;QACrE,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;KAC9D,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare function crc32(data: Uint8Array): number;
2
+ export interface ZipFile {
3
+ name: string;
4
+ data: Uint8Array;
5
+ }
6
+ export declare function zipStore(files: readonly ZipFile[]): Uint8Array;
7
+ //# sourceMappingURL=zip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zip.d.ts","sourceRoot":"","sources":["../../src/export/zip.ts"],"names":[],"mappings":"AAaA,wBAAgB,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAI9C;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,UAAU,CAAA;CACjB;AAMD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,GAAG,UAAU,CA2D9D"}
@@ -0,0 +1,83 @@
1
+ // En küçük ZIP yazıcısı (D-85, XLSX için) — sıkıştırmasız (STORE) + CRC-32, bağımlılıksız ve belirlenimci (zaman damgası
2
+ // 1980-01-01 sabit: aynı girdi aynı baytları verir). 4 GB ve 65.535 dosya sınırının altında kalır (ZIP64 yok).
3
+ const CRC_TABLE = (() => {
4
+ const table = new Uint32Array(256);
5
+ for (let n = 0; n < 256; n++) {
6
+ let c = n;
7
+ for (let k = 0; k < 8; k++)
8
+ c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
9
+ table[n] = c >>> 0;
10
+ }
11
+ return table;
12
+ })();
13
+ export function crc32(data) {
14
+ let crc = 0xffffffff;
15
+ for (let i = 0; i < data.length; i++)
16
+ crc = CRC_TABLE[(crc ^ data[i]) & 0xff] ^ (crc >>> 8);
17
+ return (crc ^ 0xffffffff) >>> 0;
18
+ }
19
+ const DOS_TIME = 0;
20
+ const DOS_DATE = (0 << 9) | (1 << 5) | 1; // 1980-01-01
21
+ const UTF8_FLAG = 0x0800;
22
+ export function zipStore(files) {
23
+ const enc = new TextEncoder();
24
+ const entries = files.map((f) => ({ name: enc.encode(f.name), data: f.data, crc: crc32(f.data) }));
25
+ const localSize = entries.reduce((n, e) => n + 30 + e.name.length + e.data.length, 0);
26
+ const centralSize = entries.reduce((n, e) => n + 46 + e.name.length, 0);
27
+ const total = localSize + centralSize + 22;
28
+ if (total > 0xffffffff || entries.length > 0xffff)
29
+ throw new RangeError('ZIP boyutu ya da dosya sayısı sınırı aşıldı.');
30
+ const out = new Uint8Array(total);
31
+ const view = new DataView(out.buffer);
32
+ let p = 0;
33
+ const offsets = [];
34
+ for (const e of entries) {
35
+ offsets.push(p);
36
+ view.setUint32(p, 0x04034b50, true);
37
+ view.setUint16(p + 4, 20, true);
38
+ view.setUint16(p + 6, UTF8_FLAG, true);
39
+ view.setUint16(p + 8, 0, true);
40
+ view.setUint16(p + 10, DOS_TIME, true);
41
+ view.setUint16(p + 12, DOS_DATE, true);
42
+ view.setUint32(p + 14, e.crc, true);
43
+ view.setUint32(p + 18, e.data.length, true);
44
+ view.setUint32(p + 22, e.data.length, true);
45
+ view.setUint16(p + 26, e.name.length, true);
46
+ view.setUint16(p + 28, 0, true);
47
+ out.set(e.name, p + 30);
48
+ out.set(e.data, p + 30 + e.name.length);
49
+ p += 30 + e.name.length + e.data.length;
50
+ }
51
+ const centralStart = p;
52
+ entries.forEach((e, i) => {
53
+ view.setUint32(p, 0x02014b50, true);
54
+ view.setUint16(p + 4, 20, true);
55
+ view.setUint16(p + 6, 20, true);
56
+ view.setUint16(p + 8, UTF8_FLAG, true);
57
+ view.setUint16(p + 10, 0, true);
58
+ view.setUint16(p + 12, DOS_TIME, true);
59
+ view.setUint16(p + 14, DOS_DATE, true);
60
+ view.setUint32(p + 16, e.crc, true);
61
+ view.setUint32(p + 20, e.data.length, true);
62
+ view.setUint32(p + 24, e.data.length, true);
63
+ view.setUint16(p + 28, e.name.length, true);
64
+ view.setUint16(p + 30, 0, true);
65
+ view.setUint16(p + 32, 0, true);
66
+ view.setUint16(p + 34, 0, true);
67
+ view.setUint16(p + 36, 0, true);
68
+ view.setUint32(p + 38, 0, true);
69
+ view.setUint32(p + 42, offsets[i], true);
70
+ out.set(e.name, p + 46);
71
+ p += 46 + e.name.length;
72
+ });
73
+ view.setUint32(p, 0x06054b50, true);
74
+ view.setUint16(p + 4, 0, true);
75
+ view.setUint16(p + 6, 0, true);
76
+ view.setUint16(p + 8, entries.length, true);
77
+ view.setUint16(p + 10, entries.length, true);
78
+ view.setUint32(p + 12, p - centralStart, true);
79
+ view.setUint32(p + 16, centralStart, true);
80
+ view.setUint16(p + 20, 0, true);
81
+ return out;
82
+ }
83
+ //# sourceMappingURL=zip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zip.js","sourceRoot":"","sources":["../../src/export/zip.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { OneFilesBinding, OneStoredFileBody } from './runtime.ts';
2
+ export declare const FILES_BINDING = "FILES";
3
+ export declare const FILE_MAX_BYTES: number;
4
+ export declare const FILE_KEY_MAX_LENGTH = 512;
5
+ /** Dosya anahtarı üst sınırı (bayt, UTF-8) — depo sınırı (okundu 14.10.2026). */
6
+ export declare const FILE_KEY_MAX_BYTES = 1024;
7
+ export declare function normalizeFileKey(raw: string): string;
8
+ /** Kullanıcıdan gelen dosya ADINI tek parçaya indirger: yol ayırıcıları atılır, izinli karakter dışı "_" olur. */
9
+ export declare function sanitizeFileName(raw: string, maxLength?: number): string;
10
+ export type FileBody = ArrayBuffer | ArrayBufferView | string | Blob;
11
+ export interface PutFileOptions {
12
+ contentType?: string;
13
+ /** Üst sınır (bayt); varsayılan FILE_MAX_BYTES. Platform tavanını aşan değer tavana kırpılır. */
14
+ maxBytes?: number;
15
+ metadata?: Record<string, string>;
16
+ }
17
+ export interface FileInfo {
18
+ key: string;
19
+ size: number;
20
+ etag: string;
21
+ uploaded: Date;
22
+ contentType?: string;
23
+ }
24
+ export interface ListFilesOptions {
25
+ prefix?: string;
26
+ limit?: number;
27
+ cursor?: string;
28
+ }
29
+ export interface ListFilesResult {
30
+ files: FileInfo[];
31
+ truncated: boolean;
32
+ cursor?: string;
33
+ }
34
+ /** Yalnız `headers` + `body` okunur; `Request` yerine bu ikisini taşıyan her nesne geçer (testte sahte istek). */
35
+ export type BodySource = Pick<Request, 'headers' | 'body'>;
36
+ /**
37
+ * İstek gövdesini EN FAZLA `maxBytes` (platform tavanına kırpılır) okuyarak belleğe alır.
38
+ * `Content-Length` varsa tek bayt okunmadan sınanır; yoksa (parçalı aktarım) akış parça parça okunur ve sınır aşıldığı
39
+ * an okuma iptal edilip 413 üretilir. Sınır aşımı `put` ile AYNI kodu taşır (ONE-SDK-E-014) — istemci iki yolu ayırt
40
+ * etmek zorunda kalmaz.
41
+ */
42
+ export declare function readBoundedBody(source: BodySource, maxBytes: number): Promise<ArrayBuffer>;
43
+ export declare class OneFiles {
44
+ private readonly store;
45
+ constructor(store: OneFilesBinding);
46
+ put(key: string, body: FileBody, options?: PutFileOptions): Promise<FileInfo>;
47
+ get(key: string): Promise<OneStoredFileBody | null>;
48
+ head(key: string): Promise<FileInfo | null>;
49
+ delete(key: string): Promise<void>;
50
+ list(options?: ListFilesOptions): Promise<ListFilesResult>;
51
+ }
52
+ //# sourceMappingURL=files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAA0D,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAE9H,eAAO,MAAM,aAAa,UAAU,CAAA;AACpC,eAAO,MAAM,cAAc,QAAmB,CAAA;AAC9C,eAAO,MAAM,mBAAmB,MAAM,CAAA;AACtC,iFAAiF;AACjF,eAAO,MAAM,kBAAkB,OAAO,CAAA;AAEtC,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAWpD;AAED,kHAAkH;AAClH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,MAAM,CAKrE;AAED,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,eAAe,GAAG,MAAM,GAAG,IAAI,CAAA;AAEpE,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iGAAiG;IACjG,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,IAAI,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,kHAAkH;AAClH,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,MAAM,CAAC,CAAA;AAE1D;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA8BhG;AAeD,qBAAa,QAAQ;IACP,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAlC,YAA6B,KAAK,EAAE,eAAe,EAAI;IAEjD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAWtF;IAEK,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAExD;IAEK,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAGhD;IAEK,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvC;IAEK,IAAI,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CAQnE;CACF"}
package/dist/files.js ADDED
@@ -0,0 +1,137 @@
1
+ // Dosya servisi — kurulum başına dosya deposu (manifest `services.files` → binding `FILES`, kurulumda açılır).
2
+ // İzolasyon DEPO sınırındadır (D-17 ile aynı): anahtara PortalId eklenmez, başka kurulumun deposu görünmez.
3
+ // Anahtar kuralı: 1-512 karakter VE en çok 1.024 bayt (depo sınırı; UTF-8 ile ölçülür — `length` UTF-16 birimi sayar,
4
+ // 400 CJK karakteri 512'nin altında kalıp 1.200 bayt eder), baştaki "/" atılır, boş / "." / ".." parçası ve kontrol
5
+ // karakteri yok.
6
+ // Gövde boyutu `maxBytes` ile sınırlanır (varsayılan 25 MiB); `put` akış (ReadableStream) KABUL ETMEZ — boyutu
7
+ // doğrulanamayan gövde depoyu sınırsız doldurabilirdi. Bir HTTP isteğinin gövdesi `readBoundedBody` ile alınır:
8
+ // sınır okumadan ÖNCE (Content-Length) ve okuma SIRASINDA (parçalı akış) uygulanır; `request.arrayBuffer()` gövdenin
9
+ // tamamını belleğe aldıktan sonra sınamak uygulama belleğini taşırabilirdi.
10
+ import { OneError } from './context.js';
11
+ export const FILES_BINDING = 'FILES';
12
+ export const FILE_MAX_BYTES = 25 * 1024 * 1024;
13
+ export const FILE_KEY_MAX_LENGTH = 512;
14
+ /** Dosya anahtarı üst sınırı (bayt, UTF-8) — depo sınırı (okundu 14.10.2026). */
15
+ export const FILE_KEY_MAX_BYTES = 1024;
16
+ export function normalizeFileKey(raw) {
17
+ const key = raw.trim().replace(/^\/+/, '');
18
+ if (key.length === 0 || key.length > FILE_KEY_MAX_LENGTH)
19
+ throw new OneError(400, 'ONE-SDK-E-010', `Dosya anahtarı 1-${FILE_KEY_MAX_LENGTH} karakter olmalıdır.`);
20
+ if (new TextEncoder().encode(key).byteLength > FILE_KEY_MAX_BYTES)
21
+ throw new OneError(400, 'ONE-SDK-E-010', `Dosya anahtarı UTF-8 ile en çok ${FILE_KEY_MAX_BYTES} bayt olabilir.`);
22
+ if (key.split('/').some((part) => part === '' || part === '.' || part === '..'))
23
+ throw new OneError(400, 'ONE-SDK-E-011', 'Dosya anahtarında boş, "." ya da ".." parçası olamaz.');
24
+ // eslint-disable-next-line no-control-regex
25
+ if (/[\u0000-\u001f\u007f]/.test(key))
26
+ throw new OneError(400, 'ONE-SDK-E-012', 'Dosya anahtarı kontrol karakteri içeremez.');
27
+ return key;
28
+ }
29
+ /** Kullanıcıdan gelen dosya ADINI tek parçaya indirger: yol ayırıcıları atılır, izinli karakter dışı "_" olur. */
30
+ export function sanitizeFileName(raw, maxLength = 120) {
31
+ const base = raw.split(/[\\/]/).pop() ?? '';
32
+ const cleaned = base.trim().replace(/[^A-Za-z0-9._-]+/g, '_').replace(/^\.+/, '');
33
+ if (cleaned.length === 0)
34
+ throw new OneError(400, 'ONE-SDK-E-013', 'Dosya adı boş ya da geçersiz.');
35
+ return cleaned.slice(0, maxLength);
36
+ }
37
+ /**
38
+ * İstek gövdesini EN FAZLA `maxBytes` (platform tavanına kırpılır) okuyarak belleğe alır.
39
+ * `Content-Length` varsa tek bayt okunmadan sınanır; yoksa (parçalı aktarım) akış parça parça okunur ve sınır aşıldığı
40
+ * an okuma iptal edilip 413 üretilir. Sınır aşımı `put` ile AYNI kodu taşır (ONE-SDK-E-014) — istemci iki yolu ayırt
41
+ * etmek zorunda kalmaz.
42
+ */
43
+ export async function readBoundedBody(source, maxBytes) {
44
+ const limit = Math.min(maxBytes, FILE_MAX_BYTES);
45
+ const declared = source.headers.get('content-length');
46
+ if (declared !== null) {
47
+ const n = Number(declared);
48
+ if (!Number.isInteger(n) || n < 0)
49
+ throw new OneError(400, 'ONE-SDK-E-016', 'Content-Length başlığı geçersiz.');
50
+ if (n > limit)
51
+ throw new OneError(413, 'ONE-SDK-E-014', `Dosya ${limit} bayt sınırını aşıyor (${n}).`);
52
+ }
53
+ if (!source.body)
54
+ return new ArrayBuffer(0);
55
+ const reader = source.body.getReader();
56
+ const chunks = [];
57
+ let total = 0;
58
+ for (;;) {
59
+ const { done, value } = await reader.read();
60
+ if (done)
61
+ break;
62
+ total += value.byteLength;
63
+ if (total > limit) {
64
+ await reader.cancel().catch(() => undefined);
65
+ throw new OneError(413, 'ONE-SDK-E-014', `Dosya ${limit} bayt sınırını aşıyor.`);
66
+ }
67
+ chunks.push(value);
68
+ }
69
+ const out = new ArrayBuffer(total);
70
+ const view = new Uint8Array(out);
71
+ let offset = 0;
72
+ for (const chunk of chunks) {
73
+ view.set(chunk, offset);
74
+ offset += chunk.byteLength;
75
+ }
76
+ return out;
77
+ }
78
+ function bodySize(body) {
79
+ if (typeof body === 'string')
80
+ return new TextEncoder().encode(body).byteLength;
81
+ if (body instanceof Blob)
82
+ return body.size;
83
+ if (ArrayBuffer.isView(body))
84
+ return body.byteLength;
85
+ return body.byteLength;
86
+ }
87
+ function toInfo(o) {
88
+ const info = { key: o.key, size: o.size, etag: o.etag, uploaded: o.uploaded };
89
+ if (o.httpMetadata?.contentType)
90
+ info.contentType = o.httpMetadata.contentType;
91
+ return info;
92
+ }
93
+ export class OneFiles {
94
+ store;
95
+ constructor(store) {
96
+ this.store = store;
97
+ }
98
+ async put(key, body, options = {}) {
99
+ const k = normalizeFileKey(key);
100
+ const limit = Math.min(options.maxBytes ?? FILE_MAX_BYTES, FILE_MAX_BYTES);
101
+ const size = bodySize(body);
102
+ if (size > limit)
103
+ throw new OneError(413, 'ONE-SDK-E-014', `Dosya ${limit} bayt sınırını aşıyor (${size}).`);
104
+ const put = {};
105
+ if (options.contentType)
106
+ put.httpMetadata = { contentType: options.contentType };
107
+ if (options.metadata)
108
+ put.customMetadata = options.metadata;
109
+ const stored = await this.store.put(k, body, put);
110
+ if (!stored)
111
+ throw new OneError(500, 'ONE-SDK-E-015', 'Dosya yazılamadı.');
112
+ return toInfo(stored);
113
+ }
114
+ async get(key) {
115
+ return this.store.get(normalizeFileKey(key));
116
+ }
117
+ async head(key) {
118
+ const o = await this.store.head(normalizeFileKey(key));
119
+ return o ? toInfo(o) : null;
120
+ }
121
+ async delete(key) {
122
+ await this.store.delete(normalizeFileKey(key));
123
+ }
124
+ async list(options = {}) {
125
+ const listOptions = { limit: Math.min(Math.max(options.limit ?? 100, 1), 1000) };
126
+ if (options.prefix)
127
+ listOptions.prefix = options.prefix;
128
+ if (options.cursor)
129
+ listOptions.cursor = options.cursor;
130
+ const page = await this.store.list(listOptions);
131
+ const result = { files: page.objects.map(toInfo), truncated: page.truncated };
132
+ if (page.truncated)
133
+ result.cursor = page.cursor;
134
+ return result;
135
+ }
136
+ }
137
+ //# sourceMappingURL=files.js.map