@deckflow/deckuse 1.2.1 → 1.3.1
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/README.es.md +342 -0
- package/README.fr.md +342 -0
- package/README.ja.md +342 -0
- package/README.ko.md +342 -0
- package/README.md +60 -8
- package/README.pt-BR.md +342 -0
- package/README.ru.md +342 -0
- package/README.zh-CN.md +367 -0
- package/assets/default.docx +0 -0
- package/assets/default.pptx +0 -0
- package/dist/bin.js +188 -21
- package/dist/bin.js.map +1 -1
- package/dist/core/adapter.d.ts +24 -0
- package/dist/core/adapter.d.ts.map +1 -0
- package/dist/core/adapter.js +20 -0
- package/dist/core/adapter.js.map +1 -0
- package/dist/core/executor.d.ts +24 -0
- package/dist/core/executor.d.ts.map +1 -0
- package/dist/core/executor.js +65 -0
- package/dist/core/executor.js.map +1 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +7 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/length.d.ts +27 -0
- package/dist/core/length.d.ts.map +1 -0
- package/dist/core/length.js +63 -0
- package/dist/core/length.js.map +1 -0
- package/dist/core/measure.d.ts +24 -0
- package/dist/core/measure.d.ts.map +1 -0
- package/dist/core/measure.js +79 -0
- package/dist/core/measure.js.map +1 -0
- package/dist/core/not-implemented.d.ts +3 -0
- package/dist/core/not-implemented.d.ts.map +1 -0
- package/dist/core/not-implemented.js +12 -0
- package/dist/core/not-implemented.js.map +1 -0
- package/dist/core/schema.d.ts +3065 -0
- package/dist/core/schema.d.ts.map +1 -0
- package/dist/core/schema.js +799 -0
- package/dist/core/schema.js.map +1 -0
- package/dist/default-template.d.ts +8 -0
- package/dist/default-template.d.ts.map +1 -0
- package/dist/default-template.js +29 -0
- package/dist/default-template.js.map +1 -0
- package/dist/docx/adapter.d.ts +29 -0
- package/dist/docx/adapter.d.ts.map +1 -0
- package/dist/docx/adapter.js +442 -0
- package/dist/docx/adapter.js.map +1 -0
- package/dist/docx/addressing.d.ts +18 -0
- package/dist/docx/addressing.d.ts.map +1 -0
- package/dist/docx/addressing.js +111 -0
- package/dist/docx/addressing.js.map +1 -0
- package/dist/docx/blank.d.ts +4 -0
- package/dist/docx/blank.d.ts.map +1 -0
- package/dist/docx/blank.js +75 -0
- package/dist/docx/blank.js.map +1 -0
- package/dist/docx/index-sync.d.ts +7 -0
- package/dist/docx/index-sync.d.ts.map +1 -0
- package/dist/docx/index-sync.js +24 -0
- package/dist/docx/index-sync.js.map +1 -0
- package/dist/docx/index.d.ts +5 -0
- package/dist/docx/index.d.ts.map +1 -0
- package/dist/docx/index.js +4 -0
- package/dist/docx/index.js.map +1 -0
- package/dist/docx/indexer.d.ts +41 -0
- package/dist/docx/indexer.d.ts.map +1 -0
- package/dist/docx/indexer.js +353 -0
- package/dist/docx/indexer.js.map +1 -0
- package/dist/docx/mutations.d.ts +5 -0
- package/dist/docx/mutations.d.ts.map +1 -0
- package/dist/docx/mutations.js +311 -0
- package/dist/docx/mutations.js.map +1 -0
- package/dist/docx/paragraphs.d.ts +26 -0
- package/dist/docx/paragraphs.d.ts.map +1 -0
- package/dist/docx/paragraphs.js +314 -0
- package/dist/docx/paragraphs.js.map +1 -0
- package/dist/docx/properties.d.ts +23 -0
- package/dist/docx/properties.d.ts.map +1 -0
- package/dist/docx/properties.js +414 -0
- package/dist/docx/properties.js.map +1 -0
- package/dist/docx/tables.d.ts +4 -0
- package/dist/docx/tables.d.ts.map +1 -0
- package/dist/docx/tables.js +64 -0
- package/dist/docx/tables.js.map +1 -0
- package/dist/docx/text-spans.d.ts +25 -0
- package/dist/docx/text-spans.d.ts.map +1 -0
- package/dist/docx/text-spans.js +142 -0
- package/dist/docx/text-spans.js.map +1 -0
- package/dist/docx/types.d.ts +27 -0
- package/dist/docx/types.d.ts.map +1 -0
- package/dist/docx/types.js +2 -0
- package/dist/docx/types.js.map +1 -0
- package/dist/docx/workspace.d.ts +20 -0
- package/dist/docx/workspace.d.ts.map +1 -0
- package/dist/docx/workspace.js +145 -0
- package/dist/docx/workspace.js.map +1 -0
- package/dist/docx/xml.d.ts +18 -0
- package/dist/docx/xml.d.ts.map +1 -0
- package/dist/docx/xml.js +87 -0
- package/dist/docx/xml.js.map +1 -0
- package/dist/edition-config/index.d.ts +25 -0
- package/dist/edition-config/index.d.ts.map +1 -0
- package/dist/edition-config/index.js +22 -0
- package/dist/edition-config/index.js.map +1 -0
- package/dist/edition.d.ts +2 -2
- package/dist/edition.d.ts.map +1 -1
- package/dist/edition.js +1 -1
- package/dist/edition.js.map +1 -1
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +124 -32
- package/dist/help.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/key/index.d.ts +2 -0
- package/dist/key/index.d.ts.map +1 -0
- package/dist/key/index.js +3 -0
- package/dist/key/index.js.map +1 -0
- package/dist/monitor-daemon.d.ts +21 -8
- package/dist/monitor-daemon.d.ts.map +1 -1
- package/dist/monitor-daemon.js +189 -51
- package/dist/monitor-daemon.js.map +1 -1
- package/dist/monitor-registry.d.ts +34 -0
- package/dist/monitor-registry.d.ts.map +1 -0
- package/dist/monitor-registry.js +191 -0
- package/dist/monitor-registry.js.map +1 -0
- package/dist/monitor.d.ts.map +1 -1
- package/dist/monitor.js +2 -12
- package/dist/monitor.js.map +1 -1
- package/dist/numbers/index.d.ts +2 -0
- package/dist/numbers/index.d.ts.map +1 -0
- package/dist/numbers/index.js +3 -0
- package/dist/numbers/index.js.map +1 -0
- package/dist/opc/index.d.ts +96 -0
- package/dist/opc/index.d.ts.map +1 -0
- package/dist/opc/index.js +596 -0
- package/dist/opc/index.js.map +1 -0
- package/dist/pptx/adapter.d.ts +167 -0
- package/dist/pptx/adapter.d.ts.map +1 -0
- package/dist/pptx/adapter.js +841 -0
- package/dist/pptx/adapter.js.map +1 -0
- package/dist/pptx/addressing.d.ts +47 -0
- package/dist/pptx/addressing.d.ts.map +1 -0
- package/dist/pptx/addressing.js +481 -0
- package/dist/pptx/addressing.js.map +1 -0
- package/dist/pptx/align.d.ts +24 -0
- package/dist/pptx/align.d.ts.map +1 -0
- package/dist/pptx/align.js +112 -0
- package/dist/pptx/align.js.map +1 -0
- package/dist/pptx/chart-classify.d.ts +10 -0
- package/dist/pptx/chart-classify.d.ts.map +1 -0
- package/dist/pptx/chart-classify.js +58 -0
- package/dist/pptx/chart-classify.js.map +1 -0
- package/dist/pptx/chart.d.ts +42 -0
- package/dist/pptx/chart.d.ts.map +1 -0
- package/dist/pptx/chart.js +614 -0
- package/dist/pptx/chart.js.map +1 -0
- package/dist/pptx/edition-extension.d.ts +25 -0
- package/dist/pptx/edition-extension.d.ts.map +1 -0
- package/dist/pptx/edition-extension.js +10 -0
- package/dist/pptx/edition-extension.js.map +1 -0
- package/dist/pptx/edition.d.ts +20 -0
- package/dist/pptx/edition.d.ts.map +1 -0
- package/dist/pptx/edition.js +69 -0
- package/dist/pptx/edition.js.map +1 -0
- package/dist/pptx/elements.d.ts +12 -0
- package/dist/pptx/elements.d.ts.map +1 -0
- package/dist/pptx/elements.js +224 -0
- package/dist/pptx/elements.js.map +1 -0
- package/dist/pptx/hyperlink.d.ts +7 -0
- package/dist/pptx/hyperlink.d.ts.map +1 -0
- package/dist/pptx/hyperlink.js +81 -0
- package/dist/pptx/hyperlink.js.map +1 -0
- package/dist/pptx/index-sync.d.ts +7 -0
- package/dist/pptx/index-sync.d.ts.map +1 -0
- package/dist/pptx/index-sync.js +24 -0
- package/dist/pptx/index-sync.js.map +1 -0
- package/dist/pptx/index.d.ts +10 -0
- package/dist/pptx/index.d.ts.map +1 -0
- package/dist/pptx/index.js +7 -0
- package/dist/pptx/index.js.map +1 -0
- package/dist/pptx/indexer.d.ts +19 -0
- package/dist/pptx/indexer.d.ts.map +1 -0
- package/dist/pptx/indexer.js +320 -0
- package/dist/pptx/indexer.js.map +1 -0
- package/dist/pptx/layout-ref.d.ts +41 -0
- package/dist/pptx/layout-ref.d.ts.map +1 -0
- package/dist/pptx/layout-ref.js +145 -0
- package/dist/pptx/layout-ref.js.map +1 -0
- package/dist/pptx/media.d.ts +15 -0
- package/dist/pptx/media.d.ts.map +1 -0
- package/dist/pptx/media.js +145 -0
- package/dist/pptx/media.js.map +1 -0
- package/dist/pptx/mutations.d.ts +11 -0
- package/dist/pptx/mutations.d.ts.map +1 -0
- package/dist/pptx/mutations.js +1114 -0
- package/dist/pptx/mutations.js.map +1 -0
- package/dist/pptx/picture.d.ts +25 -0
- package/dist/pptx/picture.d.ts.map +1 -0
- package/dist/pptx/picture.js +118 -0
- package/dist/pptx/picture.js.map +1 -0
- package/dist/pptx/placeholder-role.d.ts +19 -0
- package/dist/pptx/placeholder-role.d.ts.map +1 -0
- package/dist/pptx/placeholder-role.js +71 -0
- package/dist/pptx/placeholder-role.js.map +1 -0
- package/dist/pptx/properties.d.ts +13 -0
- package/dist/pptx/properties.d.ts.map +1 -0
- package/dist/pptx/properties.js +587 -0
- package/dist/pptx/properties.js.map +1 -0
- package/dist/pptx/resolve-properties.d.ts +17 -0
- package/dist/pptx/resolve-properties.d.ts.map +1 -0
- package/dist/pptx/resolve-properties.js +623 -0
- package/dist/pptx/resolve-properties.js.map +1 -0
- package/dist/pptx/slide-size.d.ts +9 -0
- package/dist/pptx/slide-size.d.ts.map +1 -0
- package/dist/pptx/slide-size.js +29 -0
- package/dist/pptx/slide-size.js.map +1 -0
- package/dist/pptx/slides.d.ts +15 -0
- package/dist/pptx/slides.d.ts.map +1 -0
- package/dist/pptx/slides.js +247 -0
- package/dist/pptx/slides.js.map +1 -0
- package/dist/pptx/table-measure.d.ts +43 -0
- package/dist/pptx/table-measure.d.ts.map +1 -0
- package/dist/pptx/table-measure.js +70 -0
- package/dist/pptx/table-measure.js.map +1 -0
- package/dist/pptx/table.d.ts +26 -0
- package/dist/pptx/table.d.ts.map +1 -0
- package/dist/pptx/table.js +638 -0
- package/dist/pptx/table.js.map +1 -0
- package/dist/pptx/types.d.ts +27 -0
- package/dist/pptx/types.d.ts.map +1 -0
- package/dist/pptx/types.js +2 -0
- package/dist/pptx/types.js.map +1 -0
- package/dist/pptx/workspace.d.ts +23 -0
- package/dist/pptx/workspace.d.ts.map +1 -0
- package/dist/pptx/workspace.js +148 -0
- package/dist/pptx/workspace.js.map +1 -0
- package/dist/pptx/xml.d.ts +75 -0
- package/dist/pptx/xml.d.ts.map +1 -0
- package/dist/pptx/xml.js +390 -0
- package/dist/pptx/xml.js.map +1 -0
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +14 -2
- package/dist/render.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/workspace/git.d.ts +7 -0
- package/dist/workspace/git.d.ts.map +1 -0
- package/dist/workspace/git.js +119 -0
- package/dist/workspace/git.js.map +1 -0
- package/dist/workspace/index.d.ts +7 -0
- package/dist/workspace/index.d.ts.map +1 -0
- package/dist/workspace/index.js +7 -0
- package/dist/workspace/index.js.map +1 -0
- package/dist/workspace/lock.d.ts +5 -0
- package/dist/workspace/lock.d.ts.map +1 -0
- package/dist/workspace/lock.js +104 -0
- package/dist/workspace/lock.js.map +1 -0
- package/dist/workspace/metadata.d.ts +4 -0
- package/dist/workspace/metadata.d.ts.map +1 -0
- package/dist/workspace/metadata.js +21 -0
- package/dist/workspace/metadata.js.map +1 -0
- package/dist/workspace/operations.d.ts +14 -0
- package/dist/workspace/operations.d.ts.map +1 -0
- package/dist/workspace/operations.js +35 -0
- package/dist/workspace/operations.js.map +1 -0
- package/dist/workspace/paths.d.ts +11 -0
- package/dist/workspace/paths.d.ts.map +1 -0
- package/dist/workspace/paths.js +12 -0
- package/dist/workspace/paths.js.map +1 -0
- package/dist/workspace/revision.d.ts +6 -0
- package/dist/workspace/revision.d.ts.map +1 -0
- package/dist/workspace/revision.js +15 -0
- package/dist/workspace/revision.js.map +1 -0
- package/dist/xlsx/index.d.ts +2 -0
- package/dist/xlsx/index.d.ts.map +1 -0
- package/dist/xlsx/index.js +3 -0
- package/dist/xlsx/index.js.map +1 -0
- package/package.json +51 -27
- package/schema/command.schema.json +2405 -0
- package/dist/.tsbuildinfo +0 -1
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { resolve } from 'node:path';
|
|
2
|
+
import { writeMetadata } from '../workspace/index.js';
|
|
3
|
+
import { buildIndex } from './indexer.js';
|
|
4
|
+
import { readIndex } from './workspace.js';
|
|
5
|
+
export async function loadIndex(workspace, archive, manifest, options) {
|
|
6
|
+
const root = resolve(workspace);
|
|
7
|
+
let index;
|
|
8
|
+
try {
|
|
9
|
+
index = await readIndex(root);
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
index = buildIndex(archive, manifest.workspaceId, manifest.revision);
|
|
13
|
+
if (options?.persist)
|
|
14
|
+
await writeMetadata(root, manifest, index);
|
|
15
|
+
return index;
|
|
16
|
+
}
|
|
17
|
+
if (index.revision !== manifest.revision) {
|
|
18
|
+
index = buildIndex(archive, manifest.workspaceId, manifest.revision);
|
|
19
|
+
if (options?.persist)
|
|
20
|
+
await writeMetadata(root, manifest, index);
|
|
21
|
+
}
|
|
22
|
+
return index;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=index-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-sync.js","sourceRoot":"","sources":["../../src/pptx/index-sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,SAAiB,EACjB,OAAmB,EACnB,QAA2B,EAC3B,OAA+B;IAE/B,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,IAAI,KAAgB,CAAC;IACrB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrE,IAAI,OAAO,EAAE,OAAO;YAAE,MAAM,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QACjE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACzC,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrE,IAAI,OAAO,EAAE,OAAO;YAAE,MAAM,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { pptxAdapter, pptxCapabilities } from './adapter.js';
|
|
2
|
+
export { buildIndex } from './indexer.js';
|
|
3
|
+
export { EDITION, EDITION_VARIANT, DISTRIBUTION_CHANNEL, editionCapabilities, editionMetadata, editionGatedWriteKind, writeDenialReason, assertWritable, clearPptxEditionExtension, getPptxEditionExtension, registerPptxEditionExtension, } from './edition.js';
|
|
4
|
+
export type { EditionGatedWriteKind, PptxEditionExtension } from './edition.js';
|
|
5
|
+
export { classifyChartDocument, classifyChartPart } from './chart-classify.js';
|
|
6
|
+
export type { ChartVariant } from './chart-classify.js';
|
|
7
|
+
export { applyChartProperties } from './chart.js';
|
|
8
|
+
export { setNodeText, setNodeTextBlocks } from './xml.js';
|
|
9
|
+
export type { IndexedElement, IndexFile, ElementKind } from './types.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pptx/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EACL,OAAO,EACP,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,yBAAyB,EACzB,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC1D,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { pptxAdapter, pptxCapabilities } from './adapter.js';
|
|
2
|
+
export { buildIndex } from './indexer.js';
|
|
3
|
+
export { EDITION, EDITION_VARIANT, DISTRIBUTION_CHANNEL, editionCapabilities, editionMetadata, editionGatedWriteKind, writeDenialReason, assertWritable, clearPptxEditionExtension, getPptxEditionExtension, registerPptxEditionExtension, } from './edition.js';
|
|
4
|
+
export { classifyChartDocument, classifyChartPart } from './chart-classify.js';
|
|
5
|
+
export { applyChartProperties } from './chart.js';
|
|
6
|
+
export { setNodeText, setNodeTextBlocks } from './xml.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pptx/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EACL,OAAO,EACP,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,yBAAyB,EACzB,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ElementRef } from '../core/index.js';
|
|
2
|
+
import type { OpcArchive } from '../opc/index.js';
|
|
3
|
+
import type { IndexFile, IndexedElement } from './types.js';
|
|
4
|
+
export declare function buildIndex(archive: OpcArchive, documentId: string, rev: string): IndexFile;
|
|
5
|
+
export declare const slidePageMap: (index: IndexFile) => Map<string, number>;
|
|
6
|
+
export declare const slidesForItem: (index: IndexFile, item: IndexedElement) => number[];
|
|
7
|
+
export declare const slidesForRef: (index: IndexFile, ref: ElementRef) => number[];
|
|
8
|
+
export declare const mergeSlides: (...groups: number[][]) => number[];
|
|
9
|
+
export declare const findIndexed: (index: IndexFile, ref: ElementRef) => IndexedElement | undefined;
|
|
10
|
+
export declare function matchesSelector(item: IndexedElement, selector: string | {
|
|
11
|
+
kind?: string | undefined;
|
|
12
|
+
name?: string | undefined;
|
|
13
|
+
text?: string | undefined;
|
|
14
|
+
textRegex?: string | undefined;
|
|
15
|
+
id?: string | undefined;
|
|
16
|
+
slide?: string | undefined;
|
|
17
|
+
hasText?: boolean | string | undefined;
|
|
18
|
+
}): boolean;
|
|
19
|
+
//# sourceMappingURL=indexer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../../src/pptx/indexer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAIlD,OAAO,KAAK,EAAe,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAgEzE,wBAAgB,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAsM1F;AACD,eAAO,MAAM,YAAY,GAAI,OAAO,SAAS,KAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAUjE,CAAC;AACF,eAAO,MAAM,aAAa,GAAI,OAAO,SAAS,EAAE,MAAM,cAAc,KAAG,MAAM,EAW5E,CAAC;AACF,eAAO,MAAM,YAAY,GAAI,OAAO,SAAS,EAAE,KAAK,UAAU,KAAG,MAAM,EAGtE,CAAC;AACF,eAAO,MAAM,WAAW,GAAI,GAAG,QAAQ,MAAM,EAAE,EAAE,KAAG,MAAM,EACP,CAAC;AACpD,eAAO,MAAM,WAAW,GAAI,OAAO,SAAS,EAAE,KAAK,UAAU,KAAG,cAAc,GAAG,SACS,CAAC;AAC3F,wBAAgB,eAAe,CAC7B,IAAI,EAAE,cAAc,EACpB,QAAQ,EACJ,MAAM,GACN;IACE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;CACxC,GACJ,OAAO,CAkDT"}
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
import { basename } from 'node:path';
|
|
2
|
+
import { classifyChartPart } from './chart-classify.js';
|
|
3
|
+
import { readSeriesColor } from './chart.js';
|
|
4
|
+
import { mediaHref } from './workspace.js';
|
|
5
|
+
import { NS, REL, attr, cNvPr, children, descendants, first, notesBodyText, root, textOf, } from './xml.js';
|
|
6
|
+
const directChild = (node, localName) => children(node).find((child) => child.localName === localName);
|
|
7
|
+
const classify = (node) => {
|
|
8
|
+
if (node.localName === 'sp')
|
|
9
|
+
return first(node, 'txBody') ? 'textbox' : 'shape';
|
|
10
|
+
if (node.localName === 'pic')
|
|
11
|
+
return first(node, 'videoFile') ? 'video' : first(node, 'audioFile') ? 'audio' : 'picture';
|
|
12
|
+
if (node.localName === 'cxnSp')
|
|
13
|
+
return 'connector';
|
|
14
|
+
if (node.localName === 'grpSp')
|
|
15
|
+
return 'group';
|
|
16
|
+
if (node.localName === 'graphicFrame') {
|
|
17
|
+
if (first(node, 'tbl'))
|
|
18
|
+
return 'table';
|
|
19
|
+
if (first(node, 'chart'))
|
|
20
|
+
return 'chart';
|
|
21
|
+
}
|
|
22
|
+
return undefined;
|
|
23
|
+
};
|
|
24
|
+
const readPlaceholder = (node) => {
|
|
25
|
+
const nv = directChild(node, 'nvSpPr') ??
|
|
26
|
+
directChild(node, 'nvPicPr') ??
|
|
27
|
+
directChild(node, 'nvCxnSpPr') ??
|
|
28
|
+
directChild(node, 'nvGraphicFramePr') ??
|
|
29
|
+
directChild(node, 'nvGrpSpPr');
|
|
30
|
+
const nvPr = nv ? directChild(nv, 'nvPr') : undefined;
|
|
31
|
+
const ph = nvPr ? directChild(nvPr, 'ph') : undefined;
|
|
32
|
+
if (!ph)
|
|
33
|
+
return undefined;
|
|
34
|
+
const type = attr(ph, 'type') ?? 'body';
|
|
35
|
+
const idx = attr(ph, 'idx');
|
|
36
|
+
return { type, ...(idx !== undefined ? { idx } : {}) };
|
|
37
|
+
};
|
|
38
|
+
const transformOf = (node) => {
|
|
39
|
+
const x = first(node, 'xfrm');
|
|
40
|
+
if (!x)
|
|
41
|
+
return;
|
|
42
|
+
const off = first(x, 'off'), ext = first(x, 'ext'), result = {};
|
|
43
|
+
for (const [key, n, a] of [
|
|
44
|
+
['x', off, 'x'],
|
|
45
|
+
['y', off, 'y'],
|
|
46
|
+
['width', ext, 'cx'],
|
|
47
|
+
['height', ext, 'cy'],
|
|
48
|
+
]) {
|
|
49
|
+
const v = attr(n, a);
|
|
50
|
+
if (v !== undefined)
|
|
51
|
+
result[key] = Number(v);
|
|
52
|
+
}
|
|
53
|
+
const rot = attr(x, 'rot');
|
|
54
|
+
if (rot !== undefined)
|
|
55
|
+
result['rotation'] = Number(rot) / 60000;
|
|
56
|
+
return result;
|
|
57
|
+
};
|
|
58
|
+
export function buildIndex(archive, documentId, rev) {
|
|
59
|
+
const elements = [];
|
|
60
|
+
const presentation = archive.readXml('/ppt/presentation.xml'), rels = archive.getRelationships('/ppt/presentation.xml');
|
|
61
|
+
for (const sld of descendants(presentation, 'sldId')) {
|
|
62
|
+
if (sld.namespaceURI && sld.namespaceURI !== NS.p)
|
|
63
|
+
continue;
|
|
64
|
+
const rid = sld.getAttributeNS(NS.r, 'id') ?? attr(sld, 'r:id'), rel = rels.find((r) => r.id === rid);
|
|
65
|
+
if (!rel?.resolvedTarget)
|
|
66
|
+
continue;
|
|
67
|
+
const partUri = rel.resolvedTarget, slideId = attr(sld, 'id') ?? rid ?? basename(partUri), slideRef = {
|
|
68
|
+
documentId,
|
|
69
|
+
elementId: `slide:${slideId}`,
|
|
70
|
+
path: partUri,
|
|
71
|
+
revision: rev,
|
|
72
|
+
};
|
|
73
|
+
elements.push({
|
|
74
|
+
ref: slideRef,
|
|
75
|
+
kind: 'slide',
|
|
76
|
+
partUri,
|
|
77
|
+
slideId,
|
|
78
|
+
name: `Slide ${slideId}`,
|
|
79
|
+
location: { slideId, partUri },
|
|
80
|
+
});
|
|
81
|
+
const doc = archive.readXml(partUri);
|
|
82
|
+
const walk = (node, ancestors, parentId) => {
|
|
83
|
+
for (const child of children(node)) {
|
|
84
|
+
const kind = classify(child);
|
|
85
|
+
if (!kind) {
|
|
86
|
+
walk(child, ancestors, parentId);
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
const own = attr(cNvPr(child), 'id') ?? child.nodeName, id = `${slideId}:${[...ancestors, own].join('.')}`, transform = transformOf(child), name = attr(cNvPr(child), 'name'), text = textOf(child);
|
|
90
|
+
const ph = readPlaceholder(child);
|
|
91
|
+
const placeholderType = ph?.type;
|
|
92
|
+
const placeholderIdx = ph?.idx;
|
|
93
|
+
const pr = cNvPr(child);
|
|
94
|
+
const hlink = pr ? children(pr).find((c) => c.localName === 'hlinkClick') : undefined;
|
|
95
|
+
const hlinkRid = hlink?.getAttributeNS(NS.r, 'id') ?? (hlink ? attr(hlink, 'r:id') : undefined);
|
|
96
|
+
const hlinkRel = hlinkRid
|
|
97
|
+
? archive.getRelationships(partUri).find((r) => r.id === hlinkRid)
|
|
98
|
+
: undefined;
|
|
99
|
+
const indexed = {
|
|
100
|
+
ref: { documentId, elementId: id, path: `${partUri}#${id}`, revision: rev },
|
|
101
|
+
kind,
|
|
102
|
+
partUri,
|
|
103
|
+
slideId,
|
|
104
|
+
parentId,
|
|
105
|
+
location: { slideId, partUri, ancestorIds: ancestors, cNvPrId: own },
|
|
106
|
+
...(name ? { name } : {}),
|
|
107
|
+
...(text ? { text } : {}),
|
|
108
|
+
...(transform ? { transform } : {}),
|
|
109
|
+
};
|
|
110
|
+
if (placeholderType || hlinkRel) {
|
|
111
|
+
indexed.payload = {
|
|
112
|
+
...(placeholderType ? { placeholder: placeholderType } : {}),
|
|
113
|
+
...(placeholderIdx !== undefined ? { placeholderIdx } : {}),
|
|
114
|
+
...(hlinkRel ? { hyperlink: hlinkRel.target } : {}),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
elements.push(indexed);
|
|
118
|
+
if (kind === 'table') {
|
|
119
|
+
const rows = descendants(child, 'tr');
|
|
120
|
+
rows.forEach((row, rowIndex) => {
|
|
121
|
+
children(row)
|
|
122
|
+
.filter((n) => n.localName === 'tc')
|
|
123
|
+
.forEach((cell, columnIndex) => elements.push({
|
|
124
|
+
ref: {
|
|
125
|
+
documentId,
|
|
126
|
+
elementId: `${id}:cell:${String(rowIndex)}:${String(columnIndex)}`,
|
|
127
|
+
path: `${partUri}#${id}:cell:${String(rowIndex)}:${String(columnIndex)}`,
|
|
128
|
+
revision: rev,
|
|
129
|
+
},
|
|
130
|
+
kind: 'tableCell',
|
|
131
|
+
partUri,
|
|
132
|
+
slideId,
|
|
133
|
+
parentId: id,
|
|
134
|
+
text: textOf(cell),
|
|
135
|
+
location: { slideId, partUri, tableId: id, row: rowIndex, column: columnIndex },
|
|
136
|
+
}));
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
if (kind === 'picture' || kind === 'video' || kind === 'audio') {
|
|
140
|
+
const blip = first(child, 'blip');
|
|
141
|
+
const embed = blip?.getAttributeNS(NS.r, 'embed') ?? attr(blip, 'r:embed');
|
|
142
|
+
const link = blip?.getAttributeNS(NS.r, 'link') ?? attr(blip, 'r:link');
|
|
143
|
+
const video = first(child, 'videoFile');
|
|
144
|
+
const audio = first(child, 'audioFile');
|
|
145
|
+
const mediaLink = (video ?? audio)?.getAttributeNS(NS.r, 'link') ??
|
|
146
|
+
attr(video ?? audio, 'r:link') ??
|
|
147
|
+
undefined;
|
|
148
|
+
const rid = mediaLink ?? embed ?? link;
|
|
149
|
+
const rel = rid ? archive.getRelationships(partUri).find((r) => r.id === rid) : undefined;
|
|
150
|
+
if (rel) {
|
|
151
|
+
const mediaPart = rel.resolvedTarget ?? rel.target;
|
|
152
|
+
const external = Boolean(rel.external || (!embed && link && !mediaLink));
|
|
153
|
+
indexed.payload = {
|
|
154
|
+
...(indexed.payload ?? {}),
|
|
155
|
+
mediaPart,
|
|
156
|
+
href: external ? rel.target : mediaHref(documentId, mediaPart),
|
|
157
|
+
...(kind !== 'picture' ? { mediaKind: kind } : {}),
|
|
158
|
+
...(external ? { external: true } : {}),
|
|
159
|
+
...(!external && rel.resolvedTarget
|
|
160
|
+
? {
|
|
161
|
+
mediaType: archive.getPart(rel.resolvedTarget)?.mediaType,
|
|
162
|
+
fileName: basename(rel.resolvedTarget),
|
|
163
|
+
}
|
|
164
|
+
: {}),
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
if (kind === 'chart') {
|
|
169
|
+
const crid = first(child, 'chart')?.getAttributeNS(NS.r, 'id') ??
|
|
170
|
+
attr(first(child, 'chart'), 'r:id'), cr = archive.getRelationships(partUri).find((r) => r.id === crid);
|
|
171
|
+
if (cr?.resolvedTarget) {
|
|
172
|
+
const chart = archive.readXml(cr.resolvedTarget);
|
|
173
|
+
indexed.payload = {
|
|
174
|
+
...(indexed.payload ?? {}),
|
|
175
|
+
chartPart: cr.resolvedTarget,
|
|
176
|
+
chartVariant: classifyChartPart(archive, cr.resolvedTarget),
|
|
177
|
+
title: textOf(first(chart, 'title') ?? chart),
|
|
178
|
+
series: descendants(chart, 'ser').map((ser) => {
|
|
179
|
+
const color = readSeriesColor(ser);
|
|
180
|
+
return {
|
|
181
|
+
name: first(first(ser, 'tx') ?? ser, 'v')?.textContent ??
|
|
182
|
+
textOf(first(ser, 'tx') ?? ser),
|
|
183
|
+
values: descendants(first(ser, 'val') ?? ser, 'v').map((v) => v.textContent ?? ''),
|
|
184
|
+
...(color ? { color } : {}),
|
|
185
|
+
};
|
|
186
|
+
}),
|
|
187
|
+
embeddedWorkbook: archive
|
|
188
|
+
.getRelationships(cr.resolvedTarget)
|
|
189
|
+
.some((r) => r.type === REL.package),
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
// Fail closed: unresolvable chart parts are advanced (commercial-only edits).
|
|
194
|
+
indexed.payload = { ...(indexed.payload ?? {}), chartVariant: 'advanced' };
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// Only groups nest addressable descendants; table cells are indexed above.
|
|
198
|
+
if (kind === 'group')
|
|
199
|
+
walk(child, [...ancestors, own], id);
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
walk(root(doc), [], `slide:${slideId}`);
|
|
203
|
+
const notes = archive.getRelationships(partUri).find((r) => r.type === REL.notes);
|
|
204
|
+
if (notes?.resolvedTarget) {
|
|
205
|
+
const nd = archive.readXml(notes.resolvedTarget);
|
|
206
|
+
const bodyText = notesBodyText(nd);
|
|
207
|
+
elements.push({
|
|
208
|
+
ref: {
|
|
209
|
+
documentId,
|
|
210
|
+
elementId: `notes:${slideId}`,
|
|
211
|
+
path: notes.resolvedTarget,
|
|
212
|
+
revision: rev,
|
|
213
|
+
},
|
|
214
|
+
kind: 'notes',
|
|
215
|
+
partUri: notes.resolvedTarget,
|
|
216
|
+
slideId,
|
|
217
|
+
...(bodyText ? { text: bodyText } : {}),
|
|
218
|
+
location: { slideId, partUri: notes.resolvedTarget, region: 'speakerNotes' },
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
for (const [prefix, kind] of [
|
|
223
|
+
['/ppt/slideMasters/', 'master'],
|
|
224
|
+
['/ppt/slideLayouts/', 'layout'],
|
|
225
|
+
['/ppt/theme/', 'theme'],
|
|
226
|
+
])
|
|
227
|
+
for (const part of archive.parts.values())
|
|
228
|
+
if (part.name.startsWith(prefix) && part.name.endsWith('.xml')) {
|
|
229
|
+
const doc = archive.readXml(part.name);
|
|
230
|
+
elements.push({
|
|
231
|
+
ref: { documentId, elementId: `${kind}:${part.name}`, path: part.name, revision: rev },
|
|
232
|
+
kind,
|
|
233
|
+
partUri: part.name,
|
|
234
|
+
text: textOf(doc),
|
|
235
|
+
payload: {
|
|
236
|
+
colors: descendants(doc, 'srgbClr')
|
|
237
|
+
.map((n) => attr(n, 'val'))
|
|
238
|
+
.filter((v) => v !== undefined),
|
|
239
|
+
},
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
return { revision: rev, elements };
|
|
243
|
+
}
|
|
244
|
+
export const slidePageMap = (index) => {
|
|
245
|
+
const map = new Map();
|
|
246
|
+
let page = 1;
|
|
247
|
+
for (const item of index.elements) {
|
|
248
|
+
if (item.kind !== 'slide')
|
|
249
|
+
continue;
|
|
250
|
+
map.set(item.partUri, page);
|
|
251
|
+
if (item.slideId)
|
|
252
|
+
map.set(item.slideId, page);
|
|
253
|
+
page += 1;
|
|
254
|
+
}
|
|
255
|
+
return map;
|
|
256
|
+
};
|
|
257
|
+
export const slidesForItem = (index, item) => {
|
|
258
|
+
const pages = slidePageMap(index);
|
|
259
|
+
if (item.kind === 'slide') {
|
|
260
|
+
const page = pages.get(item.partUri) ?? (item.slideId ? pages.get(item.slideId) : undefined);
|
|
261
|
+
return page ? [page] : [];
|
|
262
|
+
}
|
|
263
|
+
if (item.slideId) {
|
|
264
|
+
const page = pages.get(item.slideId);
|
|
265
|
+
return page ? [page] : [];
|
|
266
|
+
}
|
|
267
|
+
return [];
|
|
268
|
+
};
|
|
269
|
+
export const slidesForRef = (index, ref) => {
|
|
270
|
+
const item = findIndexed(index, ref);
|
|
271
|
+
return item ? slidesForItem(index, item) : [];
|
|
272
|
+
};
|
|
273
|
+
export const mergeSlides = (...groups) => [...new Set(groups.flat())].sort((a, b) => a - b);
|
|
274
|
+
export const findIndexed = (index, ref) => index.elements.find((e) => e.ref.elementId === ref.elementId || e.ref.path === ref.path);
|
|
275
|
+
export function matchesSelector(item, selector) {
|
|
276
|
+
if (typeof selector === 'string' && (selector === '*' || selector === 'all'))
|
|
277
|
+
return true;
|
|
278
|
+
const spec = typeof selector === 'string'
|
|
279
|
+
? selector.includes('=')
|
|
280
|
+
? Object.fromEntries(selector.split(/\s+/).map((part) => {
|
|
281
|
+
const index = part.indexOf('=');
|
|
282
|
+
return [part.slice(0, index), part.slice(index + 1)];
|
|
283
|
+
}))
|
|
284
|
+
: { any: selector }
|
|
285
|
+
: selector;
|
|
286
|
+
if (spec['any'] === '*' || spec['any'] === 'all')
|
|
287
|
+
return true;
|
|
288
|
+
const contains = (actual, expected) => expected === undefined || (actual?.toLowerCase().includes(expected.toLowerCase()) ?? false);
|
|
289
|
+
const hasTextSpec = spec['hasText'];
|
|
290
|
+
if (hasTextSpec !== undefined) {
|
|
291
|
+
const want = typeof hasTextSpec === 'boolean'
|
|
292
|
+
? hasTextSpec
|
|
293
|
+
: !['0', 'false', 'no'].includes(hasTextSpec.toLowerCase());
|
|
294
|
+
if (Boolean(item.text?.length) !== want)
|
|
295
|
+
return false;
|
|
296
|
+
}
|
|
297
|
+
const textRegex = typeof spec['textRegex'] === 'string'
|
|
298
|
+
? spec['textRegex']
|
|
299
|
+
: typeof spec['text~'] === 'string'
|
|
300
|
+
? spec['text~']
|
|
301
|
+
: undefined;
|
|
302
|
+
if (typeof textRegex === 'string') {
|
|
303
|
+
try {
|
|
304
|
+
if (!new RegExp(textRegex, 'u').test(item.text ?? ''))
|
|
305
|
+
return false;
|
|
306
|
+
}
|
|
307
|
+
catch {
|
|
308
|
+
return false;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return (contains(item.kind, typeof spec['kind'] === 'string' ? spec['kind'] : undefined) &&
|
|
312
|
+
contains(item.name, typeof spec['name'] === 'string' ? spec['name'] : undefined) &&
|
|
313
|
+
contains(item.text, typeof spec['text'] === 'string' ? spec['text'] : undefined) &&
|
|
314
|
+
contains(item.ref.elementId, typeof spec['id'] === 'string' ? spec['id'] : undefined) &&
|
|
315
|
+
contains(item.slideId, typeof spec['slide'] === 'string' ? spec['slide'] : undefined) &&
|
|
316
|
+
contains([item.kind, item.name, item.text, item.ref.elementId, item.slideId]
|
|
317
|
+
.filter((value) => value !== undefined)
|
|
318
|
+
.join(' '), typeof spec['any'] === 'string' ? spec['any'] : undefined));
|
|
319
|
+
}
|
|
320
|
+
//# sourceMappingURL=indexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer.js","sourceRoot":"","sources":["../../src/pptx/indexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type Result } from '../core/index.js';
|
|
2
|
+
import type { OpcArchive } from '../opc/index.js';
|
|
3
|
+
import type { IndexFile, IndexedElement } from './types.js';
|
|
4
|
+
/** Basename of an OPC part URI without the `.xml` suffix (e.g. `slideLayout1`). */
|
|
5
|
+
export declare const layoutPartBaseName: (partUri: string) => string;
|
|
6
|
+
/** Natural-sort compare so `slideLayout2` < `slideLayout10`. */
|
|
7
|
+
export declare const naturalCompare: (a: string, b: string) => number;
|
|
8
|
+
/** Layouts in stable natural order of part basename (matches `list layouts` index). */
|
|
9
|
+
export declare const orderedLayouts: (index: IndexFile) => IndexedElement[];
|
|
10
|
+
/** `p:cSld/@name` on a slideLayout part. */
|
|
11
|
+
export declare const layoutDisplayName: (archive: OpcArchive, partUri: string) => string;
|
|
12
|
+
/** `p:sldLayout/@type` when present. */
|
|
13
|
+
export declare const layoutTypeAttr: (archive: OpcArchive, partUri: string) => string | undefined;
|
|
14
|
+
/** Slide→layout relationship target, if any. */
|
|
15
|
+
export declare const slideLayoutPart: (archive: OpcArchive, slidePart: string) => string | undefined;
|
|
16
|
+
export type LayoutListItem = {
|
|
17
|
+
index: number;
|
|
18
|
+
target: string;
|
|
19
|
+
name: string;
|
|
20
|
+
displayName: string;
|
|
21
|
+
type?: string;
|
|
22
|
+
partUri: string;
|
|
23
|
+
uid: string;
|
|
24
|
+
};
|
|
25
|
+
export declare const layoutListMeta: (archive: OpcArchive, item: IndexedElement, listIndex: number) => Omit<LayoutListItem, "uid">;
|
|
26
|
+
/**
|
|
27
|
+
* Resolve a layout reference used by `addSlide` / `setSlideLayout`.
|
|
28
|
+
*
|
|
29
|
+
* Accepts:
|
|
30
|
+
* - `slide:N` — inherit that slide's layout relationship
|
|
31
|
+
* - bare digit / `layout:N` — 1-based index into {@link orderedLayouts}
|
|
32
|
+
* - display name (`Blank`), basename (`slideLayout2`), or substring of display
|
|
33
|
+
* (except needle `blank`, which requires an exact Blank match)
|
|
34
|
+
*
|
|
35
|
+
* When `allowBlankFallback` is true and needle is `blank` with no match,
|
|
36
|
+
* returns `ok(undefined)` so callers can fall through to inheritance.
|
|
37
|
+
*/
|
|
38
|
+
export declare const resolveLayoutRef: (archive: OpcArchive, index: IndexFile, ref: string, options?: {
|
|
39
|
+
allowBlankFallback?: boolean;
|
|
40
|
+
}) => Result<string | undefined>;
|
|
41
|
+
//# sourceMappingURL=layout-ref.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout-ref.d.ts","sourceRoot":"","sources":["../../src/pptx/layout-ref.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5D,mFAAmF;AACnF,eAAO,MAAM,kBAAkB,GAAI,SAAS,MAAM,KAAG,MAInB,CAAC;AAEnC,gEAAgE;AAChE,eAAO,MAAM,cAAc,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,MAqBrD,CAAC;AAEF,uFAAuF;AACvF,eAAO,MAAM,cAAc,GAAI,OAAO,SAAS,KAAG,cAAc,EAIiC,CAAC;AAElG,4CAA4C;AAC5C,eAAO,MAAM,iBAAiB,GAAI,SAAS,UAAU,EAAE,SAAS,MAAM,KAAG,MAOxE,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,cAAc,GAAI,SAAS,UAAU,EAAE,SAAS,MAAM,KAAG,MAAM,GAAG,SAO9E,CAAC;AAEF,gDAAgD;AAChD,eAAO,MAAM,eAAe,GAAI,SAAS,UAAU,EAAE,WAAW,MAAM,KAAG,MAAM,GAAG,SAGjF,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,SAAS,UAAU,EACnB,MAAM,cAAc,EACpB,WAAW,MAAM,KAChB,IAAI,CAAC,cAAc,EAAE,KAAK,CAY5B,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gBAAgB,GAC3B,SAAS,UAAU,EACnB,OAAO,SAAS,EAChB,KAAK,MAAM,EACX,UAAS;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAAO,KAC7C,MAAM,CAAC,MAAM,GAAG,SAAS,CAuD3B,CAAC"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { err, ok } from '../core/index.js';
|
|
2
|
+
import { REL, attr, first, root } from './xml.js';
|
|
3
|
+
/** Basename of an OPC part URI without the `.xml` suffix (e.g. `slideLayout1`). */
|
|
4
|
+
export const layoutPartBaseName = (partUri) => partUri
|
|
5
|
+
.split('/')
|
|
6
|
+
.pop()
|
|
7
|
+
?.replace(/\.xml$/i, '') ?? '';
|
|
8
|
+
/** Natural-sort compare so `slideLayout2` < `slideLayout10`. */
|
|
9
|
+
export const naturalCompare = (a, b) => {
|
|
10
|
+
const re = /(\d+)|(\D+)/g;
|
|
11
|
+
const as = a.toLowerCase().match(re) ?? [];
|
|
12
|
+
const bs = b.toLowerCase().match(re) ?? [];
|
|
13
|
+
const n = Math.max(as.length, bs.length);
|
|
14
|
+
for (let i = 0; i < n; i++) {
|
|
15
|
+
const x = as[i] ?? '';
|
|
16
|
+
const y = bs[i] ?? '';
|
|
17
|
+
if (x === y)
|
|
18
|
+
continue;
|
|
19
|
+
const xn = /^\d+$/.test(x);
|
|
20
|
+
const yn = /^\d+$/.test(y);
|
|
21
|
+
if (xn && yn) {
|
|
22
|
+
const d = Number(x) - Number(y);
|
|
23
|
+
if (d !== 0)
|
|
24
|
+
return d;
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
if (xn !== yn)
|
|
28
|
+
return xn ? -1 : 1;
|
|
29
|
+
if (x < y)
|
|
30
|
+
return -1;
|
|
31
|
+
if (x > y)
|
|
32
|
+
return 1;
|
|
33
|
+
}
|
|
34
|
+
return 0;
|
|
35
|
+
};
|
|
36
|
+
/** Layouts in stable natural order of part basename (matches `list layouts` index). */
|
|
37
|
+
export const orderedLayouts = (index) => index.elements
|
|
38
|
+
.filter((item) => item.kind === 'layout')
|
|
39
|
+
.slice()
|
|
40
|
+
.sort((a, b) => naturalCompare(layoutPartBaseName(a.partUri), layoutPartBaseName(b.partUri)));
|
|
41
|
+
/** `p:cSld/@name` on a slideLayout part. */
|
|
42
|
+
export const layoutDisplayName = (archive, partUri) => {
|
|
43
|
+
try {
|
|
44
|
+
const cSld = first(archive.readXml(partUri), 'cSld');
|
|
45
|
+
return attr(cSld, 'name') ?? '';
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return '';
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
/** `p:sldLayout/@type` when present. */
|
|
52
|
+
export const layoutTypeAttr = (archive, partUri) => {
|
|
53
|
+
try {
|
|
54
|
+
const type = attr(root(archive.readXml(partUri)), 'type');
|
|
55
|
+
return type || undefined;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
/** Slide→layout relationship target, if any. */
|
|
62
|
+
export const slideLayoutPart = (archive, slidePart) => {
|
|
63
|
+
const rel = archive.getRelationships(slidePart).find((r) => r.type === REL.layout);
|
|
64
|
+
return rel?.resolvedTarget;
|
|
65
|
+
};
|
|
66
|
+
export const layoutListMeta = (archive, item, listIndex) => {
|
|
67
|
+
const name = layoutPartBaseName(item.partUri);
|
|
68
|
+
const displayName = layoutDisplayName(archive, item.partUri);
|
|
69
|
+
const type = layoutTypeAttr(archive, item.partUri);
|
|
70
|
+
return {
|
|
71
|
+
index: listIndex,
|
|
72
|
+
target: `layout:${name}`,
|
|
73
|
+
name,
|
|
74
|
+
displayName,
|
|
75
|
+
...(type !== undefined ? { type } : {}),
|
|
76
|
+
partUri: item.partUri,
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Resolve a layout reference used by `addSlide` / `setSlideLayout`.
|
|
81
|
+
*
|
|
82
|
+
* Accepts:
|
|
83
|
+
* - `slide:N` — inherit that slide's layout relationship
|
|
84
|
+
* - bare digit / `layout:N` — 1-based index into {@link orderedLayouts}
|
|
85
|
+
* - display name (`Blank`), basename (`slideLayout2`), or substring of display
|
|
86
|
+
* (except needle `blank`, which requires an exact Blank match)
|
|
87
|
+
*
|
|
88
|
+
* When `allowBlankFallback` is true and needle is `blank` with no match,
|
|
89
|
+
* returns `ok(undefined)` so callers can fall through to inheritance.
|
|
90
|
+
*/
|
|
91
|
+
export const resolveLayoutRef = (archive, index, ref, options = {}) => {
|
|
92
|
+
const raw = ref.trim();
|
|
93
|
+
if (!raw)
|
|
94
|
+
return err('INVALID_COMMAND', 'Layout reference is empty');
|
|
95
|
+
const slideMatch = /^slide:(\d+)$/i.exec(raw);
|
|
96
|
+
if (slideMatch) {
|
|
97
|
+
const page = Number(slideMatch[1]);
|
|
98
|
+
const slides = index.elements.filter((item) => item.kind === 'slide');
|
|
99
|
+
const slide = slides[page - 1];
|
|
100
|
+
if (!slide)
|
|
101
|
+
return err('TARGET_NOT_FOUND', `slide:${page} does not exist`, [], {
|
|
102
|
+
target: `slide:${page}`,
|
|
103
|
+
hint: 'Run deckuse list slides --json.',
|
|
104
|
+
});
|
|
105
|
+
const part = slideLayoutPart(archive, slide.partUri);
|
|
106
|
+
if (!part)
|
|
107
|
+
return err('TARGET_NOT_FOUND', `slide:${page} has no slideLayout relationship`, [], {
|
|
108
|
+
target: `slide:${page}`,
|
|
109
|
+
});
|
|
110
|
+
return ok(part);
|
|
111
|
+
}
|
|
112
|
+
let indexNeedle;
|
|
113
|
+
const layoutIndexMatch = /^layout:(\d+)$/i.exec(raw);
|
|
114
|
+
if (layoutIndexMatch)
|
|
115
|
+
indexNeedle = Number(layoutIndexMatch[1]);
|
|
116
|
+
else if (/^\d+$/.test(raw))
|
|
117
|
+
indexNeedle = Number(raw);
|
|
118
|
+
const layouts = orderedLayouts(index);
|
|
119
|
+
if (indexNeedle !== undefined) {
|
|
120
|
+
if (!Number.isInteger(indexNeedle) || indexNeedle < 1)
|
|
121
|
+
return err('INVALID_COMMAND', `Invalid layout index: ${raw}`, [], { target: raw });
|
|
122
|
+
const hit = layouts[indexNeedle - 1];
|
|
123
|
+
if (!hit)
|
|
124
|
+
return err('TARGET_NOT_FOUND', `Layout index out of range: ${indexNeedle}`, [], {
|
|
125
|
+
target: `layout:${indexNeedle}`,
|
|
126
|
+
hint: 'Run deckuse list layouts --json.',
|
|
127
|
+
});
|
|
128
|
+
return ok(hit.partUri);
|
|
129
|
+
}
|
|
130
|
+
const needle = raw.toLowerCase().replace(/^layout:/i, '');
|
|
131
|
+
const match = layouts.find((item) => {
|
|
132
|
+
const fileName = layoutPartBaseName(item.partUri).toLowerCase();
|
|
133
|
+
const display = layoutDisplayName(archive, item.partUri).toLowerCase();
|
|
134
|
+
return (display === needle || fileName === needle || (needle !== 'blank' && display.includes(needle)));
|
|
135
|
+
});
|
|
136
|
+
if (match)
|
|
137
|
+
return ok(match.partUri);
|
|
138
|
+
if (options.allowBlankFallback && needle === 'blank')
|
|
139
|
+
return ok(undefined);
|
|
140
|
+
return err('TARGET_NOT_FOUND', `Layout not found: ${ref}`, [], {
|
|
141
|
+
target: raw,
|
|
142
|
+
hint: 'Use a layout index, layout:N, slide:N, display name, or basename (deckuse list layouts --json).',
|
|
143
|
+
});
|
|
144
|
+
};
|
|
145
|
+
//# sourceMappingURL=layout-ref.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout-ref.js","sourceRoot":"","sources":["../../src/pptx/layout-ref.ts"],"names":[],"mappings":"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"}
|