docrev 0.10.1 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/.gitattributes +1 -1
  2. package/CHANGELOG.md +184 -173
  3. package/PLAN-tables-and-postprocess.md +850 -850
  4. package/README.md +431 -431
  5. package/bin/rev.js +11 -11
  6. package/bin/rev.ts +145 -145
  7. package/completions/rev.bash +127 -127
  8. package/completions/rev.ps1 +210 -210
  9. package/completions/rev.zsh +207 -207
  10. package/dist/lib/anchor-match.d.ts +4 -2
  11. package/dist/lib/anchor-match.d.ts.map +1 -1
  12. package/dist/lib/anchor-match.js +52 -24
  13. package/dist/lib/anchor-match.js.map +1 -1
  14. package/dist/lib/annotations.d.ts +0 -6
  15. package/dist/lib/annotations.d.ts.map +1 -1
  16. package/dist/lib/annotations.js +26 -8
  17. package/dist/lib/annotations.js.map +1 -1
  18. package/dist/lib/build.d.ts.map +1 -1
  19. package/dist/lib/build.js +13 -10
  20. package/dist/lib/build.js.map +1 -1
  21. package/dist/lib/commands/build.d.ts.map +1 -1
  22. package/dist/lib/commands/build.js +5 -0
  23. package/dist/lib/commands/build.js.map +1 -1
  24. package/dist/lib/commands/doi.d.ts.map +1 -1
  25. package/dist/lib/commands/doi.js +14 -2
  26. package/dist/lib/commands/doi.js.map +1 -1
  27. package/dist/lib/commands/sync.d.ts.map +1 -1
  28. package/dist/lib/commands/sync.js +98 -107
  29. package/dist/lib/commands/sync.js.map +1 -1
  30. package/dist/lib/commands/utilities.js +164 -164
  31. package/dist/lib/commands/word-tools.js +8 -8
  32. package/dist/lib/comment-realign.d.ts +12 -21
  33. package/dist/lib/comment-realign.d.ts.map +1 -1
  34. package/dist/lib/comment-realign.js +40 -348
  35. package/dist/lib/comment-realign.js.map +1 -1
  36. package/dist/lib/dependencies.d.ts +10 -0
  37. package/dist/lib/dependencies.d.ts.map +1 -1
  38. package/dist/lib/dependencies.js +41 -9
  39. package/dist/lib/dependencies.js.map +1 -1
  40. package/dist/lib/doi.d.ts.map +1 -1
  41. package/dist/lib/doi.js +68 -80
  42. package/dist/lib/doi.js.map +1 -1
  43. package/dist/lib/errors.d.ts.map +1 -1
  44. package/dist/lib/errors.js +3 -1
  45. package/dist/lib/errors.js.map +1 -1
  46. package/dist/lib/grammar.js +3 -3
  47. package/dist/lib/import.d.ts +7 -4
  48. package/dist/lib/import.d.ts.map +1 -1
  49. package/dist/lib/import.js +58 -62
  50. package/dist/lib/import.js.map +1 -1
  51. package/dist/lib/macro-filter.lua +201 -201
  52. package/dist/lib/ooxml.d.ts +207 -0
  53. package/dist/lib/ooxml.d.ts.map +1 -0
  54. package/dist/lib/ooxml.js +634 -0
  55. package/dist/lib/ooxml.js.map +1 -0
  56. package/dist/lib/pdf-comments.js +44 -44
  57. package/dist/lib/plugins.js +57 -57
  58. package/dist/lib/pptx-color-filter.lua +37 -37
  59. package/dist/lib/pptx-themes.js +115 -115
  60. package/dist/lib/rate-limiter.d.ts +8 -0
  61. package/dist/lib/rate-limiter.d.ts.map +1 -1
  62. package/dist/lib/rate-limiter.js +41 -4
  63. package/dist/lib/rate-limiter.js.map +1 -1
  64. package/dist/lib/sections.d.ts.map +1 -1
  65. package/dist/lib/sections.js +5 -2
  66. package/dist/lib/sections.js.map +1 -1
  67. package/dist/lib/spelling.js +2 -2
  68. package/dist/lib/templates.js +387 -387
  69. package/dist/lib/themes.js +51 -51
  70. package/dist/lib/types.d.ts +9 -1
  71. package/dist/lib/types.d.ts.map +1 -1
  72. package/dist/lib/word-extraction.d.ts.map +1 -1
  73. package/dist/lib/word-extraction.js +48 -307
  74. package/dist/lib/word-extraction.js.map +1 -1
  75. package/dist/lib/word.d.ts.map +1 -1
  76. package/dist/lib/word.js +80 -175
  77. package/dist/lib/word.js.map +1 -1
  78. package/dist/lib/wordcomments.d.ts.map +1 -1
  79. package/dist/lib/wordcomments.js +53 -92
  80. package/dist/lib/wordcomments.js.map +1 -1
  81. package/docs-src/build.py +113 -113
  82. package/docs-src/extra.css +208 -208
  83. package/docs-src/md-to-html.lua +6 -6
  84. package/docs-src/template.html +116 -116
  85. package/eslint.config.js +27 -27
  86. package/lib/anchor-match.ts +307 -276
  87. package/lib/annotations.ts +664 -644
  88. package/lib/build.ts +1770 -1766
  89. package/lib/citations.ts +160 -160
  90. package/lib/commands/build.ts +860 -855
  91. package/lib/commands/citations.ts +515 -515
  92. package/lib/commands/comments.ts +1050 -1050
  93. package/lib/commands/context.ts +176 -176
  94. package/lib/commands/core.ts +309 -309
  95. package/lib/commands/doi.ts +451 -435
  96. package/lib/commands/file-ops.ts +372 -372
  97. package/lib/commands/history.ts +320 -320
  98. package/lib/commands/index.ts +87 -87
  99. package/lib/commands/init.ts +259 -259
  100. package/lib/commands/merge-resolve.ts +378 -378
  101. package/lib/commands/preview.ts +178 -178
  102. package/lib/commands/project-info.ts +244 -244
  103. package/lib/commands/quality.ts +517 -517
  104. package/lib/commands/response.ts +454 -454
  105. package/lib/commands/section-boundaries.ts +82 -82
  106. package/lib/commands/sections.ts +451 -451
  107. package/lib/commands/sync.ts +689 -709
  108. package/lib/commands/text-ops.ts +449 -449
  109. package/lib/commands/utilities.ts +448 -448
  110. package/lib/commands/verify-anchors.ts +272 -272
  111. package/lib/commands/word-tools.ts +340 -340
  112. package/lib/comment-realign.ts +99 -517
  113. package/lib/config.ts +84 -84
  114. package/lib/crossref.ts +781 -781
  115. package/lib/csl.ts +191 -191
  116. package/lib/dependencies.ts +132 -98
  117. package/lib/diff-engine.ts +465 -465
  118. package/lib/doi-cache.ts +115 -115
  119. package/lib/doi.ts +879 -897
  120. package/lib/equations.ts +506 -506
  121. package/lib/errors.ts +350 -346
  122. package/lib/format.ts +541 -541
  123. package/lib/git.ts +326 -326
  124. package/lib/grammar.ts +303 -303
  125. package/lib/image-registry.ts +180 -180
  126. package/lib/import.ts +906 -911
  127. package/lib/journals.ts +543 -543
  128. package/lib/macro-filter.lua +201 -201
  129. package/lib/macros.ts +273 -273
  130. package/lib/merge.ts +633 -633
  131. package/lib/ooxml.ts +768 -0
  132. package/lib/orcid.ts +144 -144
  133. package/lib/pdf-comments.ts +263 -263
  134. package/lib/pdf-import.ts +524 -524
  135. package/lib/plugins.ts +362 -362
  136. package/lib/postprocess.ts +188 -188
  137. package/lib/pptx-color-filter.lua +37 -37
  138. package/lib/pptx-template.ts +469 -469
  139. package/lib/pptx-themes.ts +483 -483
  140. package/lib/protect-restore.ts +520 -520
  141. package/lib/rate-limiter.ts +127 -94
  142. package/lib/response.ts +197 -197
  143. package/lib/restore-references.ts +240 -240
  144. package/lib/review.ts +327 -327
  145. package/lib/schema.ts +488 -488
  146. package/lib/scientific-words.ts +73 -73
  147. package/lib/sections.ts +428 -425
  148. package/lib/slides.ts +756 -756
  149. package/lib/spelling.ts +334 -334
  150. package/lib/templates.ts +526 -526
  151. package/lib/themes.ts +742 -742
  152. package/lib/trackchanges.ts +247 -247
  153. package/lib/tui.ts +450 -450
  154. package/lib/types.ts +558 -550
  155. package/lib/undo.ts +250 -250
  156. package/lib/utils.ts +69 -69
  157. package/lib/variables.ts +179 -179
  158. package/lib/word-extraction.ts +525 -806
  159. package/lib/word.ts +526 -643
  160. package/lib/wordcomments.ts +789 -840
  161. package/mkdocs.yml +64 -64
  162. package/package.json +137 -137
  163. package/scripts/postbuild.js +47 -47
  164. package/skill/REFERENCE.md +539 -539
  165. package/skill/SKILL.md +295 -295
  166. package/tsconfig.json +26 -26
  167. package/types/index.d.ts +525 -525
package/mkdocs.yml CHANGED
@@ -1,64 +1,64 @@
1
- site_name: docrev
2
- site_url: https://gillescolling.com/docrev
3
- site_description: CLI for writing documents in Markdown while collaborating with Word users.
4
- site_author: Gilles Colling
5
- repo_url: https://github.com/gcol33/docrev
6
- repo_name: gcol33/docrev
7
-
8
- theme:
9
- name: material
10
- palette:
11
- - scheme: default
12
- primary: custom
13
- accent: custom
14
- toggle:
15
- icon: material/brightness-7
16
- name: Switch to dark mode
17
- - scheme: slate
18
- primary: custom
19
- accent: custom
20
- toggle:
21
- icon: material/brightness-4
22
- name: Switch to light mode
23
- font:
24
- text: Roboto
25
- code: Roboto Mono
26
- features:
27
- - navigation.tabs
28
- - navigation.top
29
- - navigation.instant
30
- - search.highlight
31
- - content.code.copy
32
- icon:
33
- repo: fontawesome/brands/github
34
-
35
- nav:
36
- - Home: index.md
37
- - Get Started: workflow.md
38
- - Commands: commands.md
39
- - Configuration: configuration.md
40
- - Troubleshooting: troubleshooting.md
41
-
42
- markdown_extensions:
43
- - pymdownx.highlight:
44
- anchor_linenums: true
45
- - pymdownx.superfences
46
- - pymdownx.inlinehilite
47
- - pymdownx.tabbed:
48
- alternate_style: true
49
- - admonition
50
- - pymdownx.details
51
- - attr_list
52
- - md_in_html
53
- - toc:
54
- permalink: true
55
-
56
- extra_css:
57
- - stylesheets/extra.css
58
-
59
- extra:
60
- social:
61
- - icon: fontawesome/brands/github
62
- link: https://github.com/gcol33/docrev
63
- - icon: fontawesome/brands/npm
64
- link: https://www.npmjs.com/package/docrev
1
+ site_name: docrev
2
+ site_url: https://gillescolling.com/docrev
3
+ site_description: CLI for writing documents in Markdown while collaborating with Word users.
4
+ site_author: Gilles Colling
5
+ repo_url: https://github.com/gcol33/docrev
6
+ repo_name: gcol33/docrev
7
+
8
+ theme:
9
+ name: material
10
+ palette:
11
+ - scheme: default
12
+ primary: custom
13
+ accent: custom
14
+ toggle:
15
+ icon: material/brightness-7
16
+ name: Switch to dark mode
17
+ - scheme: slate
18
+ primary: custom
19
+ accent: custom
20
+ toggle:
21
+ icon: material/brightness-4
22
+ name: Switch to light mode
23
+ font:
24
+ text: Roboto
25
+ code: Roboto Mono
26
+ features:
27
+ - navigation.tabs
28
+ - navigation.top
29
+ - navigation.instant
30
+ - search.highlight
31
+ - content.code.copy
32
+ icon:
33
+ repo: fontawesome/brands/github
34
+
35
+ nav:
36
+ - Home: index.md
37
+ - Get Started: workflow.md
38
+ - Commands: commands.md
39
+ - Configuration: configuration.md
40
+ - Troubleshooting: troubleshooting.md
41
+
42
+ markdown_extensions:
43
+ - pymdownx.highlight:
44
+ anchor_linenums: true
45
+ - pymdownx.superfences
46
+ - pymdownx.inlinehilite
47
+ - pymdownx.tabbed:
48
+ alternate_style: true
49
+ - admonition
50
+ - pymdownx.details
51
+ - attr_list
52
+ - md_in_html
53
+ - toc:
54
+ permalink: true
55
+
56
+ extra_css:
57
+ - stylesheets/extra.css
58
+
59
+ extra:
60
+ social:
61
+ - icon: fontawesome/brands/github
62
+ link: https://github.com/gcol33/docrev
63
+ - icon: fontawesome/brands/npm
64
+ link: https://www.npmjs.com/package/docrev
package/package.json CHANGED
@@ -1,137 +1,137 @@
1
- {
2
- "name": "docrev",
3
- "version": "0.10.1",
4
- "description": "Academic paper revision workflow: Word ↔ Markdown round-trips, DOI validation, reviewer comments",
5
- "type": "module",
6
- "types": "dist/lib/types.d.ts",
7
- "exports": {
8
- ".": {
9
- "types": "./dist/lib/annotations.d.ts",
10
- "import": "./dist/lib/annotations.js"
11
- },
12
- "./annotations": {
13
- "types": "./dist/lib/annotations.d.ts",
14
- "import": "./dist/lib/annotations.js"
15
- },
16
- "./build": {
17
- "types": "./dist/lib/build.d.ts",
18
- "import": "./dist/lib/build.js"
19
- },
20
- "./citations": {
21
- "types": "./dist/lib/citations.d.ts",
22
- "import": "./dist/lib/citations.js"
23
- },
24
- "./crossref": {
25
- "types": "./dist/lib/crossref.d.ts",
26
- "import": "./dist/lib/crossref.js"
27
- },
28
- "./doi": {
29
- "types": "./dist/lib/doi.d.ts",
30
- "import": "./dist/lib/doi.js"
31
- },
32
- "./equations": {
33
- "types": "./dist/lib/equations.d.ts",
34
- "import": "./dist/lib/equations.js"
35
- },
36
- "./git": {
37
- "types": "./dist/lib/git.d.ts",
38
- "import": "./dist/lib/git.js"
39
- },
40
- "./journals": {
41
- "types": "./dist/lib/journals.d.ts",
42
- "import": "./dist/lib/journals.js"
43
- },
44
- "./merge": {
45
- "types": "./dist/lib/merge.d.ts",
46
- "import": "./dist/lib/merge.js"
47
- },
48
- "./sections": {
49
- "types": "./dist/lib/sections.d.ts",
50
- "import": "./dist/lib/sections.js"
51
- },
52
- "./word": {
53
- "types": "./dist/lib/word.d.ts",
54
- "import": "./dist/lib/word.js"
55
- },
56
- "./variables": {
57
- "types": "./dist/lib/variables.d.ts",
58
- "import": "./dist/lib/variables.js"
59
- },
60
- "./grammar": {
61
- "types": "./dist/lib/grammar.d.ts",
62
- "import": "./dist/lib/grammar.js"
63
- },
64
- "./trackchanges": {
65
- "types": "./dist/lib/trackchanges.d.ts",
66
- "import": "./dist/lib/trackchanges.js"
67
- },
68
- "./spelling": {
69
- "types": "./dist/lib/spelling.d.ts",
70
- "import": "./dist/lib/spelling.js"
71
- },
72
- "./wordcomments": {
73
- "types": "./dist/lib/wordcomments.d.ts",
74
- "import": "./dist/lib/wordcomments.js"
75
- }
76
- },
77
- "engines": {
78
- "node": ">=18.0.0"
79
- },
80
- "bin": {
81
- "rev": "bin/rev.js"
82
- },
83
- "scripts": {
84
- "build": "tsc && node scripts/postbuild.js",
85
- "build:watch": "tsc --watch",
86
- "dev": "tsx bin/rev.ts",
87
- "test": "tsx --test test/*.test.js",
88
- "test:ts": "tsx --test test/*.test.ts",
89
- "test:watch": "node --test --watch test/*.test.js",
90
- "test:coverage": "c8 --reporter=text --reporter=lcov node --test test/*.test.js",
91
- "typecheck": "tsc --noEmit",
92
- "prepublishOnly": "npm run build"
93
- },
94
- "repository": {
95
- "type": "git",
96
- "url": "git+https://github.com/gcol33/docrev.git"
97
- },
98
- "bugs": {
99
- "url": "https://github.com/gcol33/docrev/issues"
100
- },
101
- "homepage": "https://github.com/gcol33/docrev#readme",
102
- "keywords": [
103
- "markdown",
104
- "word",
105
- "docx",
106
- "track-changes",
107
- "comments",
108
- "academic",
109
- "writing",
110
- "pandoc",
111
- "criticmarkup"
112
- ],
113
- "author": "Gilles Colling",
114
- "license": "MIT",
115
- "dependencies": {
116
- "adm-zip": "^0.5.16",
117
- "chalk": "^5.3.0",
118
- "commander": "^12.0.0",
119
- "dictionary-en": "^4.0.0",
120
- "dictionary-en-gb": "^3.0.0",
121
- "diff": "^8.0.2",
122
- "mathml-to-latex": "^1.5.0",
123
- "nspell": "^2.1.5",
124
- "pdf-lib": "^1.17.1",
125
- "pdfjs-dist": "^5.4.530",
126
- "tsx": "^4.21.0",
127
- "xml2js": "^0.6.2",
128
- "yaml": "^2.8.2"
129
- },
130
- "devDependencies": {
131
- "@types/adm-zip": "^0.5.7",
132
- "@types/node": "^25.2.0",
133
- "@types/xml2js": "^0.4.14",
134
- "c8": "^10.1.2",
135
- "typescript": "^5.9.3"
136
- }
137
- }
1
+ {
2
+ "name": "docrev",
3
+ "version": "0.11.0",
4
+ "description": "Academic paper revision workflow: Word ↔ Markdown round-trips, DOI validation, reviewer comments",
5
+ "type": "module",
6
+ "types": "dist/lib/types.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/lib/annotations.d.ts",
10
+ "import": "./dist/lib/annotations.js"
11
+ },
12
+ "./annotations": {
13
+ "types": "./dist/lib/annotations.d.ts",
14
+ "import": "./dist/lib/annotations.js"
15
+ },
16
+ "./build": {
17
+ "types": "./dist/lib/build.d.ts",
18
+ "import": "./dist/lib/build.js"
19
+ },
20
+ "./citations": {
21
+ "types": "./dist/lib/citations.d.ts",
22
+ "import": "./dist/lib/citations.js"
23
+ },
24
+ "./crossref": {
25
+ "types": "./dist/lib/crossref.d.ts",
26
+ "import": "./dist/lib/crossref.js"
27
+ },
28
+ "./doi": {
29
+ "types": "./dist/lib/doi.d.ts",
30
+ "import": "./dist/lib/doi.js"
31
+ },
32
+ "./equations": {
33
+ "types": "./dist/lib/equations.d.ts",
34
+ "import": "./dist/lib/equations.js"
35
+ },
36
+ "./git": {
37
+ "types": "./dist/lib/git.d.ts",
38
+ "import": "./dist/lib/git.js"
39
+ },
40
+ "./journals": {
41
+ "types": "./dist/lib/journals.d.ts",
42
+ "import": "./dist/lib/journals.js"
43
+ },
44
+ "./merge": {
45
+ "types": "./dist/lib/merge.d.ts",
46
+ "import": "./dist/lib/merge.js"
47
+ },
48
+ "./sections": {
49
+ "types": "./dist/lib/sections.d.ts",
50
+ "import": "./dist/lib/sections.js"
51
+ },
52
+ "./word": {
53
+ "types": "./dist/lib/word.d.ts",
54
+ "import": "./dist/lib/word.js"
55
+ },
56
+ "./variables": {
57
+ "types": "./dist/lib/variables.d.ts",
58
+ "import": "./dist/lib/variables.js"
59
+ },
60
+ "./grammar": {
61
+ "types": "./dist/lib/grammar.d.ts",
62
+ "import": "./dist/lib/grammar.js"
63
+ },
64
+ "./trackchanges": {
65
+ "types": "./dist/lib/trackchanges.d.ts",
66
+ "import": "./dist/lib/trackchanges.js"
67
+ },
68
+ "./spelling": {
69
+ "types": "./dist/lib/spelling.d.ts",
70
+ "import": "./dist/lib/spelling.js"
71
+ },
72
+ "./wordcomments": {
73
+ "types": "./dist/lib/wordcomments.d.ts",
74
+ "import": "./dist/lib/wordcomments.js"
75
+ }
76
+ },
77
+ "engines": {
78
+ "node": ">=18.0.0"
79
+ },
80
+ "bin": {
81
+ "rev": "bin/rev.js"
82
+ },
83
+ "scripts": {
84
+ "build": "tsc && node scripts/postbuild.js",
85
+ "build:watch": "tsc --watch",
86
+ "dev": "tsx bin/rev.ts",
87
+ "test": "tsx --test test/*.test.js",
88
+ "test:ts": "tsx --test test/*.test.ts",
89
+ "test:watch": "node --test --watch test/*.test.js",
90
+ "test:coverage": "c8 --reporter=text --reporter=lcov node --test test/*.test.js",
91
+ "typecheck": "tsc --noEmit",
92
+ "prepublishOnly": "npm run build"
93
+ },
94
+ "repository": {
95
+ "type": "git",
96
+ "url": "git+https://github.com/gcol33/docrev.git"
97
+ },
98
+ "bugs": {
99
+ "url": "https://github.com/gcol33/docrev/issues"
100
+ },
101
+ "homepage": "https://github.com/gcol33/docrev#readme",
102
+ "keywords": [
103
+ "markdown",
104
+ "word",
105
+ "docx",
106
+ "track-changes",
107
+ "comments",
108
+ "academic",
109
+ "writing",
110
+ "pandoc",
111
+ "criticmarkup"
112
+ ],
113
+ "author": "Gilles Colling",
114
+ "license": "MIT",
115
+ "dependencies": {
116
+ "adm-zip": "^0.5.16",
117
+ "chalk": "^5.3.0",
118
+ "commander": "^12.0.0",
119
+ "dictionary-en": "^4.0.0",
120
+ "dictionary-en-gb": "^3.0.0",
121
+ "diff": "^8.0.2",
122
+ "mathml-to-latex": "^1.5.0",
123
+ "nspell": "^2.1.5",
124
+ "pdf-lib": "^1.17.1",
125
+ "pdfjs-dist": "^5.4.530",
126
+ "tsx": "^4.21.0",
127
+ "xml2js": "^0.6.2",
128
+ "yaml": "^2.8.2"
129
+ },
130
+ "devDependencies": {
131
+ "@types/adm-zip": "^0.5.7",
132
+ "@types/node": "^25.2.0",
133
+ "@types/xml2js": "^0.4.14",
134
+ "c8": "^10.1.2",
135
+ "typescript": "^5.9.3"
136
+ }
137
+ }
@@ -1,47 +1,47 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * Post-build fixups for compiled TypeScript output.
5
- *
6
- * tsc compiles bin/rev.ts → dist/bin/rev.js but:
7
- * 1. Preserves the #!/usr/bin/env tsx shebang (needs to be node)
8
- * 2. Relative paths like '../package.json' break (bin/ → dist/bin/ adds a level)
9
- *
10
- * Also copies non-TS asset files (lua filters) from lib/ to dist/lib/ so the
11
- * compiled output can locate them via `import.meta.url`. Without this step
12
- * the lua filters live in lib/ in the published tarball while the runtime
13
- * looks for them in dist/lib/.
14
- */
15
-
16
- import { readFileSync, writeFileSync, readdirSync, copyFileSync, mkdirSync, existsSync } from 'fs';
17
- import { join, dirname } from 'path';
18
- import { fileURLToPath } from 'url';
19
-
20
- const __dirname = dirname(fileURLToPath(import.meta.url));
21
- const projectRoot = join(__dirname, '..');
22
- const revPath = join(projectRoot, 'dist', 'bin', 'rev.js');
23
-
24
- let content = readFileSync(revPath, 'utf-8');
25
-
26
- // Fix shebang: tsx → node
27
- content = content.replace('#!/usr/bin/env tsx', '#!/usr/bin/env node');
28
-
29
- // Fix package.json path: ../package.json → ../../package.json
30
- // (bin/rev.ts uses ../package.json which is correct from bin/, but from dist/bin/ needs one more level)
31
- content = content.replace("'../package.json'", "'../../package.json'");
32
-
33
- writeFileSync(revPath, content, 'utf-8');
34
- console.log('postbuild: fixed dist/bin/rev.js (shebang + paths)');
35
-
36
- // Copy lua filter assets so import.meta.url resolves them at runtime.
37
- const libDir = join(projectRoot, 'lib');
38
- const distLibDir = join(projectRoot, 'dist', 'lib');
39
- if (!existsSync(distLibDir)) {
40
- mkdirSync(distLibDir, { recursive: true });
41
- }
42
- for (const entry of readdirSync(libDir)) {
43
- if (entry.endsWith('.lua')) {
44
- copyFileSync(join(libDir, entry), join(distLibDir, entry));
45
- console.log(`postbuild: copied ${entry} → dist/lib/`);
46
- }
47
- }
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Post-build fixups for compiled TypeScript output.
5
+ *
6
+ * tsc compiles bin/rev.ts → dist/bin/rev.js but:
7
+ * 1. Preserves the #!/usr/bin/env tsx shebang (needs to be node)
8
+ * 2. Relative paths like '../package.json' break (bin/ → dist/bin/ adds a level)
9
+ *
10
+ * Also copies non-TS asset files (lua filters) from lib/ to dist/lib/ so the
11
+ * compiled output can locate them via `import.meta.url`. Without this step
12
+ * the lua filters live in lib/ in the published tarball while the runtime
13
+ * looks for them in dist/lib/.
14
+ */
15
+
16
+ import { readFileSync, writeFileSync, readdirSync, copyFileSync, mkdirSync, existsSync } from 'fs';
17
+ import { join, dirname } from 'path';
18
+ import { fileURLToPath } from 'url';
19
+
20
+ const __dirname = dirname(fileURLToPath(import.meta.url));
21
+ const projectRoot = join(__dirname, '..');
22
+ const revPath = join(projectRoot, 'dist', 'bin', 'rev.js');
23
+
24
+ let content = readFileSync(revPath, 'utf-8');
25
+
26
+ // Fix shebang: tsx → node
27
+ content = content.replace('#!/usr/bin/env tsx', '#!/usr/bin/env node');
28
+
29
+ // Fix package.json path: ../package.json → ../../package.json
30
+ // (bin/rev.ts uses ../package.json which is correct from bin/, but from dist/bin/ needs one more level)
31
+ content = content.replace("'../package.json'", "'../../package.json'");
32
+
33
+ writeFileSync(revPath, content, 'utf-8');
34
+ console.log('postbuild: fixed dist/bin/rev.js (shebang + paths)');
35
+
36
+ // Copy lua filter assets so import.meta.url resolves them at runtime.
37
+ const libDir = join(projectRoot, 'lib');
38
+ const distLibDir = join(projectRoot, 'dist', 'lib');
39
+ if (!existsSync(distLibDir)) {
40
+ mkdirSync(distLibDir, { recursive: true });
41
+ }
42
+ for (const entry of readdirSync(libDir)) {
43
+ if (entry.endsWith('.lua')) {
44
+ copyFileSync(join(libDir, entry), join(distLibDir, entry));
45
+ console.log(`postbuild: copied ${entry} → dist/lib/`);
46
+ }
47
+ }