node-pptx-templater 1.0.0 → 1.0.2

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/CHANGELOG.md CHANGED
@@ -36,4 +36,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
36
36
  - Private class fields (`#field`) for encapsulation
37
37
  - Modular architecture following SOLID principles
38
38
 
39
- [1.0.0]: https://github.com/your-org/pptx-templater/releases/tag/v1.0.0
39
+ [1.0.0]: https://github.com/jsuyog2/pptx-templater/releases/tag/v1.0.0
package/README.md CHANGED
@@ -3,8 +3,8 @@
3
3
  > A low-level PowerPoint OpenXML templating engine for Node.js that generates and edits PPTX files directly through XML manipulation without relying on PowerPoint generation libraries.
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/node-pptx-templater.svg)](https://www.npmjs.com/package/node-pptx-templater)
6
- [![CI](https://github.com/your-org/node-pptx-templater/actions/workflows/ci.yml/badge.svg)](https://github.com/your-org/node-pptx-templater/actions/workflows/ci.yml)
7
- [![Coverage](https://img.shields.io/codecov/c/github/your-org/node-pptx-templater)](https://codecov.io/gh/your-org/node-pptx-templater)
6
+ [![CI](https://github.com/jsuyog2/node-pptx-templater/actions/workflows/ci.yml/badge.svg)](https://github.com/jsuyog2/node-pptx-templater/actions/workflows/ci.yml)
7
+ [![Coverage](https://img.shields.io/codecov/c/github/jsuyog2/node-pptx-templater)](https://codecov.io/gh/jsuyog2/node-pptx-templater)
8
8
  [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](./LICENSE)
9
9
  [![Node.js](https://img.shields.io/badge/node-%3E%3D18.0.0-brightgreen)](https://nodejs.org)
10
10
  [![ES Modules](https://img.shields.io/badge/ESM-only-blueviolet)](https://nodejs.org/api/esm.html)
@@ -402,7 +402,7 @@ See [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines.
402
402
 
403
403
  Quick steps:
404
404
  ```bash
405
- git clone https://github.com/your-org/node-pptx-templater.git
405
+ git clone https://github.com/jsuyog2/node-pptx-templater.git
406
406
  cd node-pptx-templater
407
407
  npm install
408
408
  npm test
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "node-pptx-templater",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "Low-level PowerPoint OpenXML template engine for Node.js — generate and edit PPTX files directly through XML manipulation without relying on PowerPoint generation libraries.",
5
5
  "main": "./src/index.js",
6
- "type": "module",
6
+ "type": "commonjs",
7
7
  "exports": {
8
8
  ".": {
9
- "import": "./src/index.js"
9
+ "require": "./src/index.js"
10
10
  }
11
11
  },
12
12
  "bin": {
@@ -51,12 +51,12 @@
51
51
  "license": "MIT",
52
52
  "repository": {
53
53
  "type": "git",
54
- "url": "https://github.com/your-org/node-pptx-templater.git"
54
+ "url": "https://github.com/jsuyog2/node-pptx-templater.git"
55
55
  },
56
56
  "bugs": {
57
- "url": "https://github.com/your-org/node-pptx-templater/issues"
57
+ "url": "https://github.com/jsuyog2/node-pptx-templater/issues"
58
58
  },
59
- "homepage": "https://your-org.github.io/node-pptx-templater",
59
+ "homepage": "https://jsuyog2.github.io/node-pptx-templater",
60
60
  "engines": {
61
61
  "node": ">=18.0.0"
62
62
  },
@@ -65,8 +65,8 @@
65
65
  "jszip": "^3.10.1",
66
66
  "fs-extra": "^11.2.0",
67
67
  "commander": "^12.0.0",
68
- "chalk": "^5.3.0",
69
- "ora": "^8.0.1"
68
+ "chalk": "^4.1.2",
69
+ "ora": "^5.4.1"
70
70
  },
71
71
  "devDependencies": {
72
72
  "vitest": "^1.6.0",
@@ -2,11 +2,11 @@
2
2
  * @fileoverview `build` CLI command — builds a PPTX from a template + JSON data.
3
3
  */
4
4
 
5
- import chalk from 'chalk';
6
- import ora from 'ora';
7
- import { readFileSync } from 'fs';
8
- import { resolve } from 'path';
9
- import { PPTXTemplater } from '../../index.js';
5
+ const chalk = require('chalk');
6
+ const ora = require('ora');
7
+ const { readFileSync } = require('fs');
8
+ const { resolve } = require('path');
9
+ const { PPTXTemplater } = require('../../index.js');
10
10
 
11
11
  /**
12
12
  * Executes the `build` CLI command.
@@ -15,7 +15,7 @@ import { PPTXTemplater } from '../../index.js';
15
15
  * @param {string} outputPath - Path for the generated PPTX.
16
16
  * @param {Object} opts - CLI options.
17
17
  */
18
- export async function buildCommand(templatePath, outputPath, opts) {
18
+ async function buildCommand(templatePath, outputPath, opts) {
19
19
  const spinner = ora(`Loading template: ${templatePath}`).start();
20
20
 
21
21
  try {
@@ -77,3 +77,5 @@ export async function buildCommand(templatePath, outputPath, opts) {
77
77
  process.exit(1);
78
78
  }
79
79
  }
80
+
81
+ module.exports = { buildCommand };
@@ -1,13 +1,12 @@
1
1
  /**
2
2
  * @fileoverview `debug` CLI command — diagnoses and repairs corrupted PPTX files.
3
3
  */
4
- import chalk from 'chalk';
5
- import ora from 'ora';
6
- import { resolve } from 'path';
7
- import { repairXML } from '../../utils/xmlUtils.js';
8
- import { PPTXTemplater } from '../../index.js';
4
+ const chalk = require('chalk');
5
+ const ora = require('ora');
6
+ const { resolve } = require('path');
7
+ const { PPTXTemplater } = require('../../index.js');
9
8
 
10
- export async function debugCommand(filePath, opts) {
9
+ async function debugCommand(filePath, opts) {
11
10
  const spinner = ora(`Loading PPTX for debug: ${filePath}`).start();
12
11
 
13
12
  try {
@@ -44,3 +43,5 @@ export async function debugCommand(filePath, opts) {
44
43
  process.exit(1);
45
44
  }
46
45
  }
46
+
47
+ module.exports = { debugCommand };
@@ -1,12 +1,12 @@
1
1
  /**
2
2
  * @fileoverview `extract` CLI command — extracts XML parts from a PPTX.
3
3
  */
4
- import chalk from 'chalk';
5
- import { resolve } from 'path';
6
- import { writeFileSync } from 'fs';
7
- import { PPTXTemplater } from '../../index.js';
4
+ const chalk = require('chalk');
5
+ const { resolve } = require('path');
6
+ const { writeFileSync } = require('fs');
7
+ const { PPTXTemplater } = require('../../index.js');
8
8
 
9
- export async function extractCommand(filePath, opts) {
9
+ async function extractCommand(filePath, opts) {
10
10
  try {
11
11
  const ppt = await PPTXTemplater.load(resolve(filePath));
12
12
 
@@ -14,7 +14,7 @@ export async function extractCommand(filePath, opts) {
14
14
  const slideNum = parseInt(opts.slide, 10);
15
15
  // Access internal zip via the engine's buffer
16
16
  const buffer = await ppt.toBuffer();
17
- const JSZip = (await import('jszip')).default;
17
+ const JSZip = require('jszip');
18
18
  const zip = await JSZip.loadAsync(buffer);
19
19
  const slideFile = zip.file(`ppt/slides/slide${slideNum}.xml`);
20
20
 
@@ -40,3 +40,5 @@ export async function extractCommand(filePath, opts) {
40
40
  process.exit(1);
41
41
  }
42
42
  }
43
+
44
+ module.exports = { extractCommand };
@@ -1,12 +1,12 @@
1
1
  /**
2
2
  * @fileoverview `inspect` CLI command — detailed PPTX structure inspection.
3
3
  */
4
- import chalk from 'chalk';
5
- import ora from 'ora';
6
- import { resolve } from 'path';
7
- import { PPTXTemplater } from '../../index.js';
4
+ const chalk = require('chalk');
5
+ const ora = require('ora');
6
+ const { resolve } = require('path');
7
+ const { PPTXTemplater } = require('../../index.js');
8
8
 
9
- export async function inspectCommand(filePath, opts) {
9
+ async function inspectCommand(filePath, opts) {
10
10
  const showAll = opts.all;
11
11
  const spinner = ora(`Inspecting: ${filePath}`).start();
12
12
 
@@ -37,3 +37,5 @@ export async function inspectCommand(filePath, opts) {
37
37
  process.exit(1);
38
38
  }
39
39
  }
40
+
41
+ module.exports = { inspectCommand };
@@ -1,12 +1,12 @@
1
1
  /**
2
2
  * @fileoverview `validate` CLI command.
3
3
  */
4
- import chalk from 'chalk';
5
- import ora from 'ora';
6
- import { resolve } from 'path';
7
- import { PPTXTemplater } from '../../index.js';
4
+ const chalk = require('chalk');
5
+ const ora = require('ora');
6
+ const { resolve } = require('path');
7
+ const { PPTXTemplater } = require('../../index.js');
8
8
 
9
- export async function validateCommand(filePath, opts) {
9
+ async function validateCommand(filePath, opts) {
10
10
  const spinner = ora(`Validating: ${filePath}`).start();
11
11
  try {
12
12
  const ppt = await PPTXTemplater.load(resolve(filePath));
@@ -34,3 +34,5 @@ export async function validateCommand(filePath, opts) {
34
34
  process.exit(1);
35
35
  }
36
36
  }
37
+
38
+ module.exports = { validateCommand };
package/src/cli/index.js CHANGED
@@ -18,20 +18,15 @@
18
18
  * node-pptx-templater --help
19
19
  */
20
20
 
21
- import { Command } from 'commander';
22
- import chalk from 'chalk';
23
- import ora from 'ora';
24
- import { readFileSync } from 'fs';
25
- import { resolve, dirname } from 'path';
26
- import { fileURLToPath } from 'url';
27
- import { PPTXTemplater } from '../index.js';
28
- import { buildCommand } from './commands/build.js';
29
- import { validateCommand } from './commands/validate.js';
30
- import { inspectCommand } from './commands/inspect.js';
31
- import { extractCommand } from './commands/extract.js';
32
- import { debugCommand } from './commands/debug.js';
33
-
34
- const __dirname = dirname(fileURLToPath(import.meta.url));
21
+ const { Command } = require('commander');
22
+ const chalk = require('chalk');
23
+ const { readFileSync } = require('fs');
24
+ const { resolve } = require('path');
25
+ const { buildCommand } = require('./commands/build.js');
26
+ const { validateCommand } = require('./commands/validate.js');
27
+ const { inspectCommand } = require('./commands/inspect.js');
28
+ const { extractCommand } = require('./commands/extract.js');
29
+ const { debugCommand } = require('./commands/debug.js');
35
30
 
36
31
  // Read version from package.json
37
32
  const pkg = JSON.parse(
@@ -121,12 +116,16 @@ program
121
116
  // ─── Global error handling ──────────────────────────────────────────────────
122
117
  program.exitOverride();
123
118
 
124
- try {
125
- await program.parseAsync(process.argv);
126
- } catch (err) {
127
- if (err.code === 'commander.helpDisplayed' || err.code === 'commander.version') {
128
- process.exit(0);
119
+ async function main() {
120
+ try {
121
+ await program.parseAsync(process.argv);
122
+ } catch (err) {
123
+ if (err.code === 'commander.helpDisplayed' || err.code === 'commander.version') {
124
+ process.exit(0);
125
+ }
126
+ console.error(chalk.red(`\n✗ Error: ${err.message}\n`));
127
+ process.exit(1);
129
128
  }
130
- console.error(chalk.red(`\n✗ Error: ${err.message}\n`));
131
- process.exit(1);
132
129
  }
130
+
131
+ main();
@@ -8,13 +8,13 @@
8
8
  * 4. Write to file, buffer, or stream
9
9
  */
10
10
 
11
- import fsExtra from 'fs-extra';
11
+ const fsExtra = require('fs-extra');
12
12
  const { writeFile, ensureDir } = fsExtra;
13
- import path from 'path';
14
- import { XMLParser } from '../parsers/XMLParser.js';
15
- import { createLogger } from '../utils/logger.js';
16
- import { PPTXError } from '../utils/errors.js';
17
- import { Readable } from 'stream';
13
+ const path = require('path');
14
+ const { XMLParser } = require('../parsers/XMLParser.js');
15
+ const { createLogger } = require('../utils/logger.js');
16
+ const { PPTXError } = require('../utils/errors.js');
17
+ const { Readable } = require('stream');
18
18
 
19
19
  const logger = createLogger('OutputWriter');
20
20
 
@@ -22,7 +22,7 @@ const logger = createLogger('OutputWriter');
22
22
  * @class OutputWriter
23
23
  * @description Serializes the modified PPTX to various output formats.
24
24
  */
25
- export class OutputWriter {
25
+ class OutputWriter {
26
26
  /** @private @type {ZipManager} */
27
27
  #zipManager;
28
28
  /** @private @type {ContentTypesManager} */
@@ -179,3 +179,5 @@ export class OutputWriter {
179
179
  logger.debug(`Flushed ${info.length} slide(s) to ZIP`);
180
180
  }
181
181
  }
182
+
183
+ module.exports = { OutputWriter };
@@ -24,19 +24,19 @@
24
24
  * └── app.xml — application metadata
25
25
  */
26
26
 
27
- import { ZipManager } from '../managers/ZipManager.js';
28
- import { XMLParser } from '../parsers/XMLParser.js';
29
- import { ContentTypesManager } from '../managers/ContentTypesManager.js';
30
- import { SlideManager } from '../managers/SlideManager.js';
31
- import { ChartManager } from '../managers/ChartManager.js';
32
- import { TableManager } from '../managers/TableManager.js';
33
- import { HyperlinkManager } from '../managers/HyperlinkManager.js';
34
- import { MediaManager } from '../managers/MediaManager.js';
35
- import { RelationshipManager } from '../managers/RelationshipManager.js';
36
- import { OutputWriter } from './OutputWriter.js';
37
- import { TemplateEngine } from './TemplateEngine.js';
38
- import { createLogger } from '../utils/logger.js';
39
- import { PPTXError } from '../utils/errors.js';
27
+ const { ZipManager } = require('../managers/ZipManager.js');
28
+ const { XMLParser } = require('../parsers/XMLParser.js');
29
+ const { ContentTypesManager } = require('../managers/ContentTypesManager.js');
30
+ const { SlideManager } = require('../managers/SlideManager.js');
31
+ const { ChartManager } = require('../managers/ChartManager.js');
32
+ const { TableManager } = require('../managers/TableManager.js');
33
+ const { HyperlinkManager } = require('../managers/HyperlinkManager.js');
34
+ const { MediaManager } = require('../managers/MediaManager.js');
35
+ const { RelationshipManager } = require('../managers/RelationshipManager.js');
36
+ const { OutputWriter } = require('./OutputWriter.js');
37
+ const { TemplateEngine } = require('./TemplateEngine.js');
38
+ const { createLogger } = require('../utils/logger.js');
39
+ const { PPTXError } = require('../utils/errors.js');
40
40
 
41
41
  const logger = createLogger('PPTXTemplater');
42
42
 
@@ -50,7 +50,7 @@ const logger = createLogger('PPTXTemplater');
50
50
  * ppt.replaceText({ '{{title}}': 'My Report' });
51
51
  * await ppt.saveToFile('./output/report.pptx');
52
52
  */
53
- export class PPTXTemplater {
53
+ class PPTXTemplater {
54
54
  /**
55
55
  * @private
56
56
  * @type {ZipManager}
@@ -781,8 +781,8 @@ export class PPTXTemplater {
781
781
  this.#assertLoaded();
782
782
  const issues = { valid: true, errors: [], warnings: [] };
783
783
 
784
- // We lazy import ChartRelationshipManager so we don't circularly depend if not needed
785
- const { ChartRelationshipManager } = await import('../managers/charts/ChartRelationshipManager.js');
784
+ // We lazy require ChartRelationshipManager so we don't circularly depend if not needed
785
+ const { ChartRelationshipManager } = require('../managers/charts/ChartRelationshipManager.js');
786
786
 
787
787
  const chartFiles = this.#zipManager.listFiles('ppt/charts/')
788
788
  .filter(f => {
@@ -959,3 +959,5 @@ export class PPTXTemplater {
959
959
  get hyperlinkManager() { return this.#hyperlinkManager; }
960
960
  get mediaManager() { return this.#mediaManager; }
961
961
  }
962
+
963
+ module.exports = { PPTXTemplater };
@@ -26,7 +26,7 @@
26
26
  * This "text normalization" approach correctly handles fragmented placeholders.
27
27
  */
28
28
 
29
- import { createLogger } from '../utils/logger.js';
29
+ const { createLogger } = require('../utils/logger.js');
30
30
 
31
31
  const logger = createLogger('TemplateEngine');
32
32
 
@@ -42,7 +42,7 @@ const DEFAULT_PLACEHOLDER_PATTERN = /\{\{([^{}]+)\}\}/g;
42
42
  *
43
43
  * Implements the text-normalization strategy to handle fragmented placeholders.
44
44
  */
45
- export class TemplateEngine {
45
+ class TemplateEngine {
46
46
  /** @private @type {XMLParser} */
47
47
  #xmlParser;
48
48
 
@@ -319,3 +319,5 @@ export class TemplateEngine {
319
319
  .replace(/'/g, "'");
320
320
  }
321
321
  }
322
+
323
+ module.exports = { TemplateEngine };
package/src/index.js CHANGED
@@ -24,20 +24,43 @@
24
24
  * └─────────────────────────────────────────────────────────────┘
25
25
  */
26
26
 
27
- export { PPTXTemplater } from './core/PPTXTemplater.js';
28
- export { ZipManager } from './managers/ZipManager.js';
29
- export { XMLParser } from './parsers/XMLParser.js';
30
- export { SlideManager } from './managers/SlideManager.js';
31
- export { ChartManager } from './managers/ChartManager.js';
32
- export { TableManager } from './managers/TableManager.js';
33
- export { HyperlinkManager } from './managers/HyperlinkManager.js';
34
- export { MediaManager } from './managers/MediaManager.js';
35
- export { RelationshipManager } from './managers/RelationshipManager.js';
36
- export { OutputWriter } from './core/OutputWriter.js';
37
- export { TemplateEngine } from './core/TemplateEngine.js';
27
+ const { PPTXTemplater } = require('./core/PPTXTemplater.js');
28
+ const { ZipManager } = require('./managers/ZipManager.js');
29
+ const { XMLParser } = require('./parsers/XMLParser.js');
30
+ const { SlideManager } = require('./managers/SlideManager.js');
31
+ const { ChartManager } = require('./managers/ChartManager.js');
32
+ const { TableManager } = require('./managers/TableManager.js');
33
+ const { HyperlinkManager } = require('./managers/HyperlinkManager.js');
34
+ const { MediaManager } = require('./managers/MediaManager.js');
35
+ const { RelationshipManager } = require('./managers/RelationshipManager.js');
36
+ const { OutputWriter } = require('./core/OutputWriter.js');
37
+ const { TemplateEngine } = require('./core/TemplateEngine.js');
38
38
 
39
39
  // Utility exports
40
- export { generateRelationshipId, parseRelationshipId } from './utils/relationshipUtils.js';
41
- export { validateXML, repairXML } from './utils/xmlUtils.js';
42
- export { createLogger } from './utils/logger.js';
43
- export { PPTXError, SlideNotFoundError, ChartNotFoundError, TableNotFoundError } from './utils/errors.js';
40
+ const { generateRelationshipId, parseRelationshipId } = require('./utils/relationshipUtils.js');
41
+ const { validateXML, repairXML } = require('./utils/xmlUtils.js');
42
+ const { createLogger } = require('./utils/logger.js');
43
+ const { PPTXError, SlideNotFoundError, ChartNotFoundError, TableNotFoundError } = require('./utils/errors.js');
44
+
45
+ module.exports = {
46
+ PPTXTemplater,
47
+ ZipManager,
48
+ XMLParser,
49
+ SlideManager,
50
+ ChartManager,
51
+ TableManager,
52
+ HyperlinkManager,
53
+ MediaManager,
54
+ RelationshipManager,
55
+ OutputWriter,
56
+ TemplateEngine,
57
+ generateRelationshipId,
58
+ parseRelationshipId,
59
+ validateXML,
60
+ repairXML,
61
+ createLogger,
62
+ PPTXError,
63
+ SlideNotFoundError,
64
+ ChartNotFoundError,
65
+ TableNotFoundError
66
+ };
@@ -39,11 +39,11 @@
39
39
  * We update both to ensure compatibility with both cached and live data.
40
40
  */
41
41
 
42
- import { createLogger } from '../utils/logger.js';
43
- import { ChartNotFoundError } from '../utils/errors.js';
44
- import { REL_TYPES } from './RelationshipManager.js';
45
- import { ChartWorkbookUpdater } from './charts/ChartWorkbookUpdater.js';
46
- import { ChartCacheGenerator } from './charts/ChartCacheGenerator.js';
42
+ const { createLogger } = require('../utils/logger.js');
43
+ const { ChartNotFoundError } = require('../utils/errors.js');
44
+ const { REL_TYPES } = require('./RelationshipManager.js');
45
+ const { ChartWorkbookUpdater } = require('./charts/ChartWorkbookUpdater.js');
46
+ const { ChartCacheGenerator } = require('./charts/ChartCacheGenerator.js');
47
47
 
48
48
  const logger = createLogger('ChartManager');
49
49
 
@@ -69,7 +69,7 @@ const CHART_TYPE_MAP = {
69
69
  * Unlike high-level charting libraries, this manager edits the raw OpenXML
70
70
  * chart structure, allowing full control while preserving styles and themes.
71
71
  */
72
- export class ChartManager {
72
+ class ChartManager {
73
73
  /** @private @type {XMLParser} */
74
74
  #xmlParser;
75
75
  /** @private @type {ZipManager} */
@@ -315,3 +315,5 @@ export class ChartManager {
315
315
  return 'unknown';
316
316
  }
317
317
  }
318
+
319
+ module.exports = { ChartManager };
@@ -4,14 +4,14 @@
4
4
  * Implements structured, XML-safe manipulation of the OPC manifest.
5
5
  */
6
6
 
7
- import { createLogger } from '../utils/logger.js';
8
- import { PPTXError } from '../utils/errors.js';
7
+ const { createLogger } = require('../utils/logger.js');
8
+ const { PPTXError } = require('../utils/errors.js');
9
9
 
10
10
  const logger = createLogger('ContentTypesManager');
11
11
 
12
12
  const TYPES_XML_PATH = '[Content_Types].xml';
13
13
 
14
- export class ContentTypesManager {
14
+ class ContentTypesManager {
15
15
  /** @private @type {XMLParser} */
16
16
  #xmlParser;
17
17
 
@@ -158,3 +158,5 @@ export class ContentTypesManager {
158
158
  logger.debug(`Flushed ${TYPES_XML_PATH}`);
159
159
  }
160
160
  }
161
+
162
+ module.exports = { ContentTypesManager };
@@ -31,9 +31,9 @@
31
31
  * Use <a:hlinkMouseOver r:id="..."/> instead of hlinkClick.
32
32
  */
33
33
 
34
- import { createLogger } from '../utils/logger.js';
35
- import { PPTXError } from '../utils/errors.js';
36
- import { REL_TYPES } from './RelationshipManager.js';
34
+ const { createLogger } = require('../utils/logger.js');
35
+ const { PPTXError } = require('../utils/errors.js');
36
+ const { REL_TYPES } = require('./RelationshipManager.js');
37
37
 
38
38
  const logger = createLogger('HyperlinkManager');
39
39
 
@@ -41,7 +41,7 @@ const logger = createLogger('HyperlinkManager');
41
41
  * @class HyperlinkManager
42
42
  * @description Manages hyperlink creation and modification in PPTX slides.
43
43
  */
44
- export class HyperlinkManager {
44
+ class HyperlinkManager {
45
45
  /** @private @type {XMLParser} */
46
46
  #xmlParser;
47
47
  /** @private @type {RelationshipManager} */
@@ -449,3 +449,5 @@ export class HyperlinkManager {
449
449
  return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
450
450
  }
451
451
  }
452
+
453
+ module.exports = { HyperlinkManager };
@@ -36,11 +36,11 @@
36
36
  * Audio: MP3, WAV, M4A
37
37
  */
38
38
 
39
- import { createHash } from 'crypto';
40
- import { createLogger } from '../utils/logger.js';
41
- import { PPTXError } from '../utils/errors.js';
42
- import { REL_TYPES } from './RelationshipManager.js';
43
- import fsExtra from 'fs-extra';
39
+ const { createHash } = require('crypto');
40
+ const { createLogger } = require('../utils/logger.js');
41
+ const { PPTXError } = require('../utils/errors.js');
42
+ const { REL_TYPES } = require('./RelationshipManager.js');
43
+ const fsExtra = require('fs-extra');
44
44
 
45
45
  const logger = createLogger('MediaManager');
46
46
 
@@ -84,7 +84,7 @@ const EXT_TO_MIME = {
84
84
  * @class MediaManager
85
85
  * @description Manages media embedding, deduplication, and retrieval in PPTX files.
86
86
  */
87
- export class MediaManager {
87
+ class MediaManager {
88
88
  /** @private @type {ContentTypesManager} */
89
89
  #contentTypesManager;
90
90
  /** @private @type {ZipManager} */
@@ -305,3 +305,5 @@ export class MediaManager {
305
305
  this.#contentTypesManager.addDefault(ext, mimeType);
306
306
  }
307
307
  }
308
+
309
+ module.exports = { MediaManager };
@@ -35,9 +35,9 @@
35
35
  * - .../slideToSlide → slide → another slide (inter-slide link)
36
36
  */
37
37
 
38
- import { createLogger } from '../utils/logger.js';
39
- import { PPTXError } from '../utils/errors.js';
40
- import { generateRelationshipId } from '../utils/relationshipUtils.js';
38
+ const { createLogger } = require('../utils/logger.js');
39
+ const { PPTXError } = require('../utils/errors.js');
40
+ const { generateRelationshipId } = require('../utils/relationshipUtils.js');
41
41
 
42
42
  const logger = createLogger('RelationshipManager');
43
43
 
@@ -45,7 +45,7 @@ const logger = createLogger('RelationshipManager');
45
45
  * OpenXML relationship type constants.
46
46
  * Using shortened forms; full URIs are in the OpenXML spec.
47
47
  */
48
- export const REL_TYPES = {
48
+ const REL_TYPES = {
49
49
  SLIDE: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide',
50
50
  SLIDE_LAYOUT: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout',
51
51
  SLIDE_MASTER: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster',
@@ -70,7 +70,7 @@ export const REL_TYPES = {
70
70
  * - ppt/presentation.xml → ppt/_rels/presentation.xml.rels
71
71
  * - ppt/slides/slide1.xml → ppt/slides/_rels/slide1.xml.rels
72
72
  */
73
- export class RelationshipManager {
73
+ class RelationshipManager {
74
74
  /**
75
75
  * @private
76
76
  * @type {XMLParser}
@@ -399,3 +399,5 @@ export class RelationshipManager {
399
399
  logger.debug(`Removed ${removedCount} orphan relationship(s).`);
400
400
  }
401
401
  }
402
+
403
+ module.exports = { REL_TYPES, RelationshipManager };
@@ -24,12 +24,12 @@
24
24
  * - p:cxnSp → Connectors
25
25
  */
26
26
 
27
- import { createLogger } from '../utils/logger.js';
28
- import { PPTXError, SlideNotFoundError } from '../utils/errors.js';
29
- import { REL_TYPES } from './RelationshipManager.js';
30
- import { buildNewSlideXml } from '../templates/slideTemplate.js';
31
- import { generateUniqueId } from '../utils/idUtils.js';
32
- import { remapRelationshipIds } from '../utils/relationshipUtils.js';
27
+ const { createLogger } = require('../utils/logger.js');
28
+ const { PPTXError, SlideNotFoundError } = require('../utils/errors.js');
29
+ const { REL_TYPES } = require('./RelationshipManager.js');
30
+ const { buildNewSlideXml } = require('../templates/slideTemplate.js');
31
+ const { generateUniqueId } = require('../utils/idUtils.js');
32
+ const { remapRelationshipIds } = require('../utils/relationshipUtils.js');
33
33
 
34
34
  const logger = createLogger('SlideManager');
35
35
 
@@ -50,7 +50,7 @@ const SLIDE_CONTENT_TYPE = 'application/vnd.openxmlformats-officedocument.presen
50
50
  * @class SlideManager
51
51
  * @description Manages slide loading, ordering, modification, and creation.
52
52
  */
53
- export class SlideManager {
53
+ class SlideManager {
54
54
  /** @private @type {XMLParser} */
55
55
  #xmlParser;
56
56
  /** @private @type {RelationshipManager} */
@@ -733,7 +733,7 @@ export class SlideManager {
733
733
  */
734
734
  async exportSlides(slideIndices, sourceEngine) {
735
735
  // Lazy import to avoid circular dep
736
- const { PPTXTemplater } = await import('../core/PPTXTemplater.js');
736
+ const { PPTXTemplater } = require('../core/PPTXTemplater.js');
737
737
 
738
738
  // Create a blank new PPTX
739
739
  const newEngine = await PPTXTemplater.create();
@@ -948,3 +948,5 @@ export class SlideManager {
948
948
  }
949
949
  }
950
950
  }
951
+
952
+ module.exports = { SlideManager };