resuml 1.7.2 → 1.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "resuml",
3
- "version": "1.7.2",
3
+ "version": "1.7.3",
4
4
  "description": "Generate JSON resumes from YAML with theme support",
5
5
  "type": "module",
6
6
  "main": "./dist/api.js",
@@ -410,6 +410,11 @@ async function bundleTheme(shortName, packageName, shimsDir) {
410
410
  'node:events': resolve(shimsDir, 'events.js'),
411
411
  'node:os': resolve(shimsDir, 'os.js'),
412
412
  'node:assert': resolve(shimsDir, 'assert.js'),
413
+ // Glob shims for themes that use glob-based partial loading
414
+ 'glob': resolve(shimsDir, 'glob.js'),
415
+ 'globby': resolve(shimsDir, 'globby.js'),
416
+ 'require-glob': resolve(shimsDir, 'require-glob.js'),
417
+ 'fast-glob': resolve(shimsDir, 'globby.js'),
413
418
  },
414
419
  logLevel: 'silent',
415
420
  });
@@ -627,6 +632,105 @@ function writeShims(shimsDir) {
627
632
  'export var userInfo = function() { return { username: "browser", uid: 0, gid: 0, shell: "", homedir: "/" }; };',
628
633
  'export default { platform: platform, tmpdir: tmpdir, homedir: homedir, hostname: hostname, type: type, arch: arch, release: release, EOL: EOL, endianness: endianness, cpus: cpus, totalmem: totalmem, freemem: freemem, networkInterfaces: networkInterfaces, userInfo: userInfo };',
629
634
  ].join('\n'));
635
+
636
+ // glob/globby/require-glob shims — these use the fs shim's embedded file list
637
+ writeFileSync(resolve(shimsDir, 'glob.js'), [
638
+ 'import { readdirSync, readFileSync, existsSync } from "fs";',
639
+ '',
640
+ '// Minimal glob pattern matching against embedded file list',
641
+ 'function minimatch(filepath, pattern) {',
642
+ ' var re = pattern',
643
+ ' .replace(/[.+^${}()|[\\]\\\\]/g, "\\\\$&")',
644
+ ' .replace(/\\*\\*/g, "___GLOBSTAR___")',
645
+ ' .replace(/\\*/g, "[^/]*")',
646
+ ' .replace(/___GLOBSTAR___/g, ".*")',
647
+ ' .replace(/\\?/g, "[^/]");',
648
+ ' // Handle {a,b} alternatives',
649
+ ' re = re.replace(/\\{([^}]+)\\}/g, function(_, alts) {',
650
+ ' return "(" + alts.split(",").join("|") + ")";',
651
+ ' });',
652
+ ' return new RegExp("^" + re + "$").test(filepath);',
653
+ '}',
654
+ '',
655
+ 'function getAllPaths(dir) {',
656
+ ' var results = [];',
657
+ ' try {',
658
+ ' var entries = readdirSync(dir);',
659
+ ' for (var i = 0; i < entries.length; i++) {',
660
+ ' var full = dir ? dir + "/" + entries[i] : entries[i];',
661
+ ' results.push(full);',
662
+ ' var sub = getAllPaths(full);',
663
+ ' for (var j = 0; j < sub.length; j++) results.push(sub[j]);',
664
+ ' }',
665
+ ' } catch(e) {}',
666
+ ' return results;',
667
+ '}',
668
+ '',
669
+ 'export function sync(pattern, opts) {',
670
+ ' var cwd = (opts && opts.cwd) || "/";',
671
+ ' var allPaths = getAllPaths(cwd);',
672
+ ' return allPaths.filter(function(p) { return minimatch(p, pattern); });',
673
+ '}',
674
+ '',
675
+ 'export function globSync(pattern, opts) { return sync(pattern, opts); }',
676
+ '',
677
+ 'export default function glob(pattern, opts, cb) {',
678
+ ' if (typeof opts === "function") { cb = opts; opts = {}; }',
679
+ ' try { var r = sync(pattern, opts); if (cb) cb(null, r); return Promise.resolve(r); }',
680
+ ' catch(e) { if (cb) cb(e); return Promise.reject(e); }',
681
+ '};',
682
+ 'glob.sync = sync;',
683
+ 'glob.globSync = sync;',
684
+ ].join('\n'));
685
+
686
+ writeFileSync(resolve(shimsDir, 'globby.js'), [
687
+ 'import { sync as globSync } from "glob";',
688
+ 'export function globby(patterns, opts) {',
689
+ ' var pats = Array.isArray(patterns) ? patterns : [patterns];',
690
+ ' var results = [];',
691
+ ' for (var i = 0; i < pats.length; i++) {',
692
+ ' var matches = globSync(pats[i], opts);',
693
+ ' for (var j = 0; j < matches.length; j++) {',
694
+ ' if (results.indexOf(matches[j]) === -1) results.push(matches[j]);',
695
+ ' }',
696
+ ' }',
697
+ ' return Promise.resolve(results);',
698
+ '}',
699
+ 'export function globbySync(patterns, opts) {',
700
+ ' var pats = Array.isArray(patterns) ? patterns : [patterns];',
701
+ ' var results = [];',
702
+ ' for (var i = 0; i < pats.length; i++) {',
703
+ ' var matches = globSync(pats[i], opts);',
704
+ ' for (var j = 0; j < matches.length; j++) {',
705
+ ' if (results.indexOf(matches[j]) === -1) results.push(matches[j]);',
706
+ ' }',
707
+ ' }',
708
+ ' return results;',
709
+ '}',
710
+ 'export default globby;',
711
+ ].join('\n'));
712
+
713
+ writeFileSync(resolve(shimsDir, 'require-glob.js'), [
714
+ 'import { sync as globSync } from "glob";',
715
+ 'import { readFileSync } from "fs";',
716
+ '',
717
+ 'function requireGlob(pattern, opts) {',
718
+ ' var cwd = (opts && opts.cwd) || "/";',
719
+ ' var matches = globSync(pattern, { cwd: cwd });',
720
+ ' var result = {};',
721
+ ' for (var i = 0; i < matches.length; i++) {',
722
+ ' var name = matches[i].replace(/.*\\//, "").replace(/\\.[^.]+$/, "");',
723
+ ' try {',
724
+ ' var content = readFileSync(matches[i], "utf-8");',
725
+ ' result[name] = content;',
726
+ ' } catch(e) {}',
727
+ ' }',
728
+ ' return result;',
729
+ '}',
730
+ 'requireGlob.sync = requireGlob;',
731
+ 'export default requireGlob;',
732
+ 'export { requireGlob };',
733
+ ].join('\n'));
630
734
  }
631
735
 
632
736
  // ── Main ─────────────────────────────────────────────────────────────