pdf-mapview 0.1.0
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 +12 -0
- package/README.md +197 -0
- package/dist/client/index.cjs +1155 -0
- package/dist/client/index.cjs.map +1 -0
- package/dist/client/index.d.cts +102 -0
- package/dist/client/index.d.ts +102 -0
- package/dist/client/index.js +1149 -0
- package/dist/client/index.js.map +1 -0
- package/dist/ingest/cli.cjs +703 -0
- package/dist/ingest/cli.cjs.map +1 -0
- package/dist/ingest/cli.d.cts +1 -0
- package/dist/ingest/cli.d.ts +1 -0
- package/dist/ingest/cli.js +697 -0
- package/dist/ingest/cli.js.map +1 -0
- package/dist/ingest/index.cjs +751 -0
- package/dist/ingest/index.cjs.map +1 -0
- package/dist/ingest/index.d.cts +33 -0
- package/dist/ingest/index.d.ts +33 -0
- package/dist/ingest/index.js +738 -0
- package/dist/ingest/index.js.map +1 -0
- package/dist/ingest-sfbf6503.d.cts +647 -0
- package/dist/ingest-sfbf6503.d.ts +647 -0
- package/dist/server/index.cjs +751 -0
- package/dist/server/index.cjs.map +1 -0
- package/dist/server/index.d.cts +3 -0
- package/dist/server/index.d.ts +3 -0
- package/dist/server/index.js +738 -0
- package/dist/server/index.js.map +1 -0
- package/dist/shared/index.cjs +238 -0
- package/dist/shared/index.cjs.map +1 -0
- package/dist/shared/index.d.cts +8 -0
- package/dist/shared/index.d.ts +8 -0
- package/dist/shared/index.js +222 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/source-Cb1QZPVw.d.ts +60 -0
- package/dist/source-DHrup45h.d.cts +60 -0
- package/package.json +104 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/ingest/storage/memory.ts","../../src/shared/bytes.ts","../../src/ingest/pipeline/inspectInput.ts","../../src/ingest/pipeline/normalizeImage.ts","../../src/ingest/pipeline/buildTilePyramid.ts","../../src/shared/overlays.ts","../../src/shared/manifest.ts","../../src/ingest/pipeline/manifestBuilder.ts","../../src/ingest/pipeline/writeArtifacts.ts","../../src/ingest/ingestImage.ts","../../src/ingest/pipeline/rasterizePdf.ts","../../src/ingest/ingestPdf.ts","../../src/ingest/storage/local.ts","../../src/ingest/cli.ts"],"names":["readFile","basename","extname","sharp","z","randomUUID","canvas","createCanvas","DOMMatrix","ImageData","Path2D","defaultId","resolve","mkdir","dirname","rm","path","join","writeFile","cac"],"mappings":"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","file":"cli.cjs","sourcesContent":["import type {\n FinalizeStorageArgs,\n StorageAdapter,\n StorageFinalizeResult,\n StoredArtifact,\n WriteAssetArgs,\n WriteManifestArgs,\n WriteTileArgs,\n} from \"../../shared/ingest\";\n\nexport function memoryStorageAdapter(): StorageAdapter {\n const artifacts: StoredArtifact[] = [];\n\n const record = (\n kind: StoredArtifact[\"kind\"],\n path: string,\n contentType: string,\n bytes: Uint8Array,\n ): StoredArtifact => {\n const artifact = {\n kind,\n path,\n contentType,\n size: bytes.byteLength,\n } satisfies StoredArtifact;\n artifacts.push(artifact);\n return artifact;\n };\n\n return {\n async writeTile(args: WriteTileArgs) {\n return record(\"tile\", `tiles/${args.z}/${args.x}/${args.y}.${args.ext}`, args.contentType, args.bytes);\n },\n async writeManifest(args: WriteManifestArgs) {\n return record(\"manifest\", args.path, args.contentType, args.bytes);\n },\n async writeAsset(args: WriteAssetArgs) {\n return record(args.kind, args.path, args.contentType, args.bytes);\n },\n async finalize(_args: FinalizeStorageArgs): Promise<StorageFinalizeResult> {\n return {\n artifacts: [...artifacts],\n };\n },\n };\n}\n","export function toUint8Array(input: Buffer | Uint8Array | ArrayBuffer): Uint8Array {\n if (input instanceof ArrayBuffer) {\n return new Uint8Array(input);\n }\n\n return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n}\n","import { basename, extname } from \"node:path\";\nimport { readFile } from \"node:fs/promises\";\n\nimport { toUint8Array } from \"../../shared/bytes\";\n\nexport interface InspectedInput {\n bytes: Uint8Array;\n originalFilename?: string;\n ext?: string;\n}\n\nexport async function inspectInput(\n input: string | Buffer | Uint8Array | ArrayBuffer,\n): Promise<InspectedInput> {\n if (typeof input === \"string\") {\n const bytes = await readFile(input);\n return {\n bytes: toUint8Array(bytes),\n originalFilename: basename(input),\n ext: extname(input).slice(1).toLowerCase() || undefined,\n };\n }\n\n return {\n bytes: toUint8Array(input),\n };\n}\n","import sharp from \"sharp\";\n\nexport interface NormalizedImage {\n bytes: Uint8Array;\n width: number;\n height: number;\n mimeType: string;\n}\n\nexport interface NormalizeImageOptions {\n bytes: Uint8Array;\n maxDimension: number;\n background: string;\n}\n\nexport async function normalizeImage(options: NormalizeImageOptions): Promise<NormalizedImage> {\n const { data, info } = await sharp(options.bytes, { failOn: \"none\" })\n .rotate()\n .resize({\n width: options.maxDimension,\n height: options.maxDimension,\n fit: \"inside\",\n withoutEnlargement: true,\n })\n .flatten({\n background: options.background,\n })\n .png()\n .toBuffer({ resolveWithObject: true });\n\n return {\n bytes: new Uint8Array(data),\n width: info.width,\n height: info.height,\n mimeType: \"image/png\",\n };\n}\n","import sharp from \"sharp\";\n\nimport type { OutputArtifact, TileFormat } from \"../../shared/ingest\";\nimport type { TileLevelManifest } from \"../../shared/manifest\";\n\nexport interface TileBuildResult {\n levels: TileLevelManifest[];\n tiles: OutputArtifact[];\n preview: OutputArtifact;\n}\n\nexport interface BuildTilePyramidOptions {\n image: Uint8Array;\n width: number;\n height: number;\n tileSize: number;\n format: TileFormat;\n quality: number;\n}\n\nexport async function buildTilePyramid(\n options: BuildTilePyramidOptions,\n): Promise<TileBuildResult> {\n const maxZoom = Math.max(\n 0,\n Math.ceil(Math.log2(Math.max(options.width, options.height) / options.tileSize)),\n );\n const levels: TileLevelManifest[] = [];\n const tiles: OutputArtifact[] = [];\n const source = Buffer.from(options.image);\n\n for (let z = 0; z <= maxZoom; z += 1) {\n const scale = 1 / 2 ** (maxZoom - z);\n const width = Math.max(1, Math.ceil(options.width * scale));\n const height = Math.max(1, Math.ceil(options.height * scale));\n const columns = Math.max(1, Math.ceil(width / options.tileSize));\n const rows = Math.max(1, Math.ceil(height / options.tileSize));\n\n levels.push({\n z,\n width,\n height,\n columns,\n rows,\n scale,\n });\n\n const levelBuffer = await sharp(source, { failOn: \"none\" })\n .resize({\n width,\n height,\n fit: \"fill\",\n })\n .png()\n .toBuffer();\n\n for (let y = 0; y < rows; y += 1) {\n for (let x = 0; x < columns; x += 1) {\n const left = x * options.tileSize;\n const top = y * options.tileSize;\n const extractWidth = Math.min(options.tileSize, width - left);\n const extractHeight = Math.min(options.tileSize, height - top);\n const tileBuffer = await sharp(levelBuffer, { failOn: \"none\" })\n .extract({\n left,\n top,\n width: extractWidth,\n height: extractHeight,\n })\n .toFormat(options.format, formatOptions(options.format, options.quality))\n .toBuffer();\n\n tiles.push({\n kind: \"tile\",\n path: `tiles/${z}/${x}/${y}.${extensionForFormat(options.format)}`,\n contentType: contentTypeForFormat(options.format),\n bytes: new Uint8Array(tileBuffer),\n });\n }\n }\n }\n\n const previewBuffer = await sharp(source, { failOn: \"none\" })\n .resize({\n width: 1024,\n height: 1024,\n fit: \"inside\",\n withoutEnlargement: true,\n })\n .webp({ quality: 80 })\n .toBuffer();\n\n return {\n levels,\n tiles,\n preview: {\n kind: \"preview\",\n path: \"preview.webp\",\n contentType: \"image/webp\",\n bytes: new Uint8Array(previewBuffer),\n },\n };\n}\n\nfunction formatOptions(format: TileFormat, quality: number) {\n switch (format) {\n case \"jpeg\":\n return { quality };\n case \"png\":\n return {};\n case \"webp\":\n default:\n return { quality };\n }\n}\n\nexport function extensionForFormat(format: TileFormat): string {\n return format === \"jpeg\" ? \"jpg\" : format;\n}\n\nexport function contentTypeForFormat(format: TileFormat): string {\n switch (format) {\n case \"jpeg\":\n return \"image/jpeg\";\n case \"png\":\n return \"image/png\";\n case \"webp\":\n default:\n return \"image/webp\";\n }\n}\n","import { z } from \"zod\";\n\nimport type { NormalizedPoint, NormalizedRect } from \"./coordinates\";\n\nexport type RegionGeometryType = \"polygon\" | \"rectangle\" | \"point\" | \"label\";\n\nexport interface PolygonGeometry {\n type: \"polygon\";\n points: NormalizedPoint[];\n}\n\nexport interface RectangleGeometry {\n type: \"rectangle\";\n rect: NormalizedRect;\n}\n\nexport interface PointGeometry {\n type: \"point\";\n point: NormalizedPoint;\n radius?: number;\n}\n\nexport interface LabelGeometry {\n type: \"label\";\n point: NormalizedPoint;\n text: string;\n}\n\nexport type RegionGeometry =\n | PolygonGeometry\n | RectangleGeometry\n | PointGeometry\n | LabelGeometry;\n\nexport interface RegionFeature<Metadata = Record<string, unknown>> {\n id: string;\n geometry: RegionGeometry;\n label?: string;\n metadata?: Metadata;\n}\n\nexport interface RegionCollection<Metadata = Record<string, unknown>> {\n type: \"FeatureCollection\";\n regions: RegionFeature<Metadata>[];\n}\n\nconst normalizedPointSchema = z.object({\n x: z.number().finite().min(0).max(1),\n y: z.number().finite().min(0).max(1),\n});\n\nconst normalizedRectSchema = z.object({\n x: z.number().finite().min(0).max(1),\n y: z.number().finite().min(0).max(1),\n width: z.number().finite().min(0).max(1),\n height: z.number().finite().min(0).max(1),\n});\n\nexport const regionFeatureSchema = z.object({\n id: z.string().min(1),\n geometry: z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"polygon\"),\n points: z.array(normalizedPointSchema).min(3),\n }),\n z.object({\n type: z.literal(\"rectangle\"),\n rect: normalizedRectSchema,\n }),\n z.object({\n type: z.literal(\"point\"),\n point: normalizedPointSchema,\n radius: z.number().finite().positive().optional(),\n }),\n z.object({\n type: z.literal(\"label\"),\n point: normalizedPointSchema,\n text: z.string().min(1),\n }),\n ]),\n label: z.string().optional(),\n metadata: z.record(z.unknown()).optional(),\n});\n\nexport const regionCollectionSchema = z.object({\n type: z.literal(\"FeatureCollection\"),\n regions: z.array(regionFeatureSchema),\n});\n\nexport function normalizeRegions(\n input?: RegionCollection | RegionFeature[] | null,\n): RegionFeature[] {\n if (!input) {\n return [];\n }\n\n if (Array.isArray(input)) {\n return input;\n }\n\n return input.regions;\n}\n","import { z } from \"zod\";\n\nimport { regionCollectionSchema } from \"./overlays\";\nimport type { RegionCollection } from \"./overlays\";\nimport type { TileFormat } from \"./ingest\";\n\nexport interface TileLevelManifest {\n z: number;\n width: number;\n height: number;\n columns: number;\n rows: number;\n scale: number;\n}\n\nexport interface PdfMapManifest {\n version: 1;\n kind: \"pdf-map\";\n id: string;\n source: {\n type: \"pdf\" | \"image\";\n originalFilename?: string;\n page?: number;\n width: number;\n height: number;\n mimeType?: string;\n };\n coordinateSpace: {\n normalized: true;\n width: number;\n height: number;\n };\n tiles: {\n tileSize: number;\n format: TileFormat;\n minZoom: number;\n maxZoom: number;\n pathTemplate: string;\n levels: TileLevelManifest[];\n };\n view: {\n defaultCenter: [number, number];\n defaultZoom: number;\n minZoom: number;\n maxZoom: number;\n };\n overlays?: {\n inline?: RegionCollection;\n url?: string;\n };\n assets?: {\n preview?: string;\n };\n metadata?: {\n title?: string;\n createdAt?: string;\n [key: string]: unknown;\n };\n}\n\nexport interface CreateManifestInput extends Omit<PdfMapManifest, \"version\" | \"kind\"> {}\n\nexport interface ResolveTileUrlArgs {\n manifest: PdfMapManifest;\n z: number;\n x: number;\n y: number;\n baseUrl?: string;\n overrideTemplate?: string;\n}\n\nconst tileLevelSchema = z.object({\n z: z.number().int().min(0),\n width: z.number().int().positive(),\n height: z.number().int().positive(),\n columns: z.number().int().positive(),\n rows: z.number().int().positive(),\n scale: z.number().positive(),\n});\n\nexport const manifestSchema: z.ZodType<PdfMapManifest> = z.object({\n version: z.literal(1),\n kind: z.literal(\"pdf-map\"),\n id: z.string().min(1),\n source: z.object({\n type: z.union([z.literal(\"pdf\"), z.literal(\"image\")]),\n originalFilename: z.string().optional(),\n page: z.number().int().positive().optional(),\n width: z.number().int().positive(),\n height: z.number().int().positive(),\n mimeType: z.string().optional(),\n }),\n coordinateSpace: z.object({\n normalized: z.literal(true),\n width: z.number().int().positive(),\n height: z.number().int().positive(),\n }),\n tiles: z.object({\n tileSize: z.number().int().positive(),\n format: z.union([z.literal(\"webp\"), z.literal(\"jpeg\"), z.literal(\"png\")]),\n minZoom: z.number().int().min(0),\n maxZoom: z.number().int().min(0),\n pathTemplate: z.string().min(1),\n levels: z.array(tileLevelSchema),\n }),\n view: z.object({\n defaultCenter: z.tuple([\n z.number().finite().min(0).max(1),\n z.number().finite().min(0).max(1),\n ]),\n defaultZoom: z.number().finite(),\n minZoom: z.number().finite(),\n maxZoom: z.number().finite(),\n }),\n overlays: z\n .object({\n inline: regionCollectionSchema.optional(),\n url: z.string().optional(),\n })\n .optional(),\n assets: z\n .object({\n preview: z.string().optional(),\n })\n .optional(),\n metadata: z\n .object({\n title: z.string().optional(),\n createdAt: z.string().optional(),\n })\n .catchall(z.unknown())\n .optional(),\n});\n\nexport function createManifest(input: CreateManifestInput): PdfMapManifest {\n return manifestSchema.parse({\n version: 1,\n kind: \"pdf-map\",\n ...input,\n });\n}\n\nexport function parseManifest(input: unknown): PdfMapManifest {\n return manifestSchema.parse(input);\n}\n\nexport function resolveTileUrl(args: ResolveTileUrlArgs): string {\n const template = args.overrideTemplate ?? args.manifest.tiles.pathTemplate;\n const relative = template\n .replaceAll(\"{z}\", String(args.z))\n .replaceAll(\"{x}\", String(args.x))\n .replaceAll(\"{y}\", String(args.y));\n\n if (/^https?:\\/\\//.test(relative)) {\n return relative;\n }\n\n if (!args.baseUrl) {\n return relative;\n }\n\n if (/^https?:\\/\\//.test(args.baseUrl)) {\n return new URL(relative.replace(/^\\//, \"\"), ensureTrailingSlash(args.baseUrl)).toString();\n }\n\n return joinRelativeUrl(args.baseUrl, relative);\n}\n\nfunction ensureTrailingSlash(value: string): string {\n return value.endsWith(\"/\") ? value : `${value}/`;\n}\n\nfunction joinRelativeUrl(baseUrl: string, path: string): string {\n const normalizedBase = ensureLeadingSlash(stripTrailingSlash(baseUrl));\n const normalizedPath = stripLeadingSlash(path);\n\n if (!normalizedPath) {\n return normalizedBase || \"/\";\n }\n\n return normalizedBase ? `${normalizedBase}/${normalizedPath}` : `/${normalizedPath}`;\n}\n\nfunction stripLeadingSlash(value: string): string {\n return value.replace(/^\\/+/, \"\");\n}\n\nfunction stripTrailingSlash(value: string): string {\n return value.replace(/\\/+$/, \"\");\n}\n\nfunction ensureLeadingSlash(value: string): string {\n if (!value) {\n return \"\";\n }\n return value.startsWith(\"/\") ? value : `/${value}`;\n}\n","import type { RegionCollection } from \"../../shared/overlays\";\nimport type { TileFormat } from \"../../shared/ingest\";\nimport type { PdfMapManifest, TileLevelManifest } from \"../../shared/manifest\";\nimport { createManifest } from \"../../shared/manifest\";\n\nexport interface BuildManifestOptions {\n id: string;\n title?: string;\n sourceType: \"pdf\" | \"image\";\n originalFilename?: string;\n page?: number;\n width: number;\n height: number;\n mimeType?: string;\n tileSize: number;\n tileFormat: TileFormat;\n levels: TileLevelManifest[];\n baseUrl?: string;\n inlineOverlays?: RegionCollection;\n overlayUrl?: string;\n previewPath?: string;\n}\n\nexport function buildManifest(options: BuildManifestOptions): PdfMapManifest {\n const minZoom = options.levels[0]?.z ?? 0;\n const maxZoom = options.levels[options.levels.length - 1]?.z ?? 0;\n\n return createManifest({\n id: options.id,\n source: {\n type: options.sourceType,\n originalFilename: options.originalFilename,\n page: options.page,\n width: options.width,\n height: options.height,\n mimeType: options.mimeType,\n },\n coordinateSpace: {\n normalized: true,\n width: options.width,\n height: options.height,\n },\n tiles: {\n tileSize: options.tileSize,\n format: options.tileFormat,\n minZoom,\n maxZoom,\n pathTemplate: withBaseUrl(options.baseUrl, `tiles/{z}/{x}/{y}.${options.tileFormat === \"jpeg\" ? \"jpg\" : options.tileFormat}`),\n levels: options.levels,\n },\n view: {\n defaultCenter: [0.5, 0.5],\n defaultZoom: 1,\n minZoom: 0,\n maxZoom: Math.max(maxZoom + 2, 6),\n },\n overlays:\n options.inlineOverlays || options.overlayUrl\n ? {\n inline: options.inlineOverlays,\n url: options.overlayUrl ? withBaseUrl(options.baseUrl, options.overlayUrl) : undefined,\n }\n : undefined,\n assets: options.previewPath\n ? {\n preview: withBaseUrl(options.baseUrl, options.previewPath),\n }\n : undefined,\n metadata: {\n title: options.title,\n createdAt: new Date().toISOString(),\n },\n });\n}\n\nfunction withBaseUrl(baseUrl: string | undefined, path: string) {\n if (!baseUrl) {\n return path;\n }\n\n if (/^https?:\\/\\//.test(baseUrl)) {\n return new URL(path.replace(/^\\//, \"\"), ensureTrailingSlash(baseUrl)).toString();\n }\n\n return joinRelativeUrl(baseUrl, path);\n}\n\nfunction ensureTrailingSlash(baseUrl: string) {\n return baseUrl.endsWith(\"/\") ? baseUrl : `${baseUrl}/`;\n}\n\nfunction joinRelativeUrl(baseUrl: string, path: string) {\n const normalizedBase = ensureLeadingSlash(stripTrailingSlash(baseUrl));\n const normalizedPath = stripLeadingSlash(path);\n\n if (!normalizedPath) {\n return normalizedBase || \"/\";\n }\n\n return normalizedBase ? `${normalizedBase}/${normalizedPath}` : `/${normalizedPath}`;\n}\n\nfunction stripLeadingSlash(value: string) {\n return value.replace(/^\\/+/, \"\");\n}\n\nfunction stripTrailingSlash(value: string) {\n return value.replace(/\\/+$/, \"\");\n}\n\nfunction ensureLeadingSlash(value: string) {\n if (!value) {\n return \"\";\n }\n return value.startsWith(\"/\") ? value : `/${value}`;\n}\n","import type {\n OutputArtifact,\n StorageAdapter,\n StorageFinalizeResult,\n StoredArtifact,\n} from \"../../shared/ingest\";\nimport type { PdfMapManifest } from \"../../shared/manifest\";\n\nexport interface WriteArtifactsResult {\n uploaded: StoredArtifact[];\n storage: StorageFinalizeResult;\n}\n\nexport async function writeArtifacts(\n adapter: StorageAdapter,\n manifest: PdfMapManifest,\n files: OutputArtifact[],\n): Promise<WriteArtifactsResult> {\n const uploaded: StoredArtifact[] = [];\n\n for (const file of files) {\n if (file.kind === \"tile\") {\n const match = file.path.match(/^tiles\\/(\\d+)\\/(\\d+)\\/(\\d+)\\.[^.]+$/);\n if (!match) {\n throw new Error(`Invalid tile path: ${file.path}`);\n }\n uploaded.push(\n await adapter.writeTile({\n z: Number(match[1]),\n x: Number(match[2]),\n y: Number(match[3]),\n ext: file.path.split(\".\").pop() ?? \"bin\",\n bytes: file.bytes,\n contentType: file.contentType,\n }),\n );\n continue;\n }\n\n if (file.kind === \"manifest\") {\n uploaded.push(\n await adapter.writeManifest({\n path: file.path,\n bytes: file.bytes,\n contentType: \"application/json\",\n }),\n );\n continue;\n }\n if (!adapter.writeAsset) {\n throw new Error(`Storage adapter does not support writing ${file.kind} assets.`);\n }\n\n uploaded.push(\n await adapter.writeAsset({\n kind: file.kind,\n path: file.path,\n bytes: file.bytes,\n contentType: file.contentType,\n }),\n );\n }\n\n const storage = await adapter.finalize({\n manifest,\n artifacts: uploaded,\n });\n\n return {\n uploaded,\n storage,\n };\n}\n","import { randomUUID } from \"node:crypto\";\n\nimport type {\n IngestCommonOptions,\n IngestImageOptions,\n IngestResult,\n OutputArtifact,\n} from \"../shared/ingest\";\nimport type { RegionCollection } from \"../shared/overlays\";\nimport { memoryStorageAdapter } from \"./storage/memory\";\nimport { inspectInput } from \"./pipeline/inspectInput\";\nimport { normalizeImage } from \"./pipeline/normalizeImage\";\nimport { buildTilePyramid } from \"./pipeline/buildTilePyramid\";\nimport { buildManifest } from \"./pipeline/manifestBuilder\";\nimport { writeArtifacts } from \"./pipeline/writeArtifacts\";\n\nexport async function ingestImage(options: IngestImageOptions): Promise<IngestResult> {\n const inspected = await inspectInput(options.input);\n\n const normalized = await normalizeImage({\n bytes: inspected.bytes,\n maxDimension: options.maxDimension ?? 12288,\n background: options.background ?? \"#ffffff\",\n });\n\n return ingestRasterizedImage(normalized, {\n common: options,\n id: options.id ?? defaultId(inspected.originalFilename ?? \"image\"),\n title: options.title,\n sourceType: \"image\",\n originalFilename: inspected.originalFilename,\n mimeType: normalized.mimeType,\n });\n}\n\nexport async function ingestRasterizedImage(\n normalized: { bytes: Uint8Array; width: number; height: number; mimeType: string },\n input: {\n common: IngestCommonOptions;\n id: string;\n title?: string;\n sourceType: \"image\" | \"pdf\";\n originalFilename?: string;\n mimeType?: string;\n page?: number;\n },\n): Promise<IngestResult> {\n const tileSize = input.common.tileSize ?? 256;\n const tileFormat = input.common.tileFormat ?? \"webp\";\n const tileQuality = input.common.tileQuality ?? 92;\n const storage = input.common.storage ?? memoryStorageAdapter();\n\n const pyramid = await buildTilePyramid({\n image: normalized.bytes,\n width: normalized.width,\n height: normalized.height,\n tileSize,\n format: tileFormat,\n quality: tileQuality,\n });\n\n const overlayPayload = await resolveOverlayPayload(input.common.overlays);\n\n const manifest = buildManifest({\n id: input.id,\n title: input.title,\n sourceType: input.sourceType,\n originalFilename: input.originalFilename,\n page: input.page,\n width: normalized.width,\n height: normalized.height,\n mimeType: input.mimeType ?? normalized.mimeType,\n tileSize,\n tileFormat,\n levels: pyramid.levels,\n baseUrl: input.common.baseUrl,\n inlineOverlays: overlayPayload.inline,\n overlayUrl: overlayPayload.url,\n previewPath: pyramid.preview.path,\n });\n\n const files: OutputArtifact[] = [...pyramid.tiles, pyramid.preview];\n\n if (overlayPayload.file) {\n files.push(overlayPayload.file);\n }\n\n files.push({\n kind: \"manifest\",\n path: \"manifest.json\",\n contentType: \"application/json\",\n bytes: new TextEncoder().encode(JSON.stringify(manifest, null, 2)),\n });\n\n const { uploaded, storage: storageResult } = await writeArtifacts(storage, manifest, files);\n\n return {\n manifest,\n width: normalized.width,\n height: normalized.height,\n tileCount: pyramid.tiles.length,\n files,\n uploaded,\n warnings: [],\n storage: storageResult,\n };\n}\n\nasync function resolveOverlayPayload(\n input?: RegionCollection | string,\n): Promise<{\n inline?: RegionCollection;\n url?: string;\n file?: OutputArtifact;\n}> {\n if (!input) {\n return {};\n }\n\n if (typeof input === \"string\") {\n return {\n url: input,\n };\n }\n\n const bytes = new TextEncoder().encode(JSON.stringify(input, null, 2));\n if (bytes.byteLength < 64 * 1024) {\n return {\n inline: input,\n };\n }\n\n return {\n url: \"regions.json\",\n file: {\n kind: \"overlay\",\n path: \"regions.json\",\n contentType: \"application/json\",\n bytes,\n },\n };\n}\n\nfunction defaultId(seed: string) {\n const safe = seed\n .replace(/\\.[^.]+$/, \"\")\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n\n return safe || randomUUID();\n}\n","import { createCanvas, DOMMatrix, ImageData, Path2D } from \"@napi-rs/canvas\";\n\nexport interface RasterizedPdf {\n bytes: Uint8Array;\n width: number;\n height: number;\n mimeType: string;\n}\n\nexport interface RasterizePdfOptions {\n bytes: Uint8Array;\n page: number;\n maxDimension: number;\n rasterDpi?: number;\n background: string;\n}\n\ninterface PdfJsModule {\n getDocument: (src: unknown) => {\n promise: Promise<any>;\n };\n}\n\nexport async function rasterizePdf(options: RasterizePdfOptions): Promise<RasterizedPdf> {\n installNodeCanvasGlobals();\n const pdfjs = (await import(\"pdfjs-dist/legacy/build/pdf.mjs\")) as PdfJsModule;\n const loadingTask = pdfjs.getDocument({\n data: options.bytes,\n useSystemFonts: true,\n });\n const pdf = await loadingTask.promise;\n const page = await pdf.getPage(options.page);\n const viewport = page.getViewport({ scale: 1 });\n const scale = resolveScale({\n viewportWidth: viewport.width,\n viewportHeight: viewport.height,\n maxDimension: options.maxDimension,\n rasterDpi: options.rasterDpi,\n });\n const scaledViewport = page.getViewport({\n scale: scale <= 0 ? 1 : scale,\n });\n\n const canvas = createCanvas(Math.ceil(scaledViewport.width), Math.ceil(scaledViewport.height));\n const context = canvas.getContext(\"2d\");\n context.fillStyle = options.background;\n context.fillRect(0, 0, canvas.width, canvas.height);\n\n await page.render({\n canvasContext: context as never,\n viewport: scaledViewport,\n }).promise;\n\n const png = await canvas.encode(\"png\");\n\n await page.cleanup();\n await pdf.cleanup();\n await pdf.destroy();\n\n return {\n bytes: new Uint8Array(png),\n width: canvas.width,\n height: canvas.height,\n mimeType: \"image/png\",\n };\n}\n\nfunction installNodeCanvasGlobals() {\n if (!(\"DOMMatrix\" in globalThis)) {\n (globalThis as Record<string, unknown>).DOMMatrix = DOMMatrix;\n }\n if (!(\"ImageData\" in globalThis)) {\n (globalThis as Record<string, unknown>).ImageData = ImageData;\n }\n if (!(\"Path2D\" in globalThis)) {\n (globalThis as Record<string, unknown>).Path2D = Path2D;\n }\n}\n\nfunction resolveScale(options: {\n viewportWidth: number;\n viewportHeight: number;\n maxDimension: number;\n rasterDpi?: number;\n}) {\n if (options.rasterDpi && Number.isFinite(options.rasterDpi) && options.rasterDpi > 0) {\n return options.rasterDpi / 72;\n }\n\n return Math.min(\n 1,\n options.maxDimension / Math.max(options.viewportWidth, options.viewportHeight),\n );\n}\n","import { randomUUID } from \"node:crypto\";\n\nimport type { IngestPdfOptions, IngestResult } from \"../shared/ingest\";\nimport { inspectInput } from \"./pipeline/inspectInput\";\nimport { rasterizePdf } from \"./pipeline/rasterizePdf\";\nimport { ingestRasterizedImage } from \"./ingestImage\";\n\nexport async function ingestPdf(options: IngestPdfOptions): Promise<IngestResult> {\n const inspected = await inspectInput(options.input);\n const page = options.page ?? 1;\n const rasterized = await rasterizePdf({\n bytes: inspected.bytes,\n page,\n maxDimension: options.maxDimension ?? 12288,\n rasterDpi: options.rasterDpi,\n background: options.background ?? \"#ffffff\",\n });\n\n return ingestRasterizedImage(rasterized, {\n common: options,\n id: options.id ?? defaultId(inspected.originalFilename ?? \"pdf\"),\n title: options.title,\n sourceType: \"pdf\",\n originalFilename: inspected.originalFilename,\n mimeType: \"application/pdf\",\n page,\n });\n}\n\nfunction defaultId(seed: string) {\n const safe = seed\n .replace(/\\.[^.]+$/, \"\")\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n\n return safe || randomUUID();\n}\n","import { mkdir, rm, writeFile } from \"node:fs/promises\";\nimport { dirname, join, resolve } from \"node:path\";\n\nimport type {\n FinalizeStorageArgs,\n StorageAdapter,\n StorageFinalizeResult,\n StoredArtifact,\n WriteAssetArgs,\n WriteManifestArgs,\n WriteTileArgs,\n} from \"../../shared/ingest\";\n\nexport interface LocalStorageAdapterOptions {\n baseDir: string;\n clean?: boolean;\n manifestName?: string;\n}\n\nexport function localStorageAdapter(options: LocalStorageAdapterOptions): StorageAdapter {\n const baseDir = resolve(options.baseDir);\n const manifestName = options.manifestName ?? \"manifest.json\";\n const artifacts: StoredArtifact[] = [];\n let cleaned = false;\n\n const ensureParent = async (filePath: string) => {\n await mkdir(dirname(filePath), { recursive: true });\n };\n\n const ensureClean = async () => {\n if (!options.clean || cleaned) {\n return;\n }\n cleaned = true;\n await rm(baseDir, { recursive: true, force: true });\n };\n\n const write = async (\n kind: StoredArtifact[\"kind\"],\n relativePath: string,\n contentType: string,\n bytes: Uint8Array,\n ): Promise<StoredArtifact> => {\n await ensureClean();\n const path = join(baseDir, relativePath);\n await ensureParent(path);\n await writeFile(path, bytes);\n const artifact: StoredArtifact = {\n kind,\n path,\n contentType,\n size: bytes.byteLength,\n };\n artifacts.push(artifact);\n return artifact;\n };\n\n return {\n async writeTile(args: WriteTileArgs) {\n return write(\n \"tile\",\n `tiles/${args.z}/${args.x}/${args.y}.${args.ext}`,\n args.contentType,\n args.bytes,\n );\n },\n async writeManifest(args: WriteManifestArgs) {\n return write(\"manifest\", manifestName, args.contentType, args.bytes);\n },\n async writeAsset(args: WriteAssetArgs) {\n return write(args.kind, args.path, args.contentType, args.bytes);\n },\n async finalize(_args: FinalizeStorageArgs): Promise<StorageFinalizeResult> {\n return {\n artifacts: [...artifacts],\n };\n },\n };\n}\n","#!/usr/bin/env node\nimport { resolve } from \"node:path\";\n\nimport { cac } from \"cac\";\n\nimport { ingestImage } from \"./ingestImage\";\nimport { ingestPdf } from \"./ingestPdf\";\nimport { localStorageAdapter } from \"./storage/local\";\n\nconst cli = cac(\"pdf-mapview\");\n\ncli\n .command(\"ingest <input>\", \"Ingest a PDF or image into a tiled map manifest\")\n .option(\"--page <page>\", \"PDF page to ingest\", {\n default: 1,\n })\n .option(\"--id <id>\", \"Manifest id\")\n .option(\"--title <title>\", \"Manifest title\")\n .option(\"--out-dir <outDir>\", \"Write output to a local directory\")\n .option(\"--type <type>\", \"Force source type: pdf or image\")\n .option(\"--base-url <baseUrl>\", \"Base URL for manifest asset references\")\n .option(\"--adapter <adapter>\", \"Module path for a custom storage adapter factory\")\n .option(\"--adapter-export <name>\", \"Named export for the custom storage adapter\", {\n default: \"default\",\n })\n .option(\"--tile-size <tileSize>\", \"Tile size: 256 or 512\", {\n default: 256,\n })\n .option(\"--format <format>\", \"Tile format: webp, jpeg, or png\", {\n default: \"webp\",\n })\n .option(\"--quality <quality>\", \"Tile quality\", {\n default: 92,\n })\n .option(\"--raster-dpi <rasterDpi>\", \"Rasterize PDF pages at a fixed DPI\")\n .option(\"--max-dimension <maxDimension>\", \"Max raster dimension\", {\n default: 12288,\n })\n .action(async (input, flags) => {\n const outDir = flags.outDir ? resolve(String(flags.outDir)) : undefined;\n const storage = flags.adapter\n ? await loadCustomAdapter(String(flags.adapter), String(flags.adapterExport))\n : outDir\n ? localStorageAdapter({\n baseDir: outDir,\n clean: true,\n })\n : undefined;\n\n const type = String(flags.type ?? inferType(String(input)));\n const common = {\n id: flags.id ? String(flags.id) : undefined,\n title: flags.title ? String(flags.title) : undefined,\n tileSize: Number(flags.tileSize) as 256 | 512,\n tileFormat: String(flags.format) as \"webp\" | \"jpeg\" | \"png\",\n tileQuality: Number(flags.quality),\n rasterDpi: flags.rasterDpi ? Number(flags.rasterDpi) : undefined,\n maxDimension: Number(flags.maxDimension),\n baseUrl: flags.baseUrl ? String(flags.baseUrl) : undefined,\n storage,\n };\n\n const result =\n type === \"pdf\"\n ? await ingestPdf({\n ...common,\n input: String(input),\n page: Number(flags.page),\n })\n : await ingestImage({\n ...common,\n input: String(input),\n });\n\n process.stdout.write(`${JSON.stringify(result.manifest, null, 2)}\\n`);\n });\n\ncli.help();\ncli.parse();\n\nfunction inferType(input: string) {\n return /\\.pdf$/i.test(input) ? \"pdf\" : \"image\";\n}\n\nasync function loadCustomAdapter(modulePath: string, exportName: string) {\n const mod = (await import(resolve(modulePath))) as Record<string, unknown>;\n const candidate = mod[exportName];\n if (typeof candidate === \"function\") {\n return candidate();\n }\n if (candidate && typeof candidate === \"object\") {\n return candidate;\n }\n throw new Error(`Unable to load storage adapter export \"${exportName}\" from ${modulePath}`);\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
#!/usr/bin/env node
|