@wp-blocks/make-pot 1.3.1 → 1.4.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.
package/README.md CHANGED
@@ -27,7 +27,7 @@ npx @wp-blocks/make-pot [sourceDirectory] [destination] [options]
27
27
  - `sourceDirectory` (optional): Specifies the source directory of your plugin or theme. If not provided, the `.pot` file root will be the source directory.
28
28
  - `destination` (optional): Specifies the destination directory where the `.pot` file will be generated. If not provided, the `.pot` file will be created in the source directory.
29
29
 
30
- #### Options:
30
+ #### Make Pot Options:
31
31
 
32
32
  - `--version`: Displays the version number of `make-pot`.
33
33
  - `-h`, `--help`: Displays help information.
@@ -63,6 +63,98 @@ To do so, create a `build:makepot` action in your `package.json` with the follow
63
63
  "build:makepot": "npx @wp-blocks/make-pot [sourceDirectory] [destination] [options]"
64
64
  }
65
65
  ```
66
+ ---
67
+
68
+ # JSON Translations
69
+
70
+ ### Why JSON Translation for WordPress JavaScript?
71
+
72
+ #### Overview
73
+ WordPress 5.0 introduced Gutenberg, a JavaScript-heavy editor. This shifted much of the internationalization (I18N) work from the server to the client side. While functions like `wp_localize_script()` were used before, Gutenberg required a more robust solution.
74
+
75
+ #### JavaScript Localization Functions
76
+ WordPress 5.0 introduced the `wp-i18n` JavaScript package, offering localization functions (`__()`, `_x()`, `_n()`, `_nx()`, `sprintf()`) similar to their PHP counterparts, enabling seamless I18N in JavaScript.
77
+
78
+ #### Loading Translations
79
+ To fully internationalize a plugin or theme, you must load translations using `wp_set_script_translations()`, which requires:
80
+ 1. Script handle (e.g., `my-plugin-script`)
81
+ 2. Text domain (e.g., `my-plugin`)
82
+ 3. Optional: Path to translation files (if not hosted on WordPress.org)
83
+
84
+ #### JSON Translation Files
85
+ Unlike traditional PO/MO files, JavaScript translations use JSON. This format is easily readable in JavaScript and compatible with the Jed JavaScript gettext library, used by the `wp-i18n` package. WordPress.org generates these JSON files automatically, but custom ones can be created if needed.
86
+
87
+ ## JSON Utility args
88
+
89
+ - `source`: (positional) the source directory of your plugin or theme translations (e.g. `languages`).
90
+ - `destination`: (positional and optional) The destination directory where the `.json` file will be generated. If not provided, the `.json` file will be created in the source directory.
91
+ - `--scriptName`: The name of the script that needs this translation file.
92
+ - `--allowedFormats`: The allowed formats of the translation file (e.g. `js` or `tsx`).
93
+ - `--purge`: if enabled, removes the existing translation file. Otherwise, the old translation file will be merged with the new.
94
+ - `--prettyPrint`: Pretty prints the translation file.
95
+ - `--debug`: Enables debug mode.
96
+
97
+ ## How to Generate Json translations
98
+
99
+ #### Build the json translations file
100
+
101
+ first build the translation pot file using `makepot` (no matter with this module or not) and then translate it into the different languages.
102
+
103
+ then run `makejson`:
104
+
105
+ ```bash
106
+ npx @wp-blocks/make-pot makejson language --scriptName="build/frontend.js"
107
+ ```
108
+ It Will create a file for each po file in the `languages` directory with the md5 hash with the name of the file.
109
+ In this case, the file will be named my-frontend-script-en_US-79431f0eb8deb8221f24df5112e15095.json because the md5 hash of "build/frontend.js" is 79431f0eb8deb8221f24df5112e15095.
110
+ This is crucial because the md5 hash has to be the same as the path of the script file.
111
+
112
+ #### Register the javascript block translations
113
+
114
+ ```php
115
+ <?php
116
+ /**
117
+ * Loads the plugin text domain for translation.
118
+ */
119
+ function my_i18n() {
120
+ load_plugin_textdomain( 'my-text-domain', false, __DIR__ . '/languages' );
121
+ }
122
+ add_action( 'init', 'my_i18n' );
123
+
124
+ /**
125
+ * Registers the block using the metadata loaded from the `block.json` file.
126
+ */
127
+ add_action('init', function () {
128
+ register_block_type(__DIR__ . '/build', [
129
+ "script" => "my-vendor-script",
130
+ "viewScript" => "my-frontend-script",
131
+ "editorScript" => "my-editor-script",
132
+ ]);
133
+ });
134
+
135
+ /**
136
+ * Registers the block using the metadata loaded from the `block.json` file.
137
+ */
138
+ function my_register_block_type() {
139
+
140
+ $fe_assets = include __FILE__ . '/build/my-frontend-script.asset.php';
141
+
142
+ wp_register_script(
143
+ 'my-frontend-script',
144
+ VSGE_MB_PLUGIN_URL . 'build/frontend.js',
145
+ $fe_assets['dependencies'],
146
+ $fe_assets['version']
147
+ );
148
+
149
+ // 1 - the name of the hook used to register the script
150
+ // 2 - the text domaim of the block
151
+ // 3 - the path to the translations directory
152
+ wp_set_script_translations( 'my-frontend-script', 'my-text-domain', plugin_dir_url(__FILE__) . '/languages' );
153
+
154
+ ...
155
+ }
156
+ add_action( 'init', 'my_register_block_type' );
157
+ ```
66
158
 
67
159
  ### Credits
68
160
 
@@ -70,6 +162,10 @@ This module is heavily inspired by the original `makepot` command from [WP-CLI](
70
162
  Special thanks to the maintainers in particular [Swissspidy](https://github.com/swissspidy) which
71
163
  has been very helpful with suggestions and tips on how to rebuild `make-pot`.
72
164
 
165
+ #### Useful links
166
+ - https://make.wordpress.org/core/2018/11/09/new-javascript-i18n-support-in-wordpress/
167
+ - https://pascalbirchler.com/internationalization-in-wordpress-5-0/
168
+
73
169
  Feel free to contribute or report issues on [GitHub](https://github.com/example/example).
74
170
 
75
171
  This tool is licensed under the [GNU General Public License v3](LICENSE).
@@ -1 +1 @@
1
- "use strict";var l=Object.create;var o=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var u=Object.getPrototypeOf,y=Object.prototype.hasOwnProperty;var m=(e,i)=>{for(var t in i)o(e,t,{get:i[t],enumerable:!0})},n=(e,i,t,r)=>{if(i&&typeof i=="object"||typeof i=="function")for(let s of g(i))!y.call(e,s)&&s!==t&&o(e,s,{get:()=>i[s],enumerable:!(r=b(i,s))||r.enumerable});return e};var a=(e,i,t)=>(t=e!=null?l(u(e)):{},n(i||!e||!e.__esModule?o(t,"default",{value:e,enumerable:!0}):t,e)),f=e=>n(o({},"__esModule",{value:!0}),e);var S={};m(S,{getArgs:()=>h});module.exports=f(S);var p=a(require("node:process")),k=a(require("yargs")),c=require("yargs/helpers"),d=require("./parseCli.js");function h(e={}){const i=k.default((0,c.hideBin)(p.default.argv)).help("h").alias("help","help").usage("Usage: $0 <source> [destination] [options]").positional("sourceDirectory",{describe:"Source directory",type:"string"}).positional("destination",{describe:"Destination directory",type:"string"}).options({slug:{describe:"Plugin or theme slug",type:"string"},domain:{describe:"Text domain to look for in the source code",type:"string"},"skip-js":{describe:"Skip JavaScript files",type:"boolean"},"skip-php":{describe:"Skip PHP files",type:"boolean"},"skip-blade":{describe:"Skip Blade files",type:"boolean"},"skip-block-json":{describe:"Skip block.json files",type:"boolean"},"skip-theme-json":{describe:"Skip theme.json files",type:"boolean"},"skip-audit":{describe:"Skip auditing of strings",type:"boolean"},headers:{describe:"Headers",type:"string"},"file-comment":{describe:"File comment",type:"string"},"package-name":{describe:"Package name",type:"string"},location:{describe:"Include location information",type:"boolean"},"ignore-domain":{describe:"Ignore text domain",type:"boolean"},mergePaths:{describe:"Merge with existing POT file(s)",type:"string"},subtractPaths:{describe:"Subtract strings from existing POT file(s)",type:"string"},subtractAndMerge:{describe:"Subtract and merge strings from existing POT file(s)",type:"boolean"},include:{describe:"Include specific files",type:"string"},exclude:{describe:"Exclude specific files",type:"string"},silent:{describe:"No output to stdout",type:"boolean"},json:{describe:"Output the json gettext data",type:"boolean"},output:{describe:"Output the gettext data",type:"boolean"}}).parseSync();return(0,d.parseCliArgs)({...e,...i})}0&&(module.exports={getArgs});
1
+ "use strict";var l=Object.create;var o=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var u=Object.getPrototypeOf,y=Object.prototype.hasOwnProperty;var f=(e,i)=>{for(var t in i)o(e,t,{get:i[t],enumerable:!0})},n=(e,i,t,r)=>{if(i&&typeof i=="object"||typeof i=="function")for(let s of g(i))!y.call(e,s)&&s!==t&&o(e,s,{get:()=>i[s],enumerable:!(r=b(i,s))||r.enumerable});return e};var a=(e,i,t)=>(t=e!=null?l(u(e)):{},n(i||!e||!e.__esModule?o(t,"default",{value:e,enumerable:!0}):t,e)),m=e=>n(o({},"__esModule",{value:!0}),e);var S={};f(S,{getArgs:()=>h});module.exports=m(S);var p=a(require("node:process")),k=a(require("yargs")),c=require("yargs/helpers"),d=require("./parseCli.js");function h(e={}){const i=k.default((0,c.hideBin)(p.default.argv)).help("h").alias("help","help").usage("Usage: $0 <source> [destination] [options]").positional("sourceDirectory",{describe:"Source directory",type:"string"}).positional("destination",{describe:"Destination directory",type:"string"}).options({slug:{describe:"Plugin or theme slug",type:"string"},domain:{describe:"Text domain to look for in the source code",type:"string"},"skip-js":{describe:"Skip JavaScript files",type:"boolean"},"skip-php":{describe:"Skip PHP files",type:"boolean"},"skip-blade":{describe:"Skip Blade files",type:"boolean"},"skip-block-json":{describe:"Skip block.json files",type:"boolean"},"skip-theme-json":{describe:"Skip theme.json files",type:"boolean"},"skip-audit":{describe:"Skip auditing of strings",type:"boolean"},headers:{describe:"Headers",type:"string"},"file-comment":{describe:"File comment",type:"string"},"package-name":{describe:"Package name",type:"string"},location:{describe:"Include location information",type:"boolean"},"ignore-domain":{describe:"Ignore text domain",type:"boolean"},mergePaths:{describe:"Merge with existing POT file(s)",type:"string"},subtractPaths:{describe:"Subtract strings from existing POT file(s)",type:"string"},subtractAndMerge:{describe:"Subtract and merge strings from existing POT file(s)",type:"boolean"},include:{describe:"Include specific files",type:"string"},exclude:{describe:"Exclude specific files",type:"string"},silent:{describe:"No output to stdout",type:"boolean",default:!1},json:{describe:"Output the json gettext data",type:"boolean"},output:{describe:"Output the gettext data",type:"boolean"}}).parseSync();return(0,d.parseCliArgs)({...e,...i})}0&&(module.exports={getArgs});
@@ -0,0 +1 @@
1
+ "use strict";var c=Object.create;var s=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var f=Object.getPrototypeOf,y=Object.prototype.hasOwnProperty;var m=(e,t)=>{for(var r in t)s(e,r,{get:t[r],enumerable:!0})},a=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of u(t))!y.call(e,o)&&o!==r&&s(e,o,{get:()=>t[o],enumerable:!(i=g(t,o))||i.enumerable});return e};var n=(e,t,r)=>(r=e!=null?c(f(e)):{},a(t||!e||!e.__esModule?s(r,"default",{value:e,enumerable:!0}):r,e)),b=e=>a(s({},"__esModule",{value:!0}),e);var A={};m(A,{getJsonArgs:()=>J});module.exports=b(A);var p=n(require("node:process")),h=n(require("yargs")),l=require("yargs/helpers"),d=require("./parseCli");function J(e={}){const t=h.default((0,l.hideBin)(p.default.argv)).help("h").alias("help","help").usage("Usage: $0 <source> [destination] [options]").positional("source",{describe:"Source directory",type:"string",default:"./languages"}).positional("destination",{describe:"Destination directory",type:"string"}).options({scriptName:{describe:"The name of the script to be translated",type:"string"},allowedFormats:{describe:"which extensions to use for translation",type:"array"},purge:{describe:"Remove old POT files",type:"boolean",default:!0},prettyPrint:{describe:"Pretty print JSON",type:"boolean",default:!1},debug:{describe:"Debug mode",type:"boolean",default:!1}}).parseSync();return(0,d.parseJsonArgs)({...e,...t})}0&&(module.exports={getJsonArgs});
@@ -1 +1 @@
1
- "use strict";var y=Object.create;var p=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var A=Object.getPrototypeOf,D=Object.prototype.hasOwnProperty;var P=(t,e)=>{for(var n in e)p(t,n,{get:e[n],enumerable:!0})},a=(t,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of k(e))!D.call(t,s)&&s!==n&&p(t,s,{get:()=>e[s],enumerable:!(i=g(e,s))||i.enumerable});return t};var u=(t,e,n)=>(n=t!=null?y(A(t)):{},a(e||!t||!t.__esModule?p(n,"default",{value:t,enumerable:!0}):n,t)),_=t=>a(p({},"__esModule",{value:!0}),t);var j={};P(j,{parseCliArgs:()=>T});module.exports=_(j);var r=u(require("node:fs")),o=u(require("node:path")),b=u(require("node:process")),d=require("../const.js"),c=require("../utils/common.js");function w(t="/",e="default"){const n=t;try{return(0,r.accessSync)(o.join(n,`${e}.php`),r.default.constants.R_OK),"plugin"}catch{console.log(`the current working directory ${n} does not contain a ${e}.php file`)}try{return(0,r.accessSync)(o.join(n,"style.css"),r.default.constants.R_OK),"theme"}catch{console.log(`the current working directory ${n} does not contain a style.css file`)}return n.includes(`wp-content${o.sep}themes`)?"theme":n.includes(`wp-content${o.sep}plugins`)?"plugin":"generic"}function T(t){const e=typeof t._[0]=="string"?t._[0]:".",n=typeof t._[1]=="string"?t._[1]:".",i=b.cwd(),s=t.slug&&typeof t.slug=="string"?t.slug:o.basename(o.resolve(i,e)),l=o.relative(i,e),f=o.relative(i,n),h=t?.domain??w(o.resolve(l),s),m={slug:s,domain:h,paths:{cwd:l,out:f},options:{ignoreDomain:!!t?.ignoreDomain,packageName:String(t.packageName),silent:!!t.silent,json:!!t.json,location:!!t?.location,output:!!t?.output,fileComment:t.fileComment?String(t.fileComment):void 0,skip:{js:!!t.skipJs,php:!!t.skipPhp,blade:!!t.skipBlade,blockJson:!!t.skipBlockJson,themeJson:!!t.skipThemeJson,audit:!!t.skipAudit}},patterns:{mergePaths:(0,c.stringstring)(t.mergePaths)??[],subtractPaths:(0,c.stringstring)(t.subtractPaths)??[],subtractAndMerge:!!t.subtractAndMerge,include:(0,c.stringstring)(t.include)??["**"],exclude:(0,c.stringstring)(t.exclude)??d.DEFAULT_EXCLUDED_PATH}};return m.paths.root=t.root?String(t.root):void 0,m}0&&(module.exports={parseCliArgs});
1
+ "use strict";var h=Object.create;var p=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var P=Object.getPrototypeOf,_=Object.prototype.hasOwnProperty;var D=(t,n)=>{for(var e in n)p(t,e,{get:n[e],enumerable:!0})},m=(t,n,e,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let s of A(n))!_.call(t,s)&&s!==e&&p(t,s,{get:()=>n[s],enumerable:!(i=k(n,s))||i.enumerable});return t};var u=(t,n,e)=>(e=t!=null?h(P(t)):{},m(n||!t||!t.__esModule?p(e,"default",{value:t,enumerable:!0}):e,t)),b=t=>m(p({},"__esModule",{value:!0}),t);var j={};D(j,{parseCliArgs:()=>J,parseJsonArgs:()=>S});module.exports=b(j);var r=u(require("node:fs")),o=u(require("node:path")),g=u(require("node:process")),d=require("../const.js"),c=require("../utils/common.js");function w(t="/",n="default"){const e=t;try{return(0,r.accessSync)(o.join(e,`${n}.php`),r.default.constants.R_OK),"plugin"}catch{console.log(`the current working directory ${e} does not contain a ${n}.php file`)}try{return(0,r.accessSync)(o.join(e,"style.css"),r.default.constants.R_OK),"theme"}catch{console.log(`the current working directory ${e} does not contain a style.css file`)}return e.includes(`wp-content${o.sep}themes`)?"theme":e.includes(`wp-content${o.sep}plugins`)?"plugin":"generic"}function J(t){const n=typeof t._[0]=="string"?t._[0].toString():".",e=typeof t._[1]=="string"?t._[1].toString():".",i=g.cwd(),s=t.slug&&typeof t.slug=="string"?t.slug:o.basename(o.resolve(i,n)),l=o.relative(i,n),y=o.relative(i,e),f=t?.domain??w(o.resolve(l),s),a={slug:s,domain:f,paths:{cwd:l,out:y},options:{ignoreDomain:!!t?.ignoreDomain,packageName:String(t.packageName),silent:t.silent===!0,json:!!t.json,location:!!t?.location,output:!!t?.output,fileComment:t.fileComment?String(t.fileComment):void 0,skip:{js:!!t.skipJs,php:!!t.skipPhp,blade:!!t.skipBlade,blockJson:!!t.skipBlockJson,themeJson:!!t.skipThemeJson,audit:!!t.skipAudit}},patterns:{mergePaths:(0,c.stringstring)(t.mergePaths)??[],subtractPaths:(0,c.stringstring)(t.subtractPaths)??[],subtractAndMerge:!!t.subtractAndMerge,include:(0,c.stringstring)(t.include)??["**"],exclude:(0,c.stringstring)(t.exclude)??d.DEFAULT_EXCLUDED_PATH}};return a.paths.root=t.root?String(t.root):void 0,a}function S(t){const n=typeof t._[0]=="string"?t._[0].toString():"",e=typeof t._[1]=="string"?t._[1].toString():n,i=g.cwd();return{slug:o.basename(o.resolve(i)),source:n,destination:e,scriptName:t.scriptName??"index.js",allowedFormats:t.allowedFormats,purge:!!t.purge,prettyPrint:!!t.prettyPrint,debug:!!t.debug}}0&&(module.exports={parseCliArgs,parseJsonArgs});
package/lib/const.js CHANGED
@@ -1 +1 @@
1
- "use strict";var c=Object.create;var _=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var u=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty;var f=(t,m)=>{for(var s in m)_(t,s,{get:m[s],enumerable:!0})},n=(t,m,s,o)=>{if(m&&typeof m=="object"||typeof m=="function")for(let e of l(m))!b.call(t,e)&&e!==s&&_(t,e,{get:()=>m[e],enumerable:!(o=p(m,e))||o.enumerable});return t};var i=(t,m,s)=>(s=t!=null?c(u(t)):{},n(m||!t||!t.__esModule?_(s,"default",{value:t,enumerable:!0}):s,t)),h=t=>n(_({},"__esModule",{value:!0}),t);var T={};f(T,{DEFAULT_EXCLUDED_PATH:()=>E,allowedFiles:()=>F,blockJson:()=>k,i18nFunctions:()=>J,pkgJsonHeaders:()=>w,pluginHeaders:()=>H,themeHeaders:()=>D,themeJson:()=>j});module.exports=h(T);var d=i(require("./assets/block-i18n.js")),x=i(require("./assets/package-i18n.js")),g=i(require("./assets/theme-i18n.js")),a=i(require("./assets/wp-plugin-i18n.js")),r=i(require("./assets/wp-theme-i18n.js"));const j=g.default,k=d.default,w=x.default,H=a.default,D=r.default,E=[".git","node_modules","vendor","build","dist","uploads","Gruntfile.js","webpack.config.js","**/*.min.js","tsconfig.js","**.test.**","tests"],F=["php","js","jsx","ts","tsx","mjs","cjs"],J={__:["msgid","text_domain"],esc_attr__:["msgid","text_domain"],esc_html__:["msgid","text_domain"],esc_xml__:["msgid","text_domain"],_e:["msgid","text_domain"],esc_attr_e:["msgid","text_domain"],esc_html_e:["msgid","text_domain"],esc_xml_e:["msgid","text_domain"],_x:["msgid","msgctxt","text_domain"],_ex:["msgid","msgctxt","text_domain"],esc_attr_x:["msgid","msgctxt","text_domain"],esc_html_x:["msgid","msgctxt","text_domain"],esc_xml_x:["msgid","msgctxt","text_domain"],_n:["msgid","msgid_plural","number","text_domain"],_nx:["msgid","msgid_plural","number","msgctxt","text_domain"],_n_noop:["msgid","msgid_plural","text_domain"],_nx_noop:["msgid","msgid_plural","msgctxt","text_domain"],_:["msgid","text_domain"],_c:["msgid","text_domain"],_nc:["msgid","msgid_plural","number","text_domain"],__ngettext:["msgid","msgid_plural","number","text_domain"],__ngettext_noop:["msgid","msgid_plural","text_domain"]};0&&(module.exports={DEFAULT_EXCLUDED_PATH,allowedFiles,blockJson,i18nFunctions,pkgJsonHeaders,pluginHeaders,themeHeaders,themeJson});
1
+ "use strict";var c=Object.create;var _=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var u=Object.getPrototypeOf,f=Object.prototype.hasOwnProperty;var b=(t,e)=>{for(var m in e)_(t,m,{get:e[m],enumerable:!0})},n=(t,e,m,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of l(e))!f.call(t,s)&&s!==m&&_(t,s,{get:()=>e[s],enumerable:!(i=p(e,s))||i.enumerable});return t};var o=(t,e,m)=>(m=t!=null?c(u(t)):{},n(e||!t||!t.__esModule?_(m,"default",{value:t,enumerable:!0}):m,t)),h=t=>n(_({},"__esModule",{value:!0}),t);var U={};b(U,{DEFAULT_EXCLUDED_PATH:()=>D,IsoCodeRegex:()=>E,allowedFormats:()=>L,blockJson:()=>k,defaultLocale:()=>J,fileRegex:()=>F,i18nFunctions:()=>T,pkgJsonHeaders:()=>w,pluginHeaders:()=>H,themeHeaders:()=>A,themeJson:()=>j});module.exports=h(U);var d=o(require("./assets/block-i18n.js")),x=o(require("./assets/package-i18n.js")),g=o(require("./assets/theme-i18n.js")),a=o(require("./assets/wp-plugin-i18n.js")),r=o(require("./assets/wp-theme-i18n.js"));const j=g.default,k=d.default,w=x.default,H=a.default,A=r.default,D=[".git","node_modules","vendor","build","dist","uploads","Gruntfile.js","webpack.config.js","**/*.min.js","tsconfig.js","**.test.**","tests"],E=/-([a-z]{2}_[A-Z]{2})\.po$/,F=/#:\s*(.*?)(?::\d+)?$/,J="en_US",L=["php","js","jsx","ts","tsx","mjs","cjs"],T={__:["msgid","text_domain"],esc_attr__:["msgid","text_domain"],esc_html__:["msgid","text_domain"],esc_xml__:["msgid","text_domain"],_e:["msgid","text_domain"],esc_attr_e:["msgid","text_domain"],esc_html_e:["msgid","text_domain"],esc_xml_e:["msgid","text_domain"],_x:["msgid","msgctxt","text_domain"],_ex:["msgid","msgctxt","text_domain"],esc_attr_x:["msgid","msgctxt","text_domain"],esc_html_x:["msgid","msgctxt","text_domain"],esc_xml_x:["msgid","msgctxt","text_domain"],_n:["msgid","msgid_plural","number","text_domain"],_nx:["msgid","msgid_plural","number","msgctxt","text_domain"],_n_noop:["msgid","msgid_plural","text_domain"],_nx_noop:["msgid","msgid_plural","msgctxt","text_domain"],_:["msgid","text_domain"],_c:["msgid","text_domain"],_nc:["msgid","msgid_plural","number","text_domain"],__ngettext:["msgid","msgid_plural","number","text_domain"],__ngettext_noop:["msgid","msgid_plural","text_domain"]};0&&(module.exports={DEFAULT_EXCLUDED_PATH,IsoCodeRegex,allowedFormats,blockJson,defaultLocale,fileRegex,i18nFunctions,pkgJsonHeaders,pluginHeaders,themeHeaders,themeJson});
package/lib/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var a=Object.create;var t=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var x=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty;var c=(r,o)=>{for(var e in o)t(r,e,{get:o[e],enumerable:!0})},f=(r,o,e,n)=>{if(o&&typeof o=="object"||typeof o=="function")for(let m of u(o))!b.call(r,m)&&m!==e&&t(r,m,{get:()=>o[m],enumerable:!(n=d(o,m))||n.enumerable});return r};var k=(r,o,e)=>(e=r!=null?a(x(r)):{},f(o||!r||!r.__esModule?t(e,"default",{value:r,enumerable:!0}):e,r)),v=r=>f(t({},"__esModule",{value:!0}),r);var P={};c(P,{doTree:()=>i.doTree,makePot:()=>g.makePot});module.exports=v(P);var p=require("./cli/getArgs.js"),s=k(require("./run.js")),g=require("./parser/makePot.js"),i=require("./parser/tree.js");const A=(0,p.getArgs)();(0,s.default)(A);0&&(module.exports={doTree,makePot});
2
+ "use strict";var i=Object.create;var t=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var C=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty;var c=(o,r)=>{for(var m in r)t(o,m,{get:r[m],enumerable:!0})},p=(o,r,m,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let e of k(r))!b.call(o,e)&&e!==m&&t(o,e,{get:()=>r[e],enumerable:!(n=x(r,e))||n.enumerable});return o};var u=(o,r,m)=>(m=o!=null?i(C(o)):{},p(r||!o||!o.__esModule?t(m,"default",{value:o,enumerable:!0}):m,o)),v=o=>p(t({},"__esModule",{value:!0}),o);var J={};c(J,{MakeJsonCommand:()=>d.MakeJsonCommand,doTree:()=>g.doTree,makePot:()=>s.makePot});module.exports=v(J);var a=require("./cli/getArgs.js"),f=u(require("./potCommand")),s=require("./parser/makePot.js"),d=require("./parser/makeJson.js"),g=require("./parser/tree.js");const A=(0,a.getArgs)();(0,f.default)(A);0&&(module.exports={MakeJsonCommand,doTree,makePot});
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ "use strict";var d=Object.create;var a=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var f=Object.getPrototypeOf,k=Object.prototype.hasOwnProperty;var l=(o,e,n,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of p(e))!k.call(o,r)&&r!==n&&a(o,r,{get:()=>e[r],enumerable:!(s=g(e,r))||s.enumerable});return o};var b=(o,e,n)=>(n=o!=null?d(f(o)):{},l(e||!o||!o.__esModule?a(n,"default",{value:o,enumerable:!0}):n,o));var i=require("./cli/getJsonArgs"),c=b(require("./parser/makeJson")),t=require("./utils/common");const m=(0,i.getJsonArgs)(),h=new c.default(m);if(Object.keys(m).length>0){(0,t.printHeader)();const o=new Date;h.invoke().then(e=>{m.debug&&console.log(e),(0,t.printTimeElapsed)(o)}).catch(e=>{console.error(`\u{1FAE4} make-json - Error: ${e}`)})}
@@ -0,0 +1,3 @@
1
+ "use strict";var w=Object.create;var p=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var x=Object.getPrototypeOf,S=Object.prototype.hasOwnProperty;var W=(r,e)=>{for(var t in e)p(r,t,{get:e[t],enumerable:!0})},f=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of J(e))!S.call(r,n)&&n!==t&&p(r,n,{get:()=>e[n],enumerable:!(s=j(e,n))||s.enumerable});return r};var u=(r,e,t)=>(t=r!=null?w(x(r)):{},f(e||!r||!r.__esModule?p(t,"default",{value:r,enumerable:!0}):t,r)),P=r=>f(p({},"__esModule",{value:!0}),r);var N={};W(N,{MakeJsonCommand:()=>v,default:()=>C});module.exports=P(N);var y=u(require("node:crypto")),d=u(require("node:fs")),c=u(require("node:path")),F=require("glob"),g=require("../const");class v{source;destination;allowedFormats;purge;prettyPrint;debug;scriptName;constructor(e){if(!e.source)throw new Error("No source directory specified");if(!d.existsSync(e.source))throw new Error("Source directory not found");this.scriptName=this.md5(e.scriptName||"index.js"),this.source=e.source,this.destination=e.destination,this.allowedFormats=e.allowedFormats??[".ts",".tsx",".js",".jsx",".mjs",".cjs"],this.purge=e.purge,this.prettyPrint=e.prettyPrint,this.debug=e.debug}async invoke(){const e=await(0,F.glob)("**/*.po",{cwd:this.source,nodir:!0}),t={};for(const s of e){const n=s.replace(".po",`-${this.scriptName}.json`);t[n]=this.processFile(c.default.join(this.source,s))}for(const[s,n]of Object.entries(t)){let o;if(this.purge)d.existsSync(c.default.join(this.destination,s))&&(console.log(`Removing ${c.default.join(this.destination,s)} as the purge option is enabled`),d.unlinkSync(c.default.join(this.destination,s))),o=JSON.stringify(n,null,this?.prettyPrint?2:0);else{const l=d.readFileSync(c.default.join(this.source,s),"utf8");o=JSON.stringify({...n,...JSON.parse(l)},null,this?.prettyPrint?2:0)}d.writeFileSync(c.default.join(this.destination,s),o),console.log(`JSON file written to ${this.destination+s}`)}return t}processFile(e){const t=d.readFileSync(e,"utf8"),s=this.extractIsoCode(e),{header:n,translations:o}=this.parsePoFile(t);return this.convertToJed(n,o,s)}parsePoFile(e){const t=e.split(`
2
+ `),s={};let n="",o="",l=[],h=[],i=0;for(;i<t.length&&t[i].trim()==="";)i++;if(i<t.length&&!t[i].startsWith('msgid ""'))throw new Error(`Invalid PO file format: expected 'msgid ""' at the start of the header`);for(;i<t.length&&t[i].trim()!=="";){if(t[i].startsWith('msgid ""')||t[i].startsWith('msgstr ""')){i++;continue}t[i].startsWith('"')&&t[i].endsWith('"')&&(n+=`${t[i].slice(1,-1)}
3
+ `),i++}for(i++;i<t.length;i++){const a=t[i].trim();if(a.startsWith("#: ")){if(a.startsWith("#: ")){const m=a.match(g.fileRegex);if(typeof m?.[1]=="string"){const b=m[1].trim();h.push(b)}}}else a.startsWith('msgid "')?(o&&l&&this.isCompatibleFile(h)&&(s[o]=l),o=a.slice(7,-1),l=[],h=[]):a.startsWith('msgstr "')?l.push(a.slice(8,-1)):a.startsWith('"')&&a.endsWith('"')&&l.push(a.slice(1,-1))}return o&&l.length&&this.isCompatibleFile(h)&&(s[o]=l),{header:n,translations:s}}convertToJed(e,t,s){return console.log("Found translations:",Object.keys(t).length),{domain:"messages",locale_data:{messages:{"":{domain:"messages",plural_forms:this.getPluralForms(e),lang:s||this.getLanguage(e)},...t}}}}extractIsoCode(e){const t=e.match(g.IsoCodeRegex);return t?t[1]:void 0}getPluralForms(e){const t=e.match(/Plural-Forms:\s*(.*?)\n/);return t?t[1]:"nplurals=2; plural=(n != 1);"}getLanguage(e){const t=e.match(/Language:\s*(.*?)\n/);return t?t[1]:g.defaultLocale}isCompatibleFile(e){return this.allowedFormats?e.some(t=>this.allowedFormats.some(s=>t.endsWith(s))):!0}md5(e){return y.default.createHash("md5").update(e).digest("hex")}}var C=v;0&&(module.exports={MakeJsonCommand});
@@ -1 +1 @@
1
- "use strict";var f=Object.create;var s=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var d=Object.getPrototypeOf,g=Object.prototype.hasOwnProperty;var P=(t,o)=>{for(var e in o)s(t,e,{get:o[e],enumerable:!0})},a=(t,o,e,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of l(o))!g.call(t,n)&&n!==e&&s(t,n,{get:()=>o[n],enumerable:!(r=h(o,n))||r.enumerable});return t};var j=(t,o,e)=>(e=t!=null?f(d(t)):{},a(o||!t||!t.__esModule?s(e,"default",{value:t,enumerable:!0}):e,t)),x=t=>a(s({},"__esModule",{value:!0}),t);var w={};P(w,{makePot:()=>k});module.exports=x(w);var i=j(require("node:path")),p=require("../extractors/headers.js"),m=require("../extractors/json.js"),c=require("../fs/fs.js"),u=require("./exec.js");function A(t){return i.default.join(process.cwd(),t.headers?.domainPath??t.paths.out??"languages",`${t?.slug}.${t.options?.json?"json":"pot"}`)}async function k(t){const o=(0,m.extractPackageJson)(t),e=(0,p.extractMainFileData)(t);t.headers={...t.headers,...o,...e};const r=await(0,u.exec)(t),n=A(t);return console.log(`Writing pot file to ${n}`),(0,c.writeFile)(r,n),r}0&&(module.exports={makePot});
1
+ "use strict";var g=Object.create;var s=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var l=Object.getPrototypeOf,d=Object.prototype.hasOwnProperty;var P=(t,o)=>{for(var e in o)s(t,e,{get:o[e],enumerable:!0})},a=(t,o,e,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of h(o))!d.call(t,n)&&n!==e&&s(t,n,{get:()=>o[n],enumerable:!(r=f(o,n))||r.enumerable});return t};var j=(t,o,e)=>(e=t!=null?g(l(t)):{},a(o||!t||!t.__esModule?s(e,"default",{value:t,enumerable:!0}):e,t)),x=t=>a(s({},"__esModule",{value:!0}),t);var y={};P(y,{getOutputPath:()=>w,makePot:()=>k});module.exports=x(y);var i=j(require("node:path")),p=require("../extractors/headers.js"),c=require("../extractors/json.js"),m=require("../fs/fs.js"),u=require("./exec.js");function w(t){return i.default.join(process.cwd(),t??"languages")}function A(t){return i.default.join(process.cwd(),t.headers?.domainPath??t.paths.out??"languages",`${t?.slug}.${t.options?.json?"json":"pot"}`)}async function k(t){const o=(0,c.extractPackageJson)(t),e=(0,p.extractMainFileData)(t);t.headers={...t.headers,...o,...e};const r=await(0,u.exec)(t),n=A(t);return console.log(`Writing pot file to ${n}`),(0,m.writeFile)(r,n),r}0&&(module.exports={getOutputPath,makePot});
@@ -1 +1 @@
1
- "use strict";var g=Object.create;var n=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var x=Object.getPrototypeOf,B=Object.prototype.hasOwnProperty;var F=(e,t)=>{for(var o in t)n(e,o,{get:t[o],enumerable:!0})},c=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of w(t))!B.call(e,s)&&s!==o&&n(e,s,{get:()=>t[s],enumerable:!(r=S(t,s))||r.enumerable});return e};var b=(e,t,o)=>(o=e!=null?g(x(e)):{},c(t||!e||!e.__esModule?n(o,"default",{value:e,enumerable:!0}):o,e)),j=e=>c(n({},"__esModule",{value:!0}),e);var O={};F(O,{processFiles:()=>A});module.exports=j(O);var l=b(require("node:path")),h=require("../const.js"),d=require("../extractors/json.js"),k=require("../fs/glob.js"),p=require("../fs/fs.js"),u=require("./tree.js");async function A(e,t,o){const r=[];let s=0;const y=(0,k.getFiles)(t,e);for await(const i of y){s++;const m=l.default.basename(i),P=l.default.extname(i).replace(/^./,""),a=l.default.resolve(t.paths.cwd,i);(m==="theme.json"||m==="block.json")&&r.push((0,p.readFileAsync)(a).then(f=>(0,d.parseJsonCallback)(f,t.paths.cwd,m))),h.allowedFiles.includes(P)&&r.push((0,p.readFileAsync)(a).then(f=>(0,u.doTree)(f,i))),o?.increment(1,{filename:m}),o?.setTotal(s)}return r}0&&(module.exports={processFiles});
1
+ "use strict";var g=Object.create;var n=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var x=Object.getPrototypeOf,B=Object.prototype.hasOwnProperty;var F=(e,t)=>{for(var o in t)n(e,o,{get:t[o],enumerable:!0})},c=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of w(t))!B.call(e,s)&&s!==o&&n(e,s,{get:()=>t[s],enumerable:!(r=S(t,s))||r.enumerable});return e};var b=(e,t,o)=>(o=e!=null?g(x(e)):{},c(t||!e||!e.__esModule?n(o,"default",{value:e,enumerable:!0}):o,e)),j=e=>c(n({},"__esModule",{value:!0}),e);var O={};F(O,{processFiles:()=>A});module.exports=j(O);var l=b(require("node:path")),h=require("../const.js"),d=require("../extractors/json.js"),f=require("../fs/fs.js"),k=require("../fs/glob.js"),u=require("./tree.js");async function A(e,t,o){const r=[];let s=0;const y=(0,k.getFiles)(t,e);for await(const i of y){s++;const m=l.default.basename(i),P=l.default.extname(i).replace(/^./,""),p=l.default.resolve(t.paths.cwd,i);(m==="theme.json"||m==="block.json")&&r.push((0,f.readFileAsync)(p).then(a=>(0,d.parseJsonCallback)(a,t.paths.cwd,m))),h.allowedFormats.includes(P)&&r.push((0,f.readFileAsync)(p).then(a=>(0,u.doTree)(a,i))),o?.increment(1,{filename:m}),o?.setTotal(s)}return r}0&&(module.exports={processFiles});
@@ -1 +1 @@
1
- "use strict";var n=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var g=(s,o)=>{for(var l in o)n(s,l,{get:o[l],enumerable:!0})},f=(s,o,l,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let e of i(o))!p.call(s,e)&&e!==l&&n(s,e,{get:()=>o[e],enumerable:!(r=c(o,e))||r.enumerable});return s};var m=s=>f(n({},"__esModule",{value:!0}),s);var h={};g(h,{taskRunner:()=>u});module.exports=m(h);async function u(s,o,l,r){return await Promise.allSettled(s).then(e=>e.map(t=>t.status==="fulfilled"&&t.value).filter(Boolean)).then(e=>{for(const t of e)t.blocks.length>0?(o.addArray(t.blocks),console.log(`\u2705 ${t.path} [`,t.blocks.map(a=>a.msgid).join(", "),"]")):console.log("\u274C ",`${t.path} has no strings`);r?.stop()}).catch(e=>{console.log("\u274C Failed!",e),process.exit(1)}),l.options?.silent||(console.log("\u{1F389} Done!"),console.log("\u{1F4DD} Found",Object.values(o.blocks).length,"translation strings in",l.paths.cwd)),o}0&&(module.exports={taskRunner});
1
+ "use strict";var n=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var f=(t,o)=>{for(var s in o)n(t,s,{get:o[s],enumerable:!0})},g=(t,o,s,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let e of a(o))!p.call(t,e)&&e!==s&&n(t,e,{get:()=>o[e],enumerable:!(r=c(o,e))||r.enumerable});return t};var m=t=>g(n({},"__esModule",{value:!0}),t);var h={};f(h,{taskRunner:()=>u});module.exports=m(h);async function u(t,o,s,r){return await Promise.allSettled(t).then(e=>e.map(l=>l.status==="fulfilled"&&l.value).filter(Boolean)).then(e=>{if(r?.stop(),s.options?.silent!==!0)for(const l of e)l.blocks.length>0?(o.addArray(l.blocks),console.log(`\u2705 ${l.path} [`,l.blocks.map(i=>i.msgid).join(", "),"]")):console.log("\u274C ",`${l.path} has no strings`)}).catch(e=>{console.log("\u274C Failed!",e),process.exit(1)}),s.options?.silent||(console.log("\u{1F389} Done!"),console.log("\u{1F4DD} Found",Object.values(o.blocks).length,"translation strings in",s.paths.cwd)),o}0&&(module.exports={taskRunner});
@@ -0,0 +1 @@
1
+ "use strict";var p=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var d=(e,t)=>{for(var r in t)p(e,r,{get:t[r],enumerable:!0})},l=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of c(t))!f.call(e,o)&&o!==r&&p(e,o,{get:()=>t[o],enumerable:!(n=s(t,o))||n.enumerable});return e};var h=e=>l(p({},"__esModule",{value:!0}),e);var k={};d(k,{default:()=>a});module.exports=h(k);var i=require("./parser/makePot.js"),m=require("./utils/common");function a(e){if(Object.keys(e).length>0){(0,m.printHeader)();const t=new Date;(0,i.makePot)(e).then(()=>{(0,m.printTimeElapsed)(t)}).catch(r=>{console.error(`\u{1FAE4} Make-pot - Error: ${r}`)})}}
package/lib/types.js CHANGED
@@ -1 +1 @@
1
- "use strict";var r=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var g=(t,e,a,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of i(e))!p.call(t,n)&&n!==a&&r(t,n,{get:()=>e[n],enumerable:!(o=s(e,n))||o.enumerable});return t};var l=t=>g(r({},"__esModule",{value:!0}),t);var m={};module.exports=l(m);
1
+ "use strict";var r=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var p=(t,e,a,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of i(e))!g.call(t,n)&&n!==a&&r(t,n,{get:()=>e[n],enumerable:!(o=s(e,n))||o.enumerable});return t};var l=t=>p(r({},"__esModule",{value:!0}),t);var d={};module.exports=l(d);
@@ -1,2 +1,2 @@
1
- "use strict";var l=Object.create;var s=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var p=Object.getPrototypeOf,m=Object.prototype.hasOwnProperty;var d=(n,t)=>{for(var r in t)s(n,r,{get:t[r],enumerable:!0})},c=(n,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of f(t))!m.call(n,e)&&e!==r&&s(n,e,{get:()=>t[e],enumerable:!(o=a(t,e))||o.enumerable});return n};var u=(n,t,r)=>(r=n!=null?l(p(n)):{},c(t||!n||!n.__esModule?s(r,"default",{value:n,enumerable:!0}):r,n)),k=n=>c(s({},"__esModule",{value:!0}),n);var w={};d(w,{detectPatternType:()=>P,getCommentBlock:()=>h,getCopyright:()=>S,getPkgJsonData:()=>v,removeCommentMarkup:()=>x,reverseSlashes:()=>b,stringstring:()=>C,stripTranslationMarkup:()=>y});module.exports=k(w);var g=u(require("node:fs")),i=u(require("node:path"));function h(n){const t=n.match(/\/\*\*?[\s\S]*?\*\//);return t!==null?t[0]:n}function x(n){return n.match(/[a-zA-Z].*/gm)}function y(n){const t=/\/\*\*?\s*(?:translators:)\s*([\s\S]*?)\s*\*\/|\/\/\s*(?:translators:)\s*(.*)$/i,r=n.match(t);return r?r[1]:n}function C(n){return typeof n=="string"?n.includes(",")?n.split(","):[n]:null}function P(n){const t=n.includes("."),r=n.includes(i.default.sep);return n.includes("*")?"glob":!t&&!r?"directory":t&&!r?"file":"glob"}function S(n,t="GPL v2 or later"){return`# Copyright (C) ${new Date().getFullYear()} ${n}
2
- # This file is distributed under the ${t} license.`}function b(n){return n.replace(/\//g,"\\")}function v(...n){const t={},r=i.default.join(__dirname,"..","..","package.json"),o=g.default.existsSync(r)?require(r):{name:"makepot",version:""};for(const e of n)o[e]&&(t[e]=o[e]);return t}0&&(module.exports={detectPatternType,getCommentBlock,getCopyright,getPkgJsonData,removeCommentMarkup,reverseSlashes,stringstring,stripTranslationMarkup});
1
+ "use strict";var g=Object.create;var i=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var m=Object.getPrototypeOf,d=Object.prototype.hasOwnProperty;var k=(n,t)=>{for(var e in t)i(n,e,{get:t[e],enumerable:!0})},c=(n,t,e,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of p(t))!d.call(n,r)&&r!==e&&i(n,r,{get:()=>t[r],enumerable:!(o=f(t,r))||o.enumerable});return n};var a=(n,t,e)=>(e=n!=null?g(m(n)):{},c(t||!n||!n.__esModule?i(e,"default",{value:n,enumerable:!0}):e,n)),x=n=>c(i({},"__esModule",{value:!0}),n);var S={};k(S,{detectPatternType:()=>$,getCommentBlock:()=>h,getCopyright:()=>D,getPkgJsonData:()=>l,printHeader:()=>w,printTimeElapsed:()=>C,removeCommentMarkup:()=>y,reverseSlashes:()=>P,stringstring:()=>T,stripTranslationMarkup:()=>v});module.exports=x(S);var u=a(require("node:fs")),s=a(require("node:path"));function h(n){const t=n.match(/\/\*\*?[\s\S]*?\*\//);return t!==null?t[0]:n}function y(n){return n.match(/[a-zA-Z].*/gm)}function v(n){const t=/\/\*\*?\s*(?:translators:)\s*([\s\S]*?)\s*\*\/|\/\/\s*(?:translators:)\s*(.*)$/i,e=n.match(t);return e?e[1]:n}function T(n){return typeof n=="string"?n.includes(",")?n.split(","):[n]:null}function $(n){const t=n.includes("."),e=n.includes(s.default.sep);return n.includes("*")?"glob":!t&&!e?"directory":t&&!e?"file":"glob"}function D(n,t="GPL v2 or later"){return`# Copyright (C) ${new Date().getFullYear()} ${n}
2
+ # This file is distributed under the ${t} license.`}function P(n){return n.replace(/\\/g,"/")}function l(...n){const t={},e=s.default.join(__dirname,"..","..","package.json"),o=u.default.existsSync(e)?require(e):{name:"makepot",version:""};for(const r of n)o[r]&&(t[r]=o[r]);return t}function w(){const{version:n,name:t}=l("name","version");console.log(`${t} version: ${n}`)}function C(n,t=new Date){console.log(`\u{1F680} Translation Pot file created in ${t.getTime()-n.getTime()}ms`)}0&&(module.exports={detectPatternType,getCommentBlock,getCopyright,getPkgJsonData,printHeader,printTimeElapsed,removeCommentMarkup,reverseSlashes,stringstring,stripTranslationMarkup});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wp-blocks/make-pot",
3
- "version": "1.3.1",
3
+ "version": "1.4.0",
4
4
  "license": "GPL-3.0-or-later",
5
5
  "homepage": "https://wp-blocks.github.io/make-pot/",
6
6
  "description": "A Node.js script for generating a POT file from source code",
@@ -9,9 +9,13 @@
9
9
  "John Hooks <bitmachina@outlook.com> (https://johnhooks.io/)"
10
10
  ],
11
11
  "type": "commonjs",
12
- "main": "lib/run.js",
12
+ "main": "lib/potCommand.js",
13
13
  "bin": {
14
- "make-pot": "lib/index.js"
14
+ "default": "lib/index.js",
15
+ "make-pot": "lib/index.js",
16
+ "makepot": "lib/index.js",
17
+ "make-json": "lib/jsonCommand.js",
18
+ "makejson": "lib/jsonCommand.js"
15
19
  },
16
20
  "engines": {
17
21
  "node": ">=16.0.0"
@@ -51,14 +55,15 @@
51
55
  "test:ci": "npm run ci:bundle && node --test",
52
56
  "test:watch": "node --test --watch",
53
57
  "test:coverage": "node --test --experimental-test-coverage",
54
- "run": "node ./lib/index.js tests/fixtures/vinyl/"
58
+ "run": "node ./lib/index.js tests/fixtures/vinyl/",
59
+ "runJson": "node ./lib/jsonCommand.js tests/fixtures/vinyl/"
55
60
  },
56
61
  "dependencies": {
57
- "axios": "^1.6.8",
62
+ "axios": "^1.7.2",
58
63
  "cli-progress": "^3.12.0",
59
64
  "gettext-merger": "^1.2.1",
60
65
  "gettext-parser": "^4.0.4",
61
- "glob": "^10.3.10",
66
+ "glob": "^10.4.2",
62
67
  "tree-sitter": "^0.20.6",
63
68
  "tree-sitter-javascript": "^0.20.4",
64
69
  "tree-sitter-php": "^0.20.0",
@@ -66,12 +71,12 @@
66
71
  "yargs": "^17.7.1"
67
72
  },
68
73
  "devDependencies": {
69
- "@biomejs/biome": "1.7.3",
74
+ "@biomejs/biome": "1.8.3",
70
75
  "@types/cli-progress": "^3.11.5",
71
76
  "@types/gettext-parser": "^4.0.4",
72
- "@types/node": "^20.11.28",
77
+ "@types/node": "^20.14.9",
73
78
  "@types/yargs": "^17.0.32",
74
- "esbuild": "0.21.1",
75
- "typescript": "^5.4.5"
79
+ "esbuild": "0.23.0",
80
+ "typescript": "^5.5.3"
76
81
  }
77
82
  }
@@ -12,7 +12,7 @@ describe("doTree js", () => {
12
12
  const fileParsed = doTree(fileContent, filepath);
13
13
  assert.deepEqual(fileParsed.blocks[0], {
14
14
  comments: {
15
- reference: ["tests\\fixtures\\block\\javascript.js:7"],
15
+ reference: ["tests/fixtures/block/javascript.js:7"],
16
16
  translator: undefined,
17
17
  },
18
18
  msgctxt: undefined,
@@ -31,7 +31,7 @@ describe("doTree php", () => {
31
31
  const fileParsed = doTree(fileContent, filepath);
32
32
  assert.deepEqual(fileParsed.blocks[1], {
33
33
  comments: {
34
- reference: ["tests\\fixtures\\plugin\\plugin.php:65"],
34
+ reference: ["tests/fixtures/plugin/plugin.php:65"],
35
35
  translator: undefined,
36
36
  },
37
37
  msgctxt: undefined,
@@ -50,7 +50,7 @@ describe("doTree tsx file", () => {
50
50
  const fileParsed = doTree(fileContent, filepath);
51
51
  assert.deepEqual(fileParsed.blocks[2], {
52
52
  comments: {
53
- reference: ["tests\\fixtures\\block\\SvgControls.tsx:107"],
53
+ reference: ["tests/fixtures/block/SvgControls.tsx:107"],
54
54
  translator: undefined,
55
55
  },
56
56
  msgctxt: undefined,
package/tsconfig.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "compilerOptions": {
3
- "module": "commonjs",
3
+ "module": "Node16",
4
4
  "moduleResolution": "Node16",
5
5
  "noImplicitAny": true,
6
6
  "preserveConstEnums": true,
package/lib/run.js DELETED
@@ -1 +0,0 @@
1
- "use strict";var i=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var f=(t,e)=>{for(var n in e)i(t,n,{get:e[n],enumerable:!0})},p=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of l(e))!g.call(t,o)&&o!==n&&i(t,o,{get:()=>e[o],enumerable:!(r=c(e,o))||r.enumerable});return t};var d=t=>p(i({},"__esModule",{value:!0}),t);var k={};f(k,{default:()=>a});module.exports=d(k);var m=require("./parser/makePot.js"),s=require("./utils/common");function a(t){if(Object.keys(t).length>0){const{version:e,name:n}=(0,s.getPkgJsonData)("name","version");console.log(`${n} version: ${e}`);const r=new Date;(0,m.makePot)(t).then(()=>{console.log(`\u{1F680} Translation Pot file created in ${new Date().getTime()-r.getTime()}ms`)}).catch(o=>{console.error("Error in makePot: "+o)})}}