fontist 3.0.13 → 3.0.15

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3c0e8b1c8483672a058e753d4c0714446bd94aa496973d85ec3b4bafcb158456
4
- data.tar.gz: 95427dfeeef825c5b82245fba2f1dafef832fd119c41e7fcd9368e1aa8d15093
3
+ metadata.gz: e34cf04876b1c50b7ada12a6d8c23a1954baaecc499433d25844f2c0df899c97
4
+ data.tar.gz: 3728d8848dd1eb1d92ef0f7b28d251e1f9ef3a9d5d3ec7592f39607f05d9b3d0
5
5
  SHA512:
6
- metadata.gz: d70ec75d7142de8adcf1663f8c3839b9c04fe13c07d145f8850ed364314b0f33c40914407bfe2464f9d3fb2ee48d7be7214e9d75ec376ae7377f00ec37f65b69
7
- data.tar.gz: a196cf1d33615d543e7a0cd802e2f199e5899b09c7e718b67107ea601543eea0ffdc8d2d03545514a85d52e204d84d8319807ebc0c76031b3d4ce48a4bbf9ec6
6
+ metadata.gz: 415419b02587672d1e4676365a2658f0d126f1860a2b67f22aef5509dcb14268deab6db07847b655151612247b94d029bfb9cea65352b8d80a41b017f6c97b76
7
+ data.tar.gz: 6cab85a340fb53f66d2ba771de09aa6d13a882a98aeb60ffd806da24207a669b61e8d9e57f59821107f6231f5b1070f18a107fde561289d787a32fb2afd3ca09
@@ -43,7 +43,9 @@ jobs:
43
43
  with:
44
44
  path: "fontist"
45
45
 
46
- - run: 'echo ''gem "fontist", path: "./fontist"'' > Gemfile.devel'
46
+ # Append rather than overwrite: metanorma's own Gemfile.devel carries
47
+ # the taste-stack gems its compile specs need (metanorma/issues/630)
48
+ - run: 'echo ''gem "fontist", path: "./fontist"'' >> Gemfile.devel'
47
49
 
48
50
  - uses: ruby/setup-ruby@v1
49
51
  with:
@@ -371,9 +371,9 @@
371
371
  }
372
372
  },
373
373
  "node_modules/@esbuild/aix-ppc64": {
374
- "version": "0.21.5",
375
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
376
- "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
374
+ "version": "0.25.12",
375
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
376
+ "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
377
377
  "cpu": [
378
378
  "ppc64"
379
379
  ],
@@ -384,13 +384,13 @@
384
384
  "aix"
385
385
  ],
386
386
  "engines": {
387
- "node": ">=12"
387
+ "node": ">=18"
388
388
  }
389
389
  },
390
390
  "node_modules/@esbuild/android-arm": {
391
- "version": "0.21.5",
392
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
393
- "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
391
+ "version": "0.25.12",
392
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz",
393
+ "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
394
394
  "cpu": [
395
395
  "arm"
396
396
  ],
@@ -401,13 +401,13 @@
401
401
  "android"
402
402
  ],
403
403
  "engines": {
404
- "node": ">=12"
404
+ "node": ">=18"
405
405
  }
406
406
  },
407
407
  "node_modules/@esbuild/android-arm64": {
408
- "version": "0.21.5",
409
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
410
- "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
408
+ "version": "0.25.12",
409
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz",
410
+ "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
411
411
  "cpu": [
412
412
  "arm64"
413
413
  ],
@@ -418,13 +418,13 @@
418
418
  "android"
419
419
  ],
420
420
  "engines": {
421
- "node": ">=12"
421
+ "node": ">=18"
422
422
  }
423
423
  },
424
424
  "node_modules/@esbuild/android-x64": {
425
- "version": "0.21.5",
426
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
427
- "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
425
+ "version": "0.25.12",
426
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz",
427
+ "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
428
428
  "cpu": [
429
429
  "x64"
430
430
  ],
@@ -435,13 +435,13 @@
435
435
  "android"
436
436
  ],
437
437
  "engines": {
438
- "node": ">=12"
438
+ "node": ">=18"
439
439
  }
440
440
  },
441
441
  "node_modules/@esbuild/darwin-arm64": {
442
- "version": "0.21.5",
443
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
444
- "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
442
+ "version": "0.25.12",
443
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz",
444
+ "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
445
445
  "cpu": [
446
446
  "arm64"
447
447
  ],
@@ -452,13 +452,13 @@
452
452
  "darwin"
453
453
  ],
454
454
  "engines": {
455
- "node": ">=12"
455
+ "node": ">=18"
456
456
  }
457
457
  },
458
458
  "node_modules/@esbuild/darwin-x64": {
459
- "version": "0.21.5",
460
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
461
- "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
459
+ "version": "0.25.12",
460
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz",
461
+ "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
462
462
  "cpu": [
463
463
  "x64"
464
464
  ],
@@ -469,13 +469,13 @@
469
469
  "darwin"
470
470
  ],
471
471
  "engines": {
472
- "node": ">=12"
472
+ "node": ">=18"
473
473
  }
474
474
  },
475
475
  "node_modules/@esbuild/freebsd-arm64": {
476
- "version": "0.21.5",
477
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
478
- "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
476
+ "version": "0.25.12",
477
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz",
478
+ "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
479
479
  "cpu": [
480
480
  "arm64"
481
481
  ],
@@ -486,13 +486,13 @@
486
486
  "freebsd"
487
487
  ],
488
488
  "engines": {
489
- "node": ">=12"
489
+ "node": ">=18"
490
490
  }
491
491
  },
492
492
  "node_modules/@esbuild/freebsd-x64": {
493
- "version": "0.21.5",
494
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
495
- "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
493
+ "version": "0.25.12",
494
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz",
495
+ "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
496
496
  "cpu": [
497
497
  "x64"
498
498
  ],
@@ -503,13 +503,13 @@
503
503
  "freebsd"
504
504
  ],
505
505
  "engines": {
506
- "node": ">=12"
506
+ "node": ">=18"
507
507
  }
508
508
  },
509
509
  "node_modules/@esbuild/linux-arm": {
510
- "version": "0.21.5",
511
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
512
- "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
510
+ "version": "0.25.12",
511
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz",
512
+ "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
513
513
  "cpu": [
514
514
  "arm"
515
515
  ],
@@ -520,13 +520,13 @@
520
520
  "linux"
521
521
  ],
522
522
  "engines": {
523
- "node": ">=12"
523
+ "node": ">=18"
524
524
  }
525
525
  },
526
526
  "node_modules/@esbuild/linux-arm64": {
527
- "version": "0.21.5",
528
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
529
- "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
527
+ "version": "0.25.12",
528
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz",
529
+ "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
530
530
  "cpu": [
531
531
  "arm64"
532
532
  ],
@@ -537,13 +537,13 @@
537
537
  "linux"
538
538
  ],
539
539
  "engines": {
540
- "node": ">=12"
540
+ "node": ">=18"
541
541
  }
542
542
  },
543
543
  "node_modules/@esbuild/linux-ia32": {
544
- "version": "0.21.5",
545
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
546
- "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
544
+ "version": "0.25.12",
545
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz",
546
+ "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
547
547
  "cpu": [
548
548
  "ia32"
549
549
  ],
@@ -554,13 +554,13 @@
554
554
  "linux"
555
555
  ],
556
556
  "engines": {
557
- "node": ">=12"
557
+ "node": ">=18"
558
558
  }
559
559
  },
560
560
  "node_modules/@esbuild/linux-loong64": {
561
- "version": "0.21.5",
562
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
563
- "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
561
+ "version": "0.25.12",
562
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz",
563
+ "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
564
564
  "cpu": [
565
565
  "loong64"
566
566
  ],
@@ -571,13 +571,13 @@
571
571
  "linux"
572
572
  ],
573
573
  "engines": {
574
- "node": ">=12"
574
+ "node": ">=18"
575
575
  }
576
576
  },
577
577
  "node_modules/@esbuild/linux-mips64el": {
578
- "version": "0.21.5",
579
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
580
- "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
578
+ "version": "0.25.12",
579
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz",
580
+ "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
581
581
  "cpu": [
582
582
  "mips64el"
583
583
  ],
@@ -588,13 +588,13 @@
588
588
  "linux"
589
589
  ],
590
590
  "engines": {
591
- "node": ">=12"
591
+ "node": ">=18"
592
592
  }
593
593
  },
594
594
  "node_modules/@esbuild/linux-ppc64": {
595
- "version": "0.21.5",
596
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
597
- "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
595
+ "version": "0.25.12",
596
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz",
597
+ "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
598
598
  "cpu": [
599
599
  "ppc64"
600
600
  ],
@@ -605,13 +605,13 @@
605
605
  "linux"
606
606
  ],
607
607
  "engines": {
608
- "node": ">=12"
608
+ "node": ">=18"
609
609
  }
610
610
  },
611
611
  "node_modules/@esbuild/linux-riscv64": {
612
- "version": "0.21.5",
613
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
614
- "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
612
+ "version": "0.25.12",
613
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz",
614
+ "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
615
615
  "cpu": [
616
616
  "riscv64"
617
617
  ],
@@ -622,13 +622,13 @@
622
622
  "linux"
623
623
  ],
624
624
  "engines": {
625
- "node": ">=12"
625
+ "node": ">=18"
626
626
  }
627
627
  },
628
628
  "node_modules/@esbuild/linux-s390x": {
629
- "version": "0.21.5",
630
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
631
- "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
629
+ "version": "0.25.12",
630
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz",
631
+ "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
632
632
  "cpu": [
633
633
  "s390x"
634
634
  ],
@@ -639,13 +639,13 @@
639
639
  "linux"
640
640
  ],
641
641
  "engines": {
642
- "node": ">=12"
642
+ "node": ">=18"
643
643
  }
644
644
  },
645
645
  "node_modules/@esbuild/linux-x64": {
646
- "version": "0.21.5",
647
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
648
- "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
646
+ "version": "0.25.12",
647
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz",
648
+ "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
649
649
  "cpu": [
650
650
  "x64"
651
651
  ],
@@ -656,13 +656,30 @@
656
656
  "linux"
657
657
  ],
658
658
  "engines": {
659
- "node": ">=12"
659
+ "node": ">=18"
660
+ }
661
+ },
662
+ "node_modules/@esbuild/netbsd-arm64": {
663
+ "version": "0.25.12",
664
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz",
665
+ "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
666
+ "cpu": [
667
+ "arm64"
668
+ ],
669
+ "dev": true,
670
+ "license": "MIT",
671
+ "optional": true,
672
+ "os": [
673
+ "netbsd"
674
+ ],
675
+ "engines": {
676
+ "node": ">=18"
660
677
  }
661
678
  },
662
679
  "node_modules/@esbuild/netbsd-x64": {
663
- "version": "0.21.5",
664
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
665
- "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
680
+ "version": "0.25.12",
681
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz",
682
+ "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
666
683
  "cpu": [
667
684
  "x64"
668
685
  ],
@@ -673,13 +690,30 @@
673
690
  "netbsd"
674
691
  ],
675
692
  "engines": {
676
- "node": ">=12"
693
+ "node": ">=18"
694
+ }
695
+ },
696
+ "node_modules/@esbuild/openbsd-arm64": {
697
+ "version": "0.25.12",
698
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz",
699
+ "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
700
+ "cpu": [
701
+ "arm64"
702
+ ],
703
+ "dev": true,
704
+ "license": "MIT",
705
+ "optional": true,
706
+ "os": [
707
+ "openbsd"
708
+ ],
709
+ "engines": {
710
+ "node": ">=18"
677
711
  }
678
712
  },
679
713
  "node_modules/@esbuild/openbsd-x64": {
680
- "version": "0.21.5",
681
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
682
- "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
714
+ "version": "0.25.12",
715
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz",
716
+ "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
683
717
  "cpu": [
684
718
  "x64"
685
719
  ],
@@ -690,13 +724,30 @@
690
724
  "openbsd"
691
725
  ],
692
726
  "engines": {
693
- "node": ">=12"
727
+ "node": ">=18"
728
+ }
729
+ },
730
+ "node_modules/@esbuild/openharmony-arm64": {
731
+ "version": "0.25.12",
732
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz",
733
+ "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
734
+ "cpu": [
735
+ "arm64"
736
+ ],
737
+ "dev": true,
738
+ "license": "MIT",
739
+ "optional": true,
740
+ "os": [
741
+ "openharmony"
742
+ ],
743
+ "engines": {
744
+ "node": ">=18"
694
745
  }
695
746
  },
696
747
  "node_modules/@esbuild/sunos-x64": {
697
- "version": "0.21.5",
698
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
699
- "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
748
+ "version": "0.25.12",
749
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz",
750
+ "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
700
751
  "cpu": [
701
752
  "x64"
702
753
  ],
@@ -707,13 +758,13 @@
707
758
  "sunos"
708
759
  ],
709
760
  "engines": {
710
- "node": ">=12"
761
+ "node": ">=18"
711
762
  }
712
763
  },
713
764
  "node_modules/@esbuild/win32-arm64": {
714
- "version": "0.21.5",
715
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
716
- "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
765
+ "version": "0.25.12",
766
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz",
767
+ "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
717
768
  "cpu": [
718
769
  "arm64"
719
770
  ],
@@ -724,13 +775,13 @@
724
775
  "win32"
725
776
  ],
726
777
  "engines": {
727
- "node": ">=12"
778
+ "node": ">=18"
728
779
  }
729
780
  },
730
781
  "node_modules/@esbuild/win32-ia32": {
731
- "version": "0.21.5",
732
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
733
- "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
782
+ "version": "0.25.12",
783
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz",
784
+ "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
734
785
  "cpu": [
735
786
  "ia32"
736
787
  ],
@@ -741,13 +792,13 @@
741
792
  "win32"
742
793
  ],
743
794
  "engines": {
744
- "node": ">=12"
795
+ "node": ">=18"
745
796
  }
746
797
  },
747
798
  "node_modules/@esbuild/win32-x64": {
748
- "version": "0.21.5",
749
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
750
- "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
799
+ "version": "0.25.12",
800
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz",
801
+ "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
751
802
  "cpu": [
752
803
  "x64"
753
804
  ],
@@ -758,7 +809,7 @@
758
809
  "win32"
759
810
  ],
760
811
  "engines": {
761
- "node": ">=12"
812
+ "node": ">=18"
762
813
  }
763
814
  },
764
815
  "node_modules/@iconify-json/simple-icons": {
@@ -1716,9 +1767,9 @@
1716
1767
  }
1717
1768
  },
1718
1769
  "node_modules/esbuild": {
1719
- "version": "0.21.5",
1720
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
1721
- "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
1770
+ "version": "0.25.12",
1771
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
1772
+ "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
1722
1773
  "dev": true,
1723
1774
  "hasInstallScript": true,
1724
1775
  "license": "MIT",
@@ -1726,32 +1777,35 @@
1726
1777
  "esbuild": "bin/esbuild"
1727
1778
  },
1728
1779
  "engines": {
1729
- "node": ">=12"
1780
+ "node": ">=18"
1730
1781
  },
1731
1782
  "optionalDependencies": {
1732
- "@esbuild/aix-ppc64": "0.21.5",
1733
- "@esbuild/android-arm": "0.21.5",
1734
- "@esbuild/android-arm64": "0.21.5",
1735
- "@esbuild/android-x64": "0.21.5",
1736
- "@esbuild/darwin-arm64": "0.21.5",
1737
- "@esbuild/darwin-x64": "0.21.5",
1738
- "@esbuild/freebsd-arm64": "0.21.5",
1739
- "@esbuild/freebsd-x64": "0.21.5",
1740
- "@esbuild/linux-arm": "0.21.5",
1741
- "@esbuild/linux-arm64": "0.21.5",
1742
- "@esbuild/linux-ia32": "0.21.5",
1743
- "@esbuild/linux-loong64": "0.21.5",
1744
- "@esbuild/linux-mips64el": "0.21.5",
1745
- "@esbuild/linux-ppc64": "0.21.5",
1746
- "@esbuild/linux-riscv64": "0.21.5",
1747
- "@esbuild/linux-s390x": "0.21.5",
1748
- "@esbuild/linux-x64": "0.21.5",
1749
- "@esbuild/netbsd-x64": "0.21.5",
1750
- "@esbuild/openbsd-x64": "0.21.5",
1751
- "@esbuild/sunos-x64": "0.21.5",
1752
- "@esbuild/win32-arm64": "0.21.5",
1753
- "@esbuild/win32-ia32": "0.21.5",
1754
- "@esbuild/win32-x64": "0.21.5"
1783
+ "@esbuild/aix-ppc64": "0.25.12",
1784
+ "@esbuild/android-arm": "0.25.12",
1785
+ "@esbuild/android-arm64": "0.25.12",
1786
+ "@esbuild/android-x64": "0.25.12",
1787
+ "@esbuild/darwin-arm64": "0.25.12",
1788
+ "@esbuild/darwin-x64": "0.25.12",
1789
+ "@esbuild/freebsd-arm64": "0.25.12",
1790
+ "@esbuild/freebsd-x64": "0.25.12",
1791
+ "@esbuild/linux-arm": "0.25.12",
1792
+ "@esbuild/linux-arm64": "0.25.12",
1793
+ "@esbuild/linux-ia32": "0.25.12",
1794
+ "@esbuild/linux-loong64": "0.25.12",
1795
+ "@esbuild/linux-mips64el": "0.25.12",
1796
+ "@esbuild/linux-ppc64": "0.25.12",
1797
+ "@esbuild/linux-riscv64": "0.25.12",
1798
+ "@esbuild/linux-s390x": "0.25.12",
1799
+ "@esbuild/linux-x64": "0.25.12",
1800
+ "@esbuild/netbsd-arm64": "0.25.12",
1801
+ "@esbuild/netbsd-x64": "0.25.12",
1802
+ "@esbuild/openbsd-arm64": "0.25.12",
1803
+ "@esbuild/openbsd-x64": "0.25.12",
1804
+ "@esbuild/openharmony-arm64": "0.25.12",
1805
+ "@esbuild/sunos-x64": "0.25.12",
1806
+ "@esbuild/win32-arm64": "0.25.12",
1807
+ "@esbuild/win32-ia32": "0.25.12",
1808
+ "@esbuild/win32-x64": "0.25.12"
1755
1809
  }
1756
1810
  },
1757
1811
  "node_modules/estree-walker": {
@@ -1761,6 +1815,24 @@
1761
1815
  "dev": true,
1762
1816
  "license": "MIT"
1763
1817
  },
1818
+ "node_modules/fdir": {
1819
+ "version": "6.5.0",
1820
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
1821
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
1822
+ "dev": true,
1823
+ "license": "MIT",
1824
+ "engines": {
1825
+ "node": ">=12.0.0"
1826
+ },
1827
+ "peerDependencies": {
1828
+ "picomatch": "^3 || ^4"
1829
+ },
1830
+ "peerDependenciesMeta": {
1831
+ "picomatch": {
1832
+ "optional": true
1833
+ }
1834
+ }
1835
+ },
1764
1836
  "node_modules/focus-trap": {
1765
1837
  "version": "7.8.0",
1766
1838
  "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.8.0.tgz",
@@ -2047,6 +2119,19 @@
2047
2119
  "dev": true,
2048
2120
  "license": "ISC"
2049
2121
  },
2122
+ "node_modules/picomatch": {
2123
+ "version": "4.0.7",
2124
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz",
2125
+ "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==",
2126
+ "dev": true,
2127
+ "license": "MIT",
2128
+ "engines": {
2129
+ "node": ">=12"
2130
+ },
2131
+ "funding": {
2132
+ "url": "https://github.com/sponsors/jonschlinkert"
2133
+ }
2134
+ },
2050
2135
  "node_modules/postcss": {
2051
2136
  "version": "8.5.32",
2052
2137
  "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.32.tgz",
@@ -2284,6 +2369,23 @@
2284
2369
  "dev": true,
2285
2370
  "license": "MIT"
2286
2371
  },
2372
+ "node_modules/tinyglobby": {
2373
+ "version": "0.2.17",
2374
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz",
2375
+ "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==",
2376
+ "dev": true,
2377
+ "license": "MIT",
2378
+ "dependencies": {
2379
+ "fdir": "^6.5.0",
2380
+ "picomatch": "^4.0.4"
2381
+ },
2382
+ "engines": {
2383
+ "node": ">=12.0.0"
2384
+ },
2385
+ "funding": {
2386
+ "url": "https://github.com/sponsors/SuperchupuDev"
2387
+ }
2388
+ },
2287
2389
  "node_modules/trim-lines": {
2288
2390
  "version": "3.0.1",
2289
2391
  "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
@@ -2420,21 +2522,24 @@
2420
2522
  }
2421
2523
  },
2422
2524
  "node_modules/vite": {
2423
- "version": "5.4.21",
2424
- "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz",
2425
- "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==",
2525
+ "version": "6.4.5",
2526
+ "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.5.tgz",
2527
+ "integrity": "sha512-4enwjFfi4IwtEh0w+jPzpLVOFQiPHmmzPxcHXQOyEur47o6u0jE573DmGpjA+7irXoMLYRZD5ZaFUEneS3abPg==",
2426
2528
  "dev": true,
2427
2529
  "license": "MIT",
2428
2530
  "dependencies": {
2429
- "esbuild": "^0.21.3",
2430
- "postcss": "^8.4.43",
2431
- "rollup": "^4.20.0"
2531
+ "esbuild": "^0.25.0",
2532
+ "fdir": "^6.4.4",
2533
+ "picomatch": "^4.0.2",
2534
+ "postcss": "^8.5.3",
2535
+ "rollup": "^4.34.9",
2536
+ "tinyglobby": "^0.2.13"
2432
2537
  },
2433
2538
  "bin": {
2434
2539
  "vite": "bin/vite.js"
2435
2540
  },
2436
2541
  "engines": {
2437
- "node": "^18.0.0 || >=20.0.0"
2542
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
2438
2543
  },
2439
2544
  "funding": {
2440
2545
  "url": "https://github.com/vitejs/vite?sponsor=1"
@@ -2443,19 +2548,25 @@
2443
2548
  "fsevents": "~2.3.3"
2444
2549
  },
2445
2550
  "peerDependencies": {
2446
- "@types/node": "^18.0.0 || >=20.0.0",
2551
+ "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
2552
+ "jiti": ">=1.21.0",
2447
2553
  "less": "*",
2448
2554
  "lightningcss": "^1.21.0",
2449
2555
  "sass": "*",
2450
2556
  "sass-embedded": "*",
2451
2557
  "stylus": "*",
2452
2558
  "sugarss": "*",
2453
- "terser": "^5.4.0"
2559
+ "terser": "^5.16.0",
2560
+ "tsx": "^4.8.1",
2561
+ "yaml": "^2.4.2"
2454
2562
  },
2455
2563
  "peerDependenciesMeta": {
2456
2564
  "@types/node": {
2457
2565
  "optional": true
2458
2566
  },
2567
+ "jiti": {
2568
+ "optional": true
2569
+ },
2459
2570
  "less": {
2460
2571
  "optional": true
2461
2572
  },
@@ -2476,6 +2587,12 @@
2476
2587
  },
2477
2588
  "terser": {
2478
2589
  "optional": true
2590
+ },
2591
+ "tsx": {
2592
+ "optional": true
2593
+ },
2594
+ "yaml": {
2595
+ "optional": true
2479
2596
  }
2480
2597
  }
2481
2598
  },
data/docs/package.json CHANGED
@@ -6,6 +6,9 @@
6
6
  "format": "prettier -w ."
7
7
  },
8
8
  "type": "module",
9
+ "overrides": {
10
+ "vite": "^6.4.4"
11
+ },
9
12
  "devDependencies": {
10
13
  "@types/node": "^22.15.0",
11
14
  "prettier": "^3.8.1",
@@ -181,9 +181,15 @@ module Fontist
181
181
 
182
182
  content = File.read(path)
183
183
 
184
- from_yaml(content).tap do |formula|
185
- formula.path = path
186
- formula.name = titleize(formula.key_from_path) if formula.name.nil?
184
+ # Parsing a formula costs ~10-20ms and the same formula is
185
+ # re-read on every lookup, so the parsed instance is memoized
186
+ # (mtime-validated) and shared between callers; treat as
187
+ # read-only
188
+ formula = Fontist::FromFileCache.memoize(path) { from_yaml(content) }
189
+
190
+ formula.tap do |f|
191
+ f.path = path
192
+ f.name = titleize(f.key_from_path) if f.name.nil?
187
193
  end
188
194
  rescue Lutaml::Model::Error, TypeError, ArgumentError,
189
195
  Psych::BadAlias, Psych::SyntaxError => e
@@ -0,0 +1,34 @@
1
+ module Fontist
2
+ # Thread-safe, mtime-validated memoization for parsed YAML artifacts
3
+ # (formula index, formula files), which cost hundreds of milliseconds to
4
+ # parse and are re-read on every font lookup.
5
+ #
6
+ # Returned instances are shared between all callers and must be treated
7
+ # as read-only. Entries re-resolve automatically when the file's mtime
8
+ # changes (e.g. after `fontist update` rewrites the formulas repo).
9
+ module FromFileCache
10
+ def self.memoize(path)
11
+ mutex.synchronize do
12
+ mtime = File.mtime(path)
13
+ entry = cache[path]
14
+ if entry.nil? || entry[:mtime] != mtime
15
+ entry = { mtime: mtime, value: yield }
16
+ cache[path] = entry
17
+ end
18
+ entry[:value]
19
+ end
20
+ end
21
+
22
+ def self.clear
23
+ mutex.synchronize { cache.clear }
24
+ end
25
+
26
+ def self.mutex
27
+ @mutex ||= Mutex.new
28
+ end
29
+
30
+ def self.cache
31
+ @cache ||= {}
32
+ end
33
+ end
34
+ end
@@ -132,6 +132,10 @@ module Fontist
132
132
  # @param verbose [Boolean] Show detailed progress information
133
133
  # @return [void]
134
134
  def rebuild(verbose: false)
135
+ # A rebuild is an explicit request for a fresh scan, so any
136
+ # memoized font_paths must be dropped first
137
+ reset_scan_cache
138
+
135
139
  collection.rebuild(verbose: verbose)
136
140
  end
137
141
 
@@ -37,10 +37,17 @@ module Fontist
37
37
  # Uses case-insensitive glob patterns that work on all platforms,
38
38
  # including Linux where File::FNM_CASEFOLD is ignored
39
39
  #
40
+ # Delegates to the memoized fontist-repo scan on SystemFont; the
41
+ # memo is invalidated through reset_scan_cache when fonts are
42
+ # installed or removed mid-process
43
+ #
40
44
  # @return [Array<String>] Array of font file paths
41
45
  def font_paths
42
- patterns = Fontist::Utils.font_file_patterns(Fontist.fonts_path.join("**").to_s)
43
- patterns.flat_map { |pattern| Dir.glob(pattern) }
46
+ SystemFont.fontist_font_paths
47
+ end
48
+
49
+ def reset_scan_cache
50
+ SystemFont.reset_fontist_font_paths_cache
44
51
  end
45
52
  end
46
53
  end
@@ -49,12 +49,13 @@ module Fontist
49
49
 
50
50
  file_content = File.read(file_path).strip
51
51
 
52
- if file_content.empty? || file_content == "---"
53
- # Return empty collection for empty index files
54
- return new
55
- end
52
+ # Return empty collection for empty index files
53
+ return new if file_content.empty? || file_content == "---"
56
54
 
57
- from_yaml(file_content)
55
+ # Parsing the index YAML costs hundreds of milliseconds and
56
+ # happens on every font lookup, so the parsed instance is
57
+ # memoized (mtime-validated) and shared between callers
58
+ Fontist::FromFileCache.memoize(file_path) { from_yaml(file_content) }
58
59
  end
59
60
 
60
61
  def rebuild
@@ -67,6 +68,10 @@ module Fontist
67
68
  end
68
69
 
69
70
  def reset_cache
71
+ # Drop the memoized parsed instance along with the index file,
72
+ # to force a fresh parse on next access
73
+ Fontist::FromFileCache.clear
74
+
70
75
  # Delete the index file to force rebuild on next access
71
76
  # This is important for tests to ensure clean state
72
77
  FileUtils.rm_f(path)
@@ -1,3 +1,3 @@
1
1
  module Fontist
2
- VERSION = "3.0.13".freeze
2
+ VERSION = "3.0.15".freeze
3
3
  end
data/lib/fontist.rb CHANGED
@@ -7,6 +7,7 @@ require "lutaml/model"
7
7
  require_relative "fontist/errors"
8
8
  require_relative "fontist/version"
9
9
  require_relative "fontist/cache"
10
+ require_relative "fontist/from_file_cache"
10
11
  require_relative "fontist/memoizable"
11
12
  require_relative "fontist/path_scanning"
12
13
  require_relative "fontist/utils"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fontist
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.13
4
+ version: 3.0.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
@@ -375,6 +375,7 @@ files:
375
375
  - lib/fontist/formula.rb
376
376
  - lib/fontist/formula_picker.rb
377
377
  - lib/fontist/formula_suggestion.rb
378
+ - lib/fontist/from_file_cache.rb
378
379
  - lib/fontist/google_import_source.rb
379
380
  - lib/fontist/helpers.rb
380
381
  - lib/fontist/import.rb