@ketvietlab/ketjs 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +8 -2
- package/dist/agent/capabilities.d.ts +1 -3
- package/dist/agent/capabilities.d.ts.map +1 -1
- package/dist/agent/capabilities.js +10 -1
- package/dist/agent/capabilities.js.map +1 -1
- package/dist/agent/permissions.d.ts +43 -1
- package/dist/agent/permissions.d.ts.map +1 -1
- package/dist/agent/permissions.js +50 -2
- package/dist/agent/permissions.js.map +1 -1
- package/dist/cli.js +246 -97
- package/dist/cli.js.map +1 -1
- package/dist/codegen/dts.d.ts.map +1 -1
- package/dist/codegen/dts.js +1 -0
- package/dist/codegen/dts.js.map +1 -1
- package/dist/data/changeset.d.ts +12 -0
- package/dist/data/changeset.d.ts.map +1 -1
- package/dist/data/changeset.js +73 -17
- package/dist/data/changeset.js.map +1 -1
- package/dist/data/expr.d.ts +16 -0
- package/dist/data/expr.d.ts.map +1 -1
- package/dist/data/expr.js +33 -5
- package/dist/data/expr.js.map +1 -1
- package/dist/data/fleet.d.ts +41 -1
- package/dist/data/fleet.d.ts.map +1 -1
- package/dist/data/fleet.js +100 -11
- package/dist/data/fleet.js.map +1 -1
- package/dist/data/migrate.d.ts +20 -0
- package/dist/data/migrate.d.ts.map +1 -1
- package/dist/data/migrate.js +86 -3
- package/dist/data/migrate.js.map +1 -1
- package/dist/data/physical.d.ts +5 -0
- package/dist/data/physical.d.ts.map +1 -0
- package/dist/data/physical.js +196 -0
- package/dist/data/physical.js.map +1 -0
- package/dist/data/pool.d.ts +2 -1
- package/dist/data/pool.d.ts.map +1 -1
- package/dist/data/pool.js +159 -31
- package/dist/data/pool.js.map +1 -1
- package/dist/data/query.d.ts +10 -1
- package/dist/data/query.d.ts.map +1 -1
- package/dist/data/query.js +136 -27
- package/dist/data/query.js.map +1 -1
- package/dist/data/sqlite.d.ts.map +1 -1
- package/dist/data/sqlite.js +350 -52
- package/dist/data/sqlite.js.map +1 -1
- package/dist/data/time.d.ts +13 -0
- package/dist/data/time.d.ts.map +1 -1
- package/dist/data/time.js +61 -17
- package/dist/data/time.js.map +1 -1
- package/dist/index.d.ts +43 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -16
- package/dist/index.js.map +1 -1
- package/dist/kernel/audit.d.ts +27 -0
- package/dist/kernel/audit.d.ts.map +1 -0
- package/dist/kernel/audit.js +67 -0
- package/dist/kernel/audit.js.map +1 -0
- package/dist/kernel/classification.d.ts +26 -0
- package/dist/kernel/classification.d.ts.map +1 -0
- package/dist/kernel/classification.js +73 -0
- package/dist/kernel/classification.js.map +1 -0
- package/dist/kernel/compose.d.ts +6 -2
- package/dist/kernel/compose.d.ts.map +1 -1
- package/dist/kernel/compose.js +269 -15
- package/dist/kernel/compose.js.map +1 -1
- package/dist/kernel/define.d.ts +2 -3
- package/dist/kernel/define.d.ts.map +1 -1
- package/dist/kernel/define.js +22 -12
- package/dist/kernel/define.js.map +1 -1
- package/dist/kernel/diff.d.ts.map +1 -1
- package/dist/kernel/diff.js +28 -4
- package/dist/kernel/diff.js.map +1 -1
- package/dist/kernel/graph.js +1 -1
- package/dist/kernel/graph.js.map +1 -1
- package/dist/kernel/i18n.d.ts +10 -1
- package/dist/kernel/i18n.d.ts.map +1 -1
- package/dist/kernel/i18n.js +34 -1
- package/dist/kernel/i18n.js.map +1 -1
- package/dist/kernel/layout.d.ts +97 -0
- package/dist/kernel/layout.d.ts.map +1 -1
- package/dist/kernel/layout.js +294 -12
- package/dist/kernel/layout.js.map +1 -1
- package/dist/kernel/menu.d.ts +33 -2
- package/dist/kernel/menu.d.ts.map +1 -1
- package/dist/kernel/menu.js +99 -7
- package/dist/kernel/menu.js.map +1 -1
- package/dist/kernel/modules.d.ts +3 -3
- package/dist/kernel/modules.d.ts.map +1 -1
- package/dist/kernel/modules.js +21 -21
- package/dist/kernel/modules.js.map +1 -1
- package/dist/kernel/permissions.d.ts +10 -0
- package/dist/kernel/permissions.d.ts.map +1 -0
- package/dist/kernel/permissions.js +365 -0
- package/dist/kernel/permissions.js.map +1 -0
- package/dist/kernel/schedule.d.ts +23 -0
- package/dist/kernel/schedule.d.ts.map +1 -0
- package/dist/kernel/schedule.js +83 -0
- package/dist/kernel/schedule.js.map +1 -0
- package/dist/kernel/types.d.ts.map +1 -1
- package/dist/kernel/types.js +5 -4
- package/dist/kernel/types.js.map +1 -1
- package/dist/kernel/workspace.d.ts +92 -14
- package/dist/kernel/workspace.d.ts.map +1 -1
- package/dist/kernel/workspace.js +128 -49
- package/dist/kernel/workspace.js.map +1 -1
- package/dist/pdf/assets/Inter-Bold.ttf +0 -0
- package/dist/pdf/assets/Inter-Regular.ttf +0 -0
- package/dist/pdf/assets/Inter-SemiBold.ttf +0 -0
- package/dist/pdf/assets/LICENSE.txt +92 -0
- package/dist/pdf/font.d.ts +10 -0
- package/dist/pdf/font.d.ts.map +1 -0
- package/dist/pdf/font.js +83 -0
- package/dist/pdf/font.js.map +1 -0
- package/dist/pdf/image.d.ts +8 -0
- package/dist/pdf/image.d.ts.map +1 -0
- package/dist/pdf/image.js +94 -0
- package/dist/pdf/image.js.map +1 -0
- package/dist/pdf/index.d.ts +15 -0
- package/dist/pdf/index.d.ts.map +1 -0
- package/dist/pdf/index.js +17 -0
- package/dist/pdf/index.js.map +1 -0
- package/dist/pdf/markup.d.ts +19 -0
- package/dist/pdf/markup.d.ts.map +1 -0
- package/dist/pdf/markup.js +146 -0
- package/dist/pdf/markup.js.map +1 -0
- package/dist/pdf/render.d.ts +14 -0
- package/dist/pdf/render.d.ts.map +1 -0
- package/dist/pdf/render.js +387 -0
- package/dist/pdf/render.js.map +1 -0
- package/dist/scaffold/index.js +6 -6
- package/dist/scaffold/index.js.map +1 -1
- package/dist/scaffold/templates/{app.test.ts.tmpl → deployment.test.ts.tmpl} +3 -3
- package/dist/scaffold/templates/ket.workspace.ts.tmpl +4 -6
- package/dist/scaffold/templates/module.ts.tmpl +1 -4
- package/dist/server/assets.d.ts +23 -0
- package/dist/server/assets.d.ts.map +1 -0
- package/dist/server/assets.js +97 -0
- package/dist/server/assets.js.map +1 -0
- package/dist/server/boot.d.ts +157 -38
- package/dist/server/boot.d.ts.map +1 -1
- package/dist/server/boot.js +360 -138
- package/dist/server/boot.js.map +1 -1
- package/dist/server/config.d.ts +30 -10
- package/dist/server/config.d.ts.map +1 -1
- package/dist/server/config.js +73 -17
- package/dist/server/config.js.map +1 -1
- package/dist/server/ctx.d.ts +10 -0
- package/dist/server/ctx.d.ts.map +1 -1
- package/dist/server/ctx.js +266 -48
- package/dist/server/ctx.js.map +1 -1
- package/dist/server/development.d.ts +10 -0
- package/dist/server/development.d.ts.map +1 -0
- package/dist/server/development.js +15 -0
- package/dist/server/development.js.map +1 -0
- package/dist/server/fn.d.ts +22 -3
- package/dist/server/fn.d.ts.map +1 -1
- package/dist/server/fn.js +116 -32
- package/dist/server/fn.js.map +1 -1
- package/dist/server/form.d.ts +33 -0
- package/dist/server/form.d.ts.map +1 -0
- package/dist/server/form.js +47 -0
- package/dist/server/form.js.map +1 -0
- package/dist/server/http.d.ts +55 -3
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +306 -22
- package/dist/server/http.js.map +1 -1
- package/dist/server/idem.d.ts +3 -2
- package/dist/server/idem.d.ts.map +1 -1
- package/dist/server/idem.js +12 -4
- package/dist/server/idem.js.map +1 -1
- package/dist/server/jobs.js +1 -1
- package/dist/server/jobs.js.map +1 -1
- package/dist/server/log/combinators.d.ts +42 -0
- package/dist/server/log/combinators.d.ts.map +1 -0
- package/dist/server/log/combinators.js +270 -0
- package/dist/server/log/combinators.js.map +1 -0
- package/dist/server/log/console.d.ts +12 -0
- package/dist/server/log/console.d.ts.map +1 -0
- package/dist/server/log/console.js +96 -0
- package/dist/server/log/console.js.map +1 -0
- package/dist/server/log/file.d.ts +11 -0
- package/dist/server/log/file.d.ts.map +1 -0
- package/dist/server/log/file.js +61 -0
- package/dist/server/log/file.js.map +1 -0
- package/dist/server/log/index.d.ts +23 -0
- package/dist/server/log/index.d.ts.map +1 -0
- package/dist/server/log/index.js +45 -0
- package/dist/server/log/index.js.map +1 -0
- package/dist/server/log/logger.d.ts +53 -0
- package/dist/server/log/logger.d.ts.map +1 -0
- package/dist/server/log/logger.js +94 -0
- package/dist/server/log/logger.js.map +1 -0
- package/dist/server/log/memory.d.ts +11 -0
- package/dist/server/log/memory.d.ts.map +1 -0
- package/dist/server/log/memory.js +25 -0
- package/dist/server/log/memory.js.map +1 -0
- package/dist/server/log/types.d.ts +112 -0
- package/dist/server/log/types.d.ts.map +1 -0
- package/dist/server/log/types.js +58 -0
- package/dist/server/log/types.js.map +1 -0
- package/dist/server/policy.d.ts +29 -0
- package/dist/server/policy.d.ts.map +1 -0
- package/dist/server/policy.js +29 -0
- package/dist/server/policy.js.map +1 -0
- package/dist/server/queue.d.ts +1 -1
- package/dist/server/queue.d.ts.map +1 -1
- package/dist/server/queue.js.map +1 -1
- package/dist/server/ratelimit.d.ts +48 -0
- package/dist/server/ratelimit.d.ts.map +1 -0
- package/dist/server/ratelimit.js +102 -0
- package/dist/server/ratelimit.js.map +1 -0
- package/dist/server/respond.d.ts.map +1 -1
- package/dist/server/respond.js +16 -1
- package/dist/server/respond.js.map +1 -1
- package/dist/server/runtime.d.ts +18 -3
- package/dist/server/runtime.d.ts.map +1 -1
- package/dist/server/runtime.js +32 -2
- package/dist/server/runtime.js.map +1 -1
- package/dist/server/schedule.d.ts +18 -0
- package/dist/server/schedule.d.ts.map +1 -0
- package/dist/server/schedule.js +70 -0
- package/dist/server/schedule.js.map +1 -0
- package/dist/server/sequence.d.ts +42 -0
- package/dist/server/sequence.d.ts.map +1 -0
- package/dist/server/sequence.js +97 -0
- package/dist/server/sequence.js.map +1 -0
- package/dist/server/session.d.ts +21 -0
- package/dist/server/session.d.ts.map +1 -1
- package/dist/server/session.js +84 -10
- package/dist/server/session.js.map +1 -1
- package/dist/server/sessionstore.d.ts +3 -1
- package/dist/server/sessionstore.d.ts.map +1 -1
- package/dist/server/sessionstore.js +7 -3
- package/dist/server/sessionstore.js.map +1 -1
- package/dist/server/storage/index.d.ts +1 -1
- package/dist/server/storage/index.d.ts.map +1 -1
- package/dist/server/storage/index.js +61 -1
- package/dist/server/storage/index.js.map +1 -1
- package/dist/server/storage/types.d.ts +8 -0
- package/dist/server/storage/types.d.ts.map +1 -1
- package/dist/server/storage/types.js +58 -0
- package/dist/server/storage/types.js.map +1 -1
- package/dist/server/tenants.d.ts +20 -18
- package/dist/server/tenants.d.ts.map +1 -1
- package/dist/server/tenants.js +133 -84
- package/dist/server/tenants.js.map +1 -1
- package/dist/server/transport/types.js +2 -2
- package/dist/server/transport/types.js.map +1 -1
- package/dist/server/worker.d.ts +19 -3
- package/dist/server/worker.d.ts.map +1 -1
- package/dist/server/worker.js +168 -21
- package/dist/server/worker.js.map +1 -1
- package/dist/testing.d.ts +26 -10
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +41 -14
- package/dist/testing.js.map +1 -1
- package/dist/theme/contracts.d.ts +14 -1
- package/dist/theme/contracts.d.ts.map +1 -1
- package/dist/theme/contracts.js +35 -6
- package/dist/theme/contracts.js.map +1 -1
- package/dist/theme/index.d.ts +1 -1
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +1 -1
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/joint-runtime.d.ts +33 -0
- package/dist/theme/joint-runtime.d.ts.map +1 -0
- package/dist/theme/joint-runtime.js +121 -0
- package/dist/theme/joint-runtime.js.map +1 -0
- package/dist/theme/joints.d.ts.map +1 -1
- package/dist/theme/joints.js +15 -97
- package/dist/theme/joints.js.map +1 -1
- package/dist/theme/ktl/compile.d.ts +4 -0
- package/dist/theme/ktl/compile.d.ts.map +1 -1
- package/dist/theme/ktl/compile.js +54 -1
- package/dist/theme/ktl/compile.js.map +1 -1
- package/dist/theme/ktl/parser.d.ts +4 -0
- package/dist/theme/ktl/parser.d.ts.map +1 -1
- package/dist/theme/ktl/parser.js +8 -0
- package/dist/theme/ktl/parser.js.map +1 -1
- package/dist/theme/render.d.ts +8 -0
- package/dist/theme/render.d.ts.map +1 -1
- package/dist/theme/render.js +88 -118
- package/dist/theme/render.js.map +1 -1
- package/dist/theme/tokens.d.ts +6 -0
- package/dist/theme/tokens.d.ts.map +1 -1
- package/dist/theme/tokens.js +6 -0
- package/dist/theme/tokens.js.map +1 -1
- package/dist/theme/viewmodel.d.ts +24 -0
- package/dist/theme/viewmodel.d.ts.map +1 -1
- package/dist/theme/viewmodel.js +75 -6
- package/dist/theme/viewmodel.js.map +1 -1
- package/dist/types.d.ts +304 -56
- package/dist/types.d.ts.map +1 -1
- package/package.json +6 -2
- package/dist/kernel/apps.d.ts +0 -43
- package/dist/kernel/apps.d.ts.map +0 -1
- package/dist/kernel/apps.js +0 -234
- package/dist/kernel/apps.js.map +0 -1
package/dist/pdf/font.js
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
const u16 = (b, o) => new DataView(b.buffer, b.byteOffset, b.byteLength).getUint16(o);
|
|
2
|
+
const i16 = (b, o) => new DataView(b.buffer, b.byteOffset, b.byteLength).getInt16(o);
|
|
3
|
+
const u32 = (b, o) => new DataView(b.buffer, b.byteOffset, b.byteLength).getUint32(o);
|
|
4
|
+
export function parseTrueType(bytes) {
|
|
5
|
+
const tables = {};
|
|
6
|
+
const count = u16(bytes, 4);
|
|
7
|
+
for (let i = 0; i < count; i++) {
|
|
8
|
+
const at = 12 + i * 16;
|
|
9
|
+
const tag = String.fromCharCode(...bytes.slice(at, at + 4));
|
|
10
|
+
tables[tag] = { offset: u32(bytes, at + 8), length: u32(bytes, at + 12) };
|
|
11
|
+
}
|
|
12
|
+
for (const tag of ['head', 'hhea', 'hmtx', 'maxp', 'cmap'])
|
|
13
|
+
if (!tables[tag])
|
|
14
|
+
throw new Error(`font misses ${tag}`);
|
|
15
|
+
const head = tables.head.offset;
|
|
16
|
+
const hhea = tables.hhea.offset;
|
|
17
|
+
const hmtx = tables.hmtx.offset;
|
|
18
|
+
const numGlyphs = u16(bytes, tables.maxp.offset + 4);
|
|
19
|
+
const metrics = u16(bytes, hhea + 34);
|
|
20
|
+
const widths = [];
|
|
21
|
+
for (let glyph = 0; glyph < numGlyphs; glyph++)
|
|
22
|
+
widths.push(u16(bytes, hmtx + Math.min(glyph, metrics - 1) * 4));
|
|
23
|
+
const cmap = tables.cmap.offset;
|
|
24
|
+
const subtables = u16(bytes, cmap + 2);
|
|
25
|
+
let chosen = 0;
|
|
26
|
+
for (let i = 0; i < subtables; i++) {
|
|
27
|
+
const at = cmap + 4 + i * 8;
|
|
28
|
+
const platform = u16(bytes, at);
|
|
29
|
+
const encoding = u16(bytes, at + 2);
|
|
30
|
+
const offset = cmap + u32(bytes, at + 4);
|
|
31
|
+
const format = u16(bytes, offset);
|
|
32
|
+
if (platform === 3 && ((encoding === 10 && format === 12) || (!chosen && encoding === 1 && format === 4)))
|
|
33
|
+
chosen = offset;
|
|
34
|
+
}
|
|
35
|
+
if (!chosen)
|
|
36
|
+
throw new Error('font has no Unicode cmap');
|
|
37
|
+
const format = u16(bytes, chosen);
|
|
38
|
+
const glyphOf = format === 12
|
|
39
|
+
? (point) => {
|
|
40
|
+
const groups = u32(bytes, chosen + 12);
|
|
41
|
+
for (let i = 0; i < groups; i++) {
|
|
42
|
+
const at = chosen + 16 + i * 12;
|
|
43
|
+
const start = u32(bytes, at);
|
|
44
|
+
const end = u32(bytes, at + 4);
|
|
45
|
+
if (point >= start && point <= end)
|
|
46
|
+
return u32(bytes, at + 8) + point - start;
|
|
47
|
+
}
|
|
48
|
+
return 0;
|
|
49
|
+
}
|
|
50
|
+
: (point) => {
|
|
51
|
+
if (point > 0xffff)
|
|
52
|
+
return 0;
|
|
53
|
+
const segCount = u16(bytes, chosen + 6) / 2;
|
|
54
|
+
const endCodes = chosen + 14;
|
|
55
|
+
const startCodes = endCodes + segCount * 2 + 2;
|
|
56
|
+
const deltas = startCodes + segCount * 2;
|
|
57
|
+
const ranges = deltas + segCount * 2;
|
|
58
|
+
for (let i = 0; i < segCount; i++) {
|
|
59
|
+
const end = u16(bytes, endCodes + i * 2);
|
|
60
|
+
if (point > end)
|
|
61
|
+
continue;
|
|
62
|
+
const start = u16(bytes, startCodes + i * 2);
|
|
63
|
+
if (point < start)
|
|
64
|
+
return 0;
|
|
65
|
+
const delta = i16(bytes, deltas + i * 2);
|
|
66
|
+
const range = u16(bytes, ranges + i * 2);
|
|
67
|
+
if (!range)
|
|
68
|
+
return (point + delta) & 0xffff;
|
|
69
|
+
const glyph = u16(bytes, ranges + i * 2 + range + (point - start) * 2);
|
|
70
|
+
return glyph ? (glyph + delta) & 0xffff : 0;
|
|
71
|
+
}
|
|
72
|
+
return 0;
|
|
73
|
+
};
|
|
74
|
+
return {
|
|
75
|
+
bytes,
|
|
76
|
+
unitsPerEm: u16(bytes, head + 18),
|
|
77
|
+
ascent: i16(bytes, hhea + 4),
|
|
78
|
+
descent: i16(bytes, hhea + 6),
|
|
79
|
+
glyphOf,
|
|
80
|
+
widthOf: (glyph) => widths[glyph] ?? widths[0] ?? 0,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=font.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"font.js","sourceRoot":"","sources":["../../../../../../packages/ketjs/src/pdf/font.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../../../../packages/ketjs/src/pdf/image.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,UAAU,CAAA;IACjB,MAAM,EAAE,YAAY,GAAG,cAAc,CAAA;CACtC,CAAA;AA0FD,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,QAAQ,CAItD"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { deflateSync, inflateSync } from 'node:zlib';
|
|
2
|
+
const u32 = (bytes, at) => new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength).getUint32(at);
|
|
3
|
+
const concat = (chunks) => {
|
|
4
|
+
const out = new Uint8Array(chunks.reduce((sum, chunk) => sum + chunk.length, 0));
|
|
5
|
+
let at = 0;
|
|
6
|
+
for (const chunk of chunks) {
|
|
7
|
+
out.set(chunk, at);
|
|
8
|
+
at += chunk.length;
|
|
9
|
+
}
|
|
10
|
+
return out;
|
|
11
|
+
};
|
|
12
|
+
const paeth = (a, b, c) => {
|
|
13
|
+
const p = a + b - c;
|
|
14
|
+
const pa = Math.abs(p - a);
|
|
15
|
+
const pb = Math.abs(p - b);
|
|
16
|
+
const pc = Math.abs(p - c);
|
|
17
|
+
return pa <= pb && pa <= pc ? a : pb <= pc ? b : c;
|
|
18
|
+
};
|
|
19
|
+
function png(bytes) {
|
|
20
|
+
const width = u32(bytes, 16);
|
|
21
|
+
const height = u32(bytes, 20);
|
|
22
|
+
const depth = bytes[24];
|
|
23
|
+
const color = bytes[25];
|
|
24
|
+
const interlace = bytes[28];
|
|
25
|
+
if (depth !== 8 || ![2, 6].includes(color) || interlace !== 0)
|
|
26
|
+
throw new Error('PNG images must be non-interlaced 8-bit RGB or RGBA');
|
|
27
|
+
const parts = [];
|
|
28
|
+
for (let at = 8; at + 12 <= bytes.length;) {
|
|
29
|
+
const length = u32(bytes, at);
|
|
30
|
+
const type = String.fromCharCode(...bytes.slice(at + 4, at + 8));
|
|
31
|
+
if (type === 'IDAT')
|
|
32
|
+
parts.push(bytes.slice(at + 8, at + 8 + length));
|
|
33
|
+
at += length + 12;
|
|
34
|
+
}
|
|
35
|
+
const packed = inflateSync(concat(parts));
|
|
36
|
+
const channels = color === 6 ? 4 : 3;
|
|
37
|
+
const stride = width * channels;
|
|
38
|
+
const raw = new Uint8Array(height * stride);
|
|
39
|
+
let input = 0;
|
|
40
|
+
for (let y = 0; y < height; y++) {
|
|
41
|
+
const filter = packed[input++];
|
|
42
|
+
for (let x = 0; x < stride; x++) {
|
|
43
|
+
const value = packed[input++];
|
|
44
|
+
const left = x >= channels ? raw[y * stride + x - channels] : 0;
|
|
45
|
+
const above = y ? raw[(y - 1) * stride + x] : 0;
|
|
46
|
+
const upperLeft = y && x >= channels ? raw[(y - 1) * stride + x - channels] : 0;
|
|
47
|
+
raw[y * stride + x] =
|
|
48
|
+
filter === 0
|
|
49
|
+
? value
|
|
50
|
+
: filter === 1
|
|
51
|
+
? (value + left) & 255
|
|
52
|
+
: filter === 2
|
|
53
|
+
? (value + above) & 255
|
|
54
|
+
: filter === 3
|
|
55
|
+
? (value + Math.floor((left + above) / 2)) & 255
|
|
56
|
+
: filter === 4
|
|
57
|
+
? (value + paeth(left, above, upperLeft)) & 255
|
|
58
|
+
: 0;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const rgb = new Uint8Array(width * height * 3);
|
|
62
|
+
for (let from = 0, to = 0; from < raw.length; from += channels, to += 3) {
|
|
63
|
+
const alpha = channels === 4 ? raw[from + 3] / 255 : 1;
|
|
64
|
+
rgb[to] = Math.round(raw[from] * alpha + 255 * (1 - alpha));
|
|
65
|
+
rgb[to + 1] = Math.round(raw[from + 1] * alpha + 255 * (1 - alpha));
|
|
66
|
+
rgb[to + 2] = Math.round(raw[from + 2] * alpha + 255 * (1 - alpha));
|
|
67
|
+
}
|
|
68
|
+
return { width, height, bytes: deflateSync(rgb), filter: '/FlateDecode' };
|
|
69
|
+
}
|
|
70
|
+
function jpeg(bytes) {
|
|
71
|
+
for (let at = 2; at + 9 < bytes.length;) {
|
|
72
|
+
if (bytes[at] !== 0xff) {
|
|
73
|
+
at++;
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
const marker = bytes[at + 1];
|
|
77
|
+
const length = (bytes[at + 2] << 8) | bytes[at + 3];
|
|
78
|
+
if ([0xc0, 0xc1, 0xc2, 0xc3].includes(marker)) {
|
|
79
|
+
const height = (bytes[at + 5] << 8) | bytes[at + 6];
|
|
80
|
+
const width = (bytes[at + 7] << 8) | bytes[at + 8];
|
|
81
|
+
return { width, height, bytes, filter: '/DCTDecode' };
|
|
82
|
+
}
|
|
83
|
+
at += 2 + length;
|
|
84
|
+
}
|
|
85
|
+
throw new Error('JPEG dimensions are missing');
|
|
86
|
+
}
|
|
87
|
+
export function parseImage(bytes) {
|
|
88
|
+
if (bytes[0] === 0x89 && String.fromCharCode(...bytes.slice(1, 4)) === 'PNG')
|
|
89
|
+
return png(bytes);
|
|
90
|
+
if (bytes[0] === 0xff && bytes[1] === 0xd8)
|
|
91
|
+
return jpeg(bytes);
|
|
92
|
+
throw new Error('report images must be PNG or JPEG');
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=image.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image.js","sourceRoot":"","sources":["../../../../../../packages/ketjs/src/pdf/image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AASpD,MAAM,GAAG,GAAG,CAAC,KAAiB,EAAE,EAAU,EAAE,EAAE,CAC5C,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;AAC9E,MAAM,MAAM,GAAG,CAAC,MAAoB,EAAE,EAAE;IACtC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;IAChF,IAAI,EAAE,GAAG,CAAC,CAAA;IACV,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QAClB,EAAE,IAAI,KAAK,CAAC,MAAM,CAAA;IACpB,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AACD,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,EAAE;IAChD,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACnB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IAC1B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACpD,CAAC,CAAA;AAED,SAAS,GAAG,CAAC,KAAiB;IAC5B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAC5B,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,CAAA;IACvB,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,CAAA;IACvB,MAAM,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC,CAAA;IAC3B,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;IACxE,MAAM,KAAK,GAAiB,EAAE,CAAA;IAC9B,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,KAAK,CAAC,MAAM,GAAI,CAAC;QAC3C,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;QAChE,IAAI,IAAI,KAAK,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAA;QACrE,EAAE,IAAI,MAAM,GAAG,EAAE,CAAA;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IACzC,MAAM,QAAQ,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACpC,MAAM,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAA;IAC/B,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAA;IAC3C,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,CAAW,CAAA;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAW,CAAA;YACvC,MAAM,IAAI,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAE,CAAC,CAAC,CAAC,CAAC,CAAA;YAChE,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAA;YAChD,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAE,CAAC,CAAC,CAAC,CAAC,CAAA;YAChF,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;gBACjB,MAAM,KAAK,CAAC;oBACV,CAAC,CAAC,KAAK;oBACP,CAAC,CAAC,MAAM,KAAK,CAAC;wBACZ,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG;wBACtB,CAAC,CAAC,MAAM,KAAK,CAAC;4BACZ,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG;4BACvB,CAAC,CAAC,MAAM,KAAK,CAAC;gCACZ,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;gCAChD,CAAC,CAAC,MAAM,KAAK,CAAC;oCACZ,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,GAAG,GAAG;oCAC/C,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,CAAA;IAC9C,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,IAAI,QAAQ,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;QACxE,MAAM,KAAK,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QACvD,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAA;QAC5D,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAE,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAA;QACpE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAE,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAA;IACtE,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA;AAC3E,CAAC;AAED,SAAS,IAAI,CAAC,KAAiB;IAC7B,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,GAAI,CAAC;QACzC,IAAI,KAAK,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;YACvB,EAAE,EAAE,CAAA;YACJ,SAAQ;QACV,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAW,CAAA;QACtC,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAE,CAAA;QACrD,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAE,CAAA;YACrD,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAE,CAAA;YACpD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,CAAA;QACvD,CAAC;QACD,EAAE,IAAI,CAAC,GAAG,MAAM,CAAA;IAClB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;AAChD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAiB;IAC1C,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,CAAA;IAC/F,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAA;IAC9D,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;AACtD,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { CompileOpts, Scope } from '../theme/ktl/compile.ts';
|
|
2
|
+
export { parseReportMarkup, renderReportHtml } from './markup.ts';
|
|
3
|
+
export type { ReportDocument, ReportElement, ReportNode, ReportTag } from './markup.ts';
|
|
4
|
+
export { renderPdf } from './render.ts';
|
|
5
|
+
export type { PdfRenderOptions } from './render.ts';
|
|
6
|
+
export { parseTrueType } from './font.ts';
|
|
7
|
+
export type { TrueTypeFont } from './font.ts';
|
|
8
|
+
export { parseImage } from './image.ts';
|
|
9
|
+
export type { PdfImage } from './image.ts';
|
|
10
|
+
/** Static Inter shipped with the framework for deterministic server-side PDF output. */
|
|
11
|
+
export declare const interFontUrl: (weight?: 'regular' | 'semibold' | 'bold') => URL;
|
|
12
|
+
export declare function compileReportTemplate(source: string, opts?: Omit<CompileOpts, 'mode'>): {
|
|
13
|
+
render(scope: Scope): import("./markup.ts").ReportElement;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/ketjs/src/pdf/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAGjE,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACjE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvF,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AACzC,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE1C,wFAAwF;AACxF,eAAO,MAAM,YAAY,YAAY,SAAS,GAAG,UAAU,GAAG,MAAM,KAAe,GAIhF,CAAA;AAEH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAM;IAGtF,MAAM,QAAQ,KAAK;EAItB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { compileKtl } from '../theme/ktl/compile.js';
|
|
2
|
+
import { parseReportMarkup } from './markup.js';
|
|
3
|
+
export { parseReportMarkup, renderReportHtml } from './markup.js';
|
|
4
|
+
export { renderPdf } from './render.js';
|
|
5
|
+
export { parseTrueType } from './font.js';
|
|
6
|
+
export { parseImage } from './image.js';
|
|
7
|
+
/** Static Inter shipped with the framework for deterministic server-side PDF output. */
|
|
8
|
+
export const interFontUrl = (weight = 'regular') => new URL(`./assets/Inter-${weight === 'semibold' ? 'SemiBold' : weight === 'bold' ? 'Bold' : 'Regular'}.ttf`, import.meta.url);
|
|
9
|
+
export function compileReportTemplate(source, opts = {}) {
|
|
10
|
+
const template = compileKtl(source, { ...opts, mode: 'report' });
|
|
11
|
+
return {
|
|
12
|
+
render(scope) {
|
|
13
|
+
return parseReportMarkup(template.render(scope));
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/ketjs/src/pdf/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE/C,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAEjE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAGvC,wFAAwF;AACxF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,GAAoC,SAAS,EAAO,EAAE,CACvF,IAAI,GAAG,CACL,kBAAkB,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,MAAM,EACnG,OAAO,IAAI,CAAC,GAAG,CAChB,CAAA;AAEH,MAAM,UAAU,qBAAqB,CAAC,MAAc,EAAE,IAAI,GAA8B,EAAE;IACxF,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;IAChE,OAAO;QACL,MAAM,CAAC,KAAY;YACjB,OAAO,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QAClD,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type ReportText = {
|
|
2
|
+
kind: 'text';
|
|
3
|
+
value: string;
|
|
4
|
+
};
|
|
5
|
+
export type ReportElement = {
|
|
6
|
+
kind: 'element';
|
|
7
|
+
tag: ReportTag;
|
|
8
|
+
attrs: Record<string, string>;
|
|
9
|
+
children: ReportNode[];
|
|
10
|
+
};
|
|
11
|
+
export type ReportNode = ReportText | ReportElement;
|
|
12
|
+
export type ReportDocument = ReportElement;
|
|
13
|
+
export type ReportTag = 'report' | 'header' | 'footer' | 'section' | 'stack' | 'row' | 'text' | 'table' | 'thead' | 'tbody' | 'tr' | 'th' | 'td' | 'image' | 'page-break';
|
|
14
|
+
export declare function parseReportMarkup(source: string, limits?: {
|
|
15
|
+
maxNodes?: number;
|
|
16
|
+
maxText?: number;
|
|
17
|
+
}): ReportDocument;
|
|
18
|
+
export declare function renderReportHtml(document: ReportDocument): string;
|
|
19
|
+
//# sourceMappingURL=markup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markup.d.ts","sourceRoot":"","sources":["../../../../../packages/ketjs/src/pdf/markup.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AACxD,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,SAAS,CAAA;IACf,GAAG,EAAE,SAAS,CAAA;IACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,QAAQ,EAAE,UAAU,EAAE,CAAA;CACvB,CAAA;AACD,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,aAAa,CAAA;AACnD,MAAM,MAAM,cAAc,GAAG,aAAa,CAAA;AAE1C,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,OAAO,GACP,KAAK,GACL,MAAM,GACN,OAAO,GACP,OAAO,GACP,OAAO,GACP,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,OAAO,GACP,YAAY,CAAA;AAoDhB,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,MAAM,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACnD,cAAc,CAsEhB;AAKD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAiBjE"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { KetError } from '../kernel/errors.js';
|
|
2
|
+
const TAGS = new Set([
|
|
3
|
+
'report',
|
|
4
|
+
'header',
|
|
5
|
+
'footer',
|
|
6
|
+
'section',
|
|
7
|
+
'stack',
|
|
8
|
+
'row',
|
|
9
|
+
'text',
|
|
10
|
+
'table',
|
|
11
|
+
'thead',
|
|
12
|
+
'tbody',
|
|
13
|
+
'tr',
|
|
14
|
+
'th',
|
|
15
|
+
'td',
|
|
16
|
+
'image',
|
|
17
|
+
'page-break',
|
|
18
|
+
]);
|
|
19
|
+
const ATTRS = new Set([
|
|
20
|
+
'paper',
|
|
21
|
+
'orientation',
|
|
22
|
+
'margin',
|
|
23
|
+
'margin-top',
|
|
24
|
+
'margin-right',
|
|
25
|
+
'margin-bottom',
|
|
26
|
+
'margin-left',
|
|
27
|
+
'size',
|
|
28
|
+
'weight',
|
|
29
|
+
'tone',
|
|
30
|
+
'align',
|
|
31
|
+
'gap',
|
|
32
|
+
'width',
|
|
33
|
+
'height',
|
|
34
|
+
'columns',
|
|
35
|
+
'label',
|
|
36
|
+
'src',
|
|
37
|
+
'alt',
|
|
38
|
+
]);
|
|
39
|
+
const entities = (value) => value.replace(/&(#x[0-9a-f]+|#\d+|amp|lt|gt|quot|apos);/gi, (_, entity) => {
|
|
40
|
+
if (entity === 'amp')
|
|
41
|
+
return '&';
|
|
42
|
+
if (entity === 'lt')
|
|
43
|
+
return '<';
|
|
44
|
+
if (entity === 'gt')
|
|
45
|
+
return '>';
|
|
46
|
+
if (entity === 'quot')
|
|
47
|
+
return '"';
|
|
48
|
+
if (entity === 'apos')
|
|
49
|
+
return "'";
|
|
50
|
+
const point = entity[1]?.toLowerCase() === 'x' ? Number.parseInt(entity.slice(2), 16) : Number(entity.slice(1));
|
|
51
|
+
return Number.isFinite(point) ? String.fromCodePoint(point) : '';
|
|
52
|
+
});
|
|
53
|
+
export function parseReportMarkup(source, limits = {}) {
|
|
54
|
+
if (source.length > (limits.maxText ?? 1_000_000))
|
|
55
|
+
throw new KetError({
|
|
56
|
+
code: 'E_REPORT_MARKUP_LIMIT',
|
|
57
|
+
message: 'rendered report markup exceeds its size limit',
|
|
58
|
+
});
|
|
59
|
+
if (/<!DOCTYPE|<!ENTITY|<\?|<!--/i.test(source))
|
|
60
|
+
throw new KetError({
|
|
61
|
+
code: 'E_REPORT_MARKUP_UNSAFE',
|
|
62
|
+
message: 'report markup cannot contain declarations',
|
|
63
|
+
});
|
|
64
|
+
const roots = [];
|
|
65
|
+
const stack = [];
|
|
66
|
+
const token = /<[^>]+>|[^<]+/g;
|
|
67
|
+
let count = 0;
|
|
68
|
+
for (const match of source.matchAll(token)) {
|
|
69
|
+
const value = match[0];
|
|
70
|
+
if (!value.startsWith('<')) {
|
|
71
|
+
if (!value.trim())
|
|
72
|
+
continue;
|
|
73
|
+
const node = { kind: 'text', value: entities(value) };
|
|
74
|
+
(stack.at(-1)?.children ?? roots).push(node);
|
|
75
|
+
count++;
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (value.startsWith('</')) {
|
|
79
|
+
const name = value.slice(2, -1).trim();
|
|
80
|
+
const open = stack.pop();
|
|
81
|
+
if (!open || open.tag !== name)
|
|
82
|
+
throw new KetError({ code: 'E_REPORT_MARKUP_CLOSE', message: `unexpected closing tag </${name}>` });
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
const selfClosing = value.endsWith('/>');
|
|
86
|
+
const inside = value.slice(1, selfClosing ? -2 : -1).trim();
|
|
87
|
+
const name = inside.match(/^[a-z][a-z-]*/)?.[0];
|
|
88
|
+
if (!name || !TAGS.has(name))
|
|
89
|
+
throw new KetError({ code: 'E_REPORT_MARKUP_TAG', message: `unsupported report tag <${name ?? '?'}>` });
|
|
90
|
+
const attrs = {};
|
|
91
|
+
const rest = inside.slice(name.length);
|
|
92
|
+
let consumed = '';
|
|
93
|
+
for (const attr of rest.matchAll(/\s+([a-z][a-z-]*)\s*=\s*(["'])(.*?)\2/g)) {
|
|
94
|
+
const key = attr[1];
|
|
95
|
+
if (!ATTRS.has(key))
|
|
96
|
+
throw new KetError({
|
|
97
|
+
code: 'E_REPORT_MARKUP_ATTR',
|
|
98
|
+
message: `unsupported attribute "${key}" on <${name}>`,
|
|
99
|
+
});
|
|
100
|
+
attrs[key] = entities(attr[3]);
|
|
101
|
+
consumed += attr[0];
|
|
102
|
+
}
|
|
103
|
+
if (rest.trim() !== consumed.trim())
|
|
104
|
+
throw new KetError({ code: 'E_REPORT_MARKUP_ATTR', message: `malformed attribute on <${name}>` });
|
|
105
|
+
const node = { kind: 'element', tag: name, attrs, children: [] };
|
|
106
|
+
(stack.at(-1)?.children ?? roots).push(node);
|
|
107
|
+
count++;
|
|
108
|
+
if (count > (limits.maxNodes ?? 20_000))
|
|
109
|
+
throw new KetError({ code: 'E_REPORT_MARKUP_LIMIT', message: 'report markup has too many nodes' });
|
|
110
|
+
if (!selfClosing && name !== 'page-break' && name !== 'image')
|
|
111
|
+
stack.push(node);
|
|
112
|
+
}
|
|
113
|
+
if (stack.length)
|
|
114
|
+
throw new KetError({
|
|
115
|
+
code: 'E_REPORT_MARKUP_OPEN',
|
|
116
|
+
message: `unclosed report tag <${stack.at(-1)?.tag}>`,
|
|
117
|
+
});
|
|
118
|
+
if (roots.length !== 1 || roots[0]?.kind !== 'element' || roots[0].tag !== 'report')
|
|
119
|
+
throw new KetError({
|
|
120
|
+
code: 'E_REPORT_MARKUP_ROOT',
|
|
121
|
+
message: 'report markup needs exactly one <report> root',
|
|
122
|
+
});
|
|
123
|
+
return roots[0];
|
|
124
|
+
}
|
|
125
|
+
const esc = (value) => value.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>').replaceAll('"', '"');
|
|
126
|
+
export function renderReportHtml(document) {
|
|
127
|
+
const render = (node) => {
|
|
128
|
+
if (node.kind === 'text')
|
|
129
|
+
return esc(node.value);
|
|
130
|
+
if (node.tag === 'page-break')
|
|
131
|
+
return '<div class="ket-report-page-break"></div>';
|
|
132
|
+
if (node.tag === 'image')
|
|
133
|
+
return `<div class="ket-report-image" data-image-key="${esc(node.attrs.src ?? '')}" aria-label="${esc(node.attrs.alt ?? '')}"></div>`;
|
|
134
|
+
const tag = ['table', 'thead', 'tbody', 'tr'].includes(node.tag)
|
|
135
|
+
? node.tag
|
|
136
|
+
: node.tag === 'th' || node.tag === 'td'
|
|
137
|
+
? node.tag
|
|
138
|
+
: 'div';
|
|
139
|
+
const attrs = Object.entries(node.attrs)
|
|
140
|
+
.map(([key, value]) => ` data-${key}="${esc(value)}"`)
|
|
141
|
+
.join('');
|
|
142
|
+
return `<${tag} class="ket-report-${node.tag}"${attrs}>${node.children.map(render).join('')}</${tag}>`;
|
|
143
|
+
};
|
|
144
|
+
return render(document);
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=markup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markup.js","sourceRoot":"","sources":["../../../../../../packages/ketjs/src/pdf/markup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ReportDocument } from './markup.ts';
|
|
2
|
+
export type PdfRenderOptions = {
|
|
3
|
+
/** Inter Regular, retained as the fallback for backwards compatibility. */
|
|
4
|
+
font: Uint8Array;
|
|
5
|
+
/** Inter SemiBold used by table headings and `weight="semibold"`. */
|
|
6
|
+
semiboldFont?: Uint8Array;
|
|
7
|
+
/** Inter Bold used by `weight="bold"`. */
|
|
8
|
+
boldFont?: Uint8Array;
|
|
9
|
+
/** Attachment bytes keyed by the `<image src="...">` identifier. */
|
|
10
|
+
images?: Record<string, Uint8Array>;
|
|
11
|
+
maxPages?: number;
|
|
12
|
+
};
|
|
13
|
+
export declare function renderPdf(document: ReportDocument, options: PdfRenderOptions): Uint8Array;
|
|
14
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../../../packages/ketjs/src/pdf/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAA6B,MAAM,aAAa,CAAA;AAI5E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,2EAA2E;IAC3E,IAAI,EAAE,UAAU,CAAA;IAChB,qEAAqE;IACrE,YAAY,CAAC,EAAE,UAAU,CAAA;IACzB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,UAAU,CAAA;IACrB,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAuND,wBAAgB,SAAS,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,gBAAgB,GAAG,UAAU,CA4QzF"}
|