properties-file 5.0.2 → 5.0.4
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 +3 -3
- package/dist/cjs/characters.d.ts +32 -0
- package/dist/cjs/characters.js +1 -0
- package/dist/cjs/index.d.ts +10 -0
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/parser/parse.js +1 -1
- package/dist/cjs/unescape/index.js +1 -1
- package/dist/esm/characters.d.ts +32 -0
- package/dist/esm/characters.js +1 -0
- package/dist/esm/index.d.ts +10 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/parser/parse.js +1 -1
- package/dist/esm/unescape/index.js +1 -1
- package/package.json +3 -3
- package/dist/cjs/parse-properties.d.ts +0 -22
- package/dist/cjs/parse-properties.js +0 -1
- package/dist/esm/parse-properties.d.ts +0 -22
- package/dist/esm/parse-properties.js +0 -1
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
[](https://opensource.org/licenses/MIT)
|
|
4
4
|
[](https://www.npmjs.com/package/properties-file)
|
|
5
5
|

|
|
6
|
-

|
|
7
7
|

|
|
8
8
|
|
|
9
9
|
`.properties` file parser, editor, formatter and bundler integrations.
|
|
@@ -28,8 +28,8 @@ npm install properties-file
|
|
|
28
28
|
- `PropertiesEditor` enables insertion, edition, and removal of entries while preserving formatting.
|
|
29
29
|
- `escapeKey` and `escapeValue` convert any content to `.properties` compatible format.
|
|
30
30
|
- Bundler integrations for Webpack, Rollup/Vite, esbuild, and Bun to import `.properties` files directly. See [BUNDLER.md](./docs/BUNDLER.md).
|
|
31
|
-
- **Tiny with 0 dependencies** — `getProperties` is only
|
|
32
|
-
- **Runs everywhere** — compiled to ES5, works in any browser and on Node.js all the way back to v0.
|
|
31
|
+
- **Tiny with 0 dependencies** — `getProperties` is only 970 B min+gzip.
|
|
32
|
+
- **Runs everywhere** — compiled to ES5, works in any browser and on Node.js all the way back to v0.4.0 (2011, the first stable release with ES5 support). [Verified via Docker](./tests/node-compat/).
|
|
33
33
|
- **100% test coverage** based on the output from a Java implementation.
|
|
34
34
|
- Active maintenance (many popular `.properties` packages have been inactive for years). See our [detailed comparison](./docs/COMPARISON.md) with other packages.
|
|
35
35
|
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** Tab character code. */
|
|
2
|
+
export declare const CH_TAB = 9;
|
|
3
|
+
/** Line feed character code. */
|
|
4
|
+
export declare const CH_LF = 10;
|
|
5
|
+
/** Form feed character code. */
|
|
6
|
+
export declare const CH_FF = 12;
|
|
7
|
+
/** Carriage return character code. */
|
|
8
|
+
export declare const CH_CR = 13;
|
|
9
|
+
/** Space character code. */
|
|
10
|
+
export declare const CH_SPACE = 32;
|
|
11
|
+
/** Exclamation mark character code (comment delimiter). */
|
|
12
|
+
export declare const CH_BANG = 33;
|
|
13
|
+
/** Hash character code (comment delimiter). */
|
|
14
|
+
export declare const CH_HASH = 35;
|
|
15
|
+
/** Colon character code (separator). */
|
|
16
|
+
export declare const CH_COLON = 58;
|
|
17
|
+
/** Equals character code (separator). */
|
|
18
|
+
export declare const CH_EQUALS = 61;
|
|
19
|
+
/** Backslash character code (escape / continuation). */
|
|
20
|
+
export declare const CH_BACKSLASH = 92;
|
|
21
|
+
/** Lowercase 'f' character code (formfeed escape). */
|
|
22
|
+
export declare const CH_LOWER_F = 102;
|
|
23
|
+
/** Lowercase 'n' character code (newline escape). */
|
|
24
|
+
export declare const CH_LOWER_N = 110;
|
|
25
|
+
/** Lowercase 'r' character code (carriage return escape). */
|
|
26
|
+
export declare const CH_LOWER_R = 114;
|
|
27
|
+
/** Lowercase 't' character code (tab escape). */
|
|
28
|
+
export declare const CH_LOWER_T = 116;
|
|
29
|
+
/** Lowercase 'u' character code (unicode escape). */
|
|
30
|
+
export declare const CH_LOWER_U = 117;
|
|
31
|
+
/** Byte Order Mark character code. */
|
|
32
|
+
export declare const CH_BOM = 65279;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";function _export(_,C){for(var e in C)Object.defineProperty(_,e,{enumerable:!0,get:Object.getOwnPropertyDescriptor(C,e).get})}Object.defineProperty(exports,"__esModule",{value:!0}),_export(exports,{get CH_BACKSLASH(){return CH_BACKSLASH},get CH_BANG(){return CH_BANG},get CH_BOM(){return CH_BOM},get CH_COLON(){return CH_COLON},get CH_CR(){return CH_CR},get CH_EQUALS(){return CH_EQUALS},get CH_FF(){return CH_FF},get CH_HASH(){return CH_HASH},get CH_LF(){return CH_LF},get CH_LOWER_F(){return CH_LOWER_F},get CH_LOWER_N(){return CH_LOWER_N},get CH_LOWER_R(){return CH_LOWER_R},get CH_LOWER_T(){return CH_LOWER_T},get CH_LOWER_U(){return CH_LOWER_U},get CH_SPACE(){return CH_SPACE},get CH_TAB(){return CH_TAB}});var CH_TAB=9,CH_LF=10,CH_FF=12,CH_CR=13,CH_SPACE=32,CH_BANG=33,CH_HASH=35,CH_COLON=58,CH_EQUALS=61,CH_BACKSLASH=92,CH_LOWER_F=102,CH_LOWER_N=110,CH_LOWER_R=114,CH_LOWER_T=116,CH_LOWER_U=117,CH_BOM=65279;
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -7,6 +7,16 @@ export type KeyValuePairObject = {
|
|
|
7
7
|
/**
|
|
8
8
|
* Converts the content of a `.properties` file to a key-value pair object.
|
|
9
9
|
*
|
|
10
|
+
* This is a self-contained, zero-dependency parser optimized for minimal
|
|
11
|
+
* bundle size. It implements the Java `java.util.Properties` specification:
|
|
12
|
+
*
|
|
13
|
+
* - BOM detection and skipping
|
|
14
|
+
* - Comment lines (`#` or `!`)
|
|
15
|
+
* - Line continuations (trailing odd backslash)
|
|
16
|
+
* - Key-value separator detection (`=`, `:`, or whitespace)
|
|
17
|
+
* - Escape sequence processing (`\\n`, `\\t`, `\\r`, `\\f`, `\\\\`, `\\uXXXX`)
|
|
18
|
+
* - Last-value-wins semantics for duplicate keys
|
|
19
|
+
*
|
|
10
20
|
* @param content - The content of a `.properties` file.
|
|
11
21
|
*
|
|
12
22
|
* @returns A key/value object representing the content of a `.properties` file.
|
package/dist/cjs/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"getProperties",{enumerable:!0,get:function(){return
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"getProperties",{enumerable:!0,get:function(){return q}});var _=function(e){return e>=48&&e<=57?e-48:e>=65&&e<=70?e-55:e>=97&&e<=102?e-87:-1},S=function(e){if(-1===e.indexOf("\\"))return e;for(var r=e.length,a="",t=0,c=0;c<r;)if(92===e.charCodeAt(c)){if(c>t&&(a+=e.slice(t,c)),++c>=r){a+="\\",t=c;break}switch(e.charCodeAt(c)){case 110:a+="\n",c++;break;case 116:a+="\t",c++;break;case 114:a+="\r",c++;break;case 102:a+="\f",c++;break;case 117:if(c+4>=r)throw new Error("malformed escaped unicode characters '".concat(e.slice(c-1,c+5),"'"));var o=_(e.charCodeAt(c+1)),i=_(e.charCodeAt(c+2)),n=_(e.charCodeAt(c+3)),f=_(e.charCodeAt(c+4));if(o<0||i<0||n<0||f<0)throw new Error("malformed escaped unicode characters '".concat(e.slice(c-1,c+5),"'"));a+=String.fromCharCode(o<<12|i<<8|n<<4|f),c+=5;break;default:a+=e.charAt(c),c++}t=c}else c++;return t<r&&(a+=e.slice(t,r)),a},H=function(e,r,a){for(;r<a;){var t=e.charCodeAt(r);if(32!==t&&9!==t&&12!==t)break;r++}return r},q=function(e){for(var r="string"==typeof e?e:e.toString(),a={},t=(r.length>0&&65279===r.charCodeAt(0)?r.slice(1):r).split(/\r\n|\r|\n/),c=t.length,o=0;o<c;){var i=t[o],n=i.length,f=H(i,0,n);if(f>=n)o++;else{var s=i.charCodeAt(f);if(35!==s&&33!==s){for(var d=0,l=n-1;l>=0&&92===i.charCodeAt(l);l--)d++;var h=d%2==1,v=void 0,u=void 0;if(h){var C=(f>0?i.slice(f):i).slice(0,-1),A=[C];for(u=-1!==C.indexOf("\\");h&&o+1<c;){var b=t[++o],g=b.length,p=H(b,0,g);d=0;for(var k=g-1;k>=p&&92===b.charCodeAt(k);k--)d++;var _=(h=d%2==1)?b.slice(p,g-1):b.slice(p);!u&&-1!==_.indexOf("\\")&&(u=!0),A.push(_)}v=A.join("")}else u=-1!==(v=f>0?i.slice(f):i).indexOf("\\");for(var m=v.length,x=0,O=!1;x<m;){var w=v.charCodeAt(x);if(92!==w){if(!O&&(61===w||58===w||32===w||9===w||12===w))break;O=!1,x++}else O=!O,x++}var j=x;if(j<m){var y=v.charCodeAt(j);(32===y||9===y||12===y)&&((j=H(v,j,m))<m&&(y=v.charCodeAt(j))),j<m&&(61===y||58===y)&&(j++,j=H(v,j,m))}var P=v.slice(0,x),q=v.slice(j);a[u?S(P):P]=u?S(q):q,o++}else o++}}return a};
|
package/dist/cjs/parser/parse.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"parseDocument",{enumerable:!0,get:function(){return parseDocument}});var _index=require("../unescape/index.js"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"parseDocument",{enumerable:!0,get:function(){return parseDocument}});var _characters=require("../characters.js"),_index=require("../unescape/index.js"),isWhitespace=function(e){return e===_characters.CH_SPACE||e===_characters.CH_TAB||e===_characters.CH_FF},countTrailingBackslashes=function(e,r){for(var a=0,c=r-1;c>=0&&e.charCodeAt(c)===_characters.CH_BACKSLASH;)a++,c--;return a},parseDocument=function(e){var r="string"==typeof e?e:e.toString(),a=r.length,c=0,t=a>0&&r.charCodeAt(0)===_characters.CH_BOM;t&&(c=1);for(var s="\n",i=c;i<a;i++){var n=r.charCodeAt(i);if(n===_characters.CH_CR){s=i+1<a&&r.charCodeAt(i+1)===_characters.CH_LF?"\r\n":"\r";break}if(n===_characters.CH_LF){s="\n";break}}for(var h=(c>0?r.slice(c):r).split(/\r\n|\r|\n/),o=[],l=0,_=h.length;l<_;){for(var C=h[l],p=l+1,u=0,d=C.length;u<d&&isWhitespace(C.charCodeAt(u));)u++;if(u>=d){var v={type:"blank",rawLine:C,lineNumber:p};o.push(v),l++}else{var f=C.charCodeAt(u);if(f!==_characters.CH_HASH&&f!==_characters.CH_BANG){for(var A=[C],H=p,g=u>0?C.slice(0,u):"",L=countTrailingBackslashes(C,d),b=L%2==1;b&&l+1<_;){var m=h[++l];A.push(m);var S=m.length;b=(L=countTrailingBackslashes(m,S))%2==1}var y=l+1,B=b,O=void 0;if(1===A.length){var k=u>0?C.slice(u):C;O=B?k.slice(0,-1):k}else{for(var x=[],W=0;W<A.length;W++){var N=A[W],j=void 0,T=void 0;if(0===W)j=u,T=N.length-1;else{j=0;for(var E=N.length;j<E&&isWhitespace(N.charCodeAt(j));)j++;T=W===A.length-1&&!B?E:E-1}x.push(N.slice(j,T))}O=x.join("")}for(var F=O.length,w=0,D=!1;w<F;){var K=O.charCodeAt(w);if(K!==_characters.CH_BACKSLASH){if(!D&&(K===_characters.CH_EQUALS||K===_characters.CH_COLON||isWhitespace(K)))break;D=!1,w++}else D=!D,w++}var P=O.slice(0,w),Q="",U=void 0,q="",M=w;if(M<F){for(var G=M;M<F&&isWhitespace(O.charCodeAt(M));)M++;if(M<F){var R=O.charCodeAt(M);if(R===_characters.CH_EQUALS||R===_characters.CH_COLON){Q=O.slice(G,M),U=R===_characters.CH_EQUALS?"=":":";for(var V=++M;M<F&&isWhitespace(O.charCodeAt(M));)M++;q=O.slice(V,M)}else Q=O.slice(G,M)}else Q=O.slice(G,M)}var z=O.slice(M),I={type:"property",rawLines:A,leadingWhitespace:g,key:-1!==P.indexOf("\\")?(0,_index.unescapeContent)(P):P,escapedKey:P,separatorLeading:Q,separatorChar:U,separatorTrailing:q,value:-1!==z.indexOf("\\")?(0,_index.unescapeContent)(z):z,escapedValue:z,startingLineNumber:H,endingLineNumber:y};o.push(I),l++}else{var J={type:"comment",rawLine:C,leadingWhitespace:u>0?C.slice(0,u):"",delimiter:f===_characters.CH_HASH?"#":"!",body:C.slice(u+1),lineNumber:p};o.push(J),l++}}}return{hasBom:t,eolCharacter:s,nodes:o}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"unescapeContent",{enumerable:!0,get:function(){return unescapeContent}});var
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"unescapeContent",{enumerable:!0,get:function(){return unescapeContent}});var _characters=require("../characters.js"),hexValue=function(e){return e>=48&&e<=57?e-48:e>=65&&e<=70?e-55:e>=97&&e<=102?e-87:-1},unescapeContent=function(e){if(-1===e.indexOf("\\"))return e;for(var r=e.length,a="",c=0,t=0;t<r;)if(e.charCodeAt(t)===_characters.CH_BACKSLASH){if(t>c&&(a+=e.slice(c,t)),++t>=r){a+="\\",c=t;break}switch(e.charCodeAt(t)){case _characters.CH_LOWER_N:a+="\n",t++;break;case _characters.CH_LOWER_T:a+="\t",t++;break;case _characters.CH_LOWER_R:a+="\r",t++;break;case _characters.CH_LOWER_F:a+="\f",t++;break;case _characters.CH_LOWER_U:if(t+4>=r)throw new Error("malformed escaped unicode characters '".concat(e.slice(t-1,t+5),"'"));var n=hexValue(e.charCodeAt(t+1)),s=hexValue(e.charCodeAt(t+2)),o=hexValue(e.charCodeAt(t+3)),h=hexValue(e.charCodeAt(t+4));if(n<0||s<0||o<0||h<0)throw new Error("malformed escaped unicode characters '".concat(e.slice(t-1,t+5),"'"));a+=String.fromCharCode(n<<12|s<<8|o<<4|h),t+=5;break;default:a+=e.charAt(t),t++}c=t}else t++;return c<r&&(a+=e.slice(c,r)),a};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** Tab character code. */
|
|
2
|
+
export declare const CH_TAB = 9;
|
|
3
|
+
/** Line feed character code. */
|
|
4
|
+
export declare const CH_LF = 10;
|
|
5
|
+
/** Form feed character code. */
|
|
6
|
+
export declare const CH_FF = 12;
|
|
7
|
+
/** Carriage return character code. */
|
|
8
|
+
export declare const CH_CR = 13;
|
|
9
|
+
/** Space character code. */
|
|
10
|
+
export declare const CH_SPACE = 32;
|
|
11
|
+
/** Exclamation mark character code (comment delimiter). */
|
|
12
|
+
export declare const CH_BANG = 33;
|
|
13
|
+
/** Hash character code (comment delimiter). */
|
|
14
|
+
export declare const CH_HASH = 35;
|
|
15
|
+
/** Colon character code (separator). */
|
|
16
|
+
export declare const CH_COLON = 58;
|
|
17
|
+
/** Equals character code (separator). */
|
|
18
|
+
export declare const CH_EQUALS = 61;
|
|
19
|
+
/** Backslash character code (escape / continuation). */
|
|
20
|
+
export declare const CH_BACKSLASH = 92;
|
|
21
|
+
/** Lowercase 'f' character code (formfeed escape). */
|
|
22
|
+
export declare const CH_LOWER_F = 102;
|
|
23
|
+
/** Lowercase 'n' character code (newline escape). */
|
|
24
|
+
export declare const CH_LOWER_N = 110;
|
|
25
|
+
/** Lowercase 'r' character code (carriage return escape). */
|
|
26
|
+
export declare const CH_LOWER_R = 114;
|
|
27
|
+
/** Lowercase 't' character code (tab escape). */
|
|
28
|
+
export declare const CH_LOWER_T = 116;
|
|
29
|
+
/** Lowercase 'u' character code (unicode escape). */
|
|
30
|
+
export declare const CH_LOWER_U = 117;
|
|
31
|
+
/** Byte Order Mark character code. */
|
|
32
|
+
export declare const CH_BOM = 65279;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export var CH_TAB=9;export var CH_LF=10;export var CH_FF=12;export var CH_CR=13;export var CH_SPACE=32;export var CH_BANG=33;export var CH_HASH=35;export var CH_COLON=58;export var CH_EQUALS=61;export var CH_BACKSLASH=92;export var CH_LOWER_F=102;export var CH_LOWER_N=110;export var CH_LOWER_R=114;export var CH_LOWER_T=116;export var CH_LOWER_U=117;export var CH_BOM=65279;
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -7,6 +7,16 @@ export type KeyValuePairObject = {
|
|
|
7
7
|
/**
|
|
8
8
|
* Converts the content of a `.properties` file to a key-value pair object.
|
|
9
9
|
*
|
|
10
|
+
* This is a self-contained, zero-dependency parser optimized for minimal
|
|
11
|
+
* bundle size. It implements the Java `java.util.Properties` specification:
|
|
12
|
+
*
|
|
13
|
+
* - BOM detection and skipping
|
|
14
|
+
* - Comment lines (`#` or `!`)
|
|
15
|
+
* - Line continuations (trailing odd backslash)
|
|
16
|
+
* - Key-value separator detection (`=`, `:`, or whitespace)
|
|
17
|
+
* - Escape sequence processing (`\\n`, `\\t`, `\\r`, `\\f`, `\\\\`, `\\uXXXX`)
|
|
18
|
+
* - Last-value-wins semantics for duplicate keys
|
|
19
|
+
*
|
|
10
20
|
* @param content - The content of a `.properties` file.
|
|
11
21
|
*
|
|
12
22
|
* @returns A key/value object representing the content of a `.properties` file.
|
package/dist/esm/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
var _=function(e){return e>=48&&e<=57?e-48:e>=65&&e<=70?e-55:e>=97&&e<=102?e-87:-1},S=function(e){if(-1===e.indexOf("\\"))return e;for(var r=e.length,a="",c=0,t=0;t<r;)if(92===e.charCodeAt(t)){if(t>c&&(a+=e.slice(c,t)),++t>=r){a+="\\",c=t;break}switch(e.charCodeAt(t)){case 110:a+="\n",t++;break;case 116:a+="\t",t++;break;case 114:a+="\r",t++;break;case 102:a+="\f",t++;break;case 117:if(t+4>=r)throw new Error("malformed escaped unicode characters '".concat(e.slice(t-1,t+5),"'"));var o=_(e.charCodeAt(t+1)),i=_(e.charCodeAt(t+2)),n=_(e.charCodeAt(t+3)),f=_(e.charCodeAt(t+4));if(o<0||i<0||n<0||f<0)throw new Error("malformed escaped unicode characters '".concat(e.slice(t-1,t+5),"'"));a+=String.fromCharCode(o<<12|i<<8|n<<4|f),t+=5;break;default:a+=e.charAt(t),t++}c=t}else t++;return c<r&&(a+=e.slice(c,r)),a},H=function(e,r,a){for(;r<a;){var c=e.charCodeAt(r);if(32!==c&&9!==c&&12!==c)break;r++}return r},q=function(e){for(var r="string"==typeof e?e:e.toString(),a={},c=(r.length>0&&65279===r.charCodeAt(0)?r.slice(1):r).split(/\r\n|\r|\n/),t=c.length,o=0;o<t;){var i=c[o],n=i.length,f=H(i,0,n);if(f>=n)o++;else{var s=i.charCodeAt(f);if(35!==s&&33!==s){for(var d=0,h=n-1;h>=0&&92===i.charCodeAt(h);h--)d++;var l=d%2==1,v=void 0,C=void 0;if(l){var A=(f>0?i.slice(f):i).slice(0,-1),u=[A];for(C=-1!==A.indexOf("\\");l&&o+1<t;){var g=c[++o],b=g.length,k=H(g,0,b);d=0;for(var p=b-1;p>=k&&92===g.charCodeAt(p);p--)d++;var m=(l=d%2==1)?g.slice(k,b-1):g.slice(k);!C&&-1!==m.indexOf("\\")&&(C=!0),u.push(m)}v=u.join("")}else C=-1!==(v=f>0?i.slice(f):i).indexOf("\\");for(var w=v.length,x=0,_=!1;x<w;){var O=v.charCodeAt(x);if(92!==O){if(!_&&(61===O||58===O||32===O||9===O||12===O))break;_=!1,x++}else _=!_,x++}var q=x;if(q<w){var E=v.charCodeAt(q);(32===E||9===E||12===E)&&((q=H(v,q,w))<w&&(E=v.charCodeAt(q))),q<w&&(61===E||58===E)&&(q++,q=H(v,q,w))}var j=v.slice(0,x),y=v.slice(q);a[C?S(j):j]=C?S(y):y,o++}else o++}}return a};export{q as getProperties};
|
package/dist/esm/parser/parse.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{unescapeContent}from"../unescape/index.js";var
|
|
1
|
+
import{CH_BACKSLASH,CH_BANG,CH_BOM,CH_COLON,CH_CR,CH_EQUALS,CH_FF,CH_HASH,CH_LF,CH_SPACE,CH_TAB}from"../characters.js";import{unescapeContent}from"../unescape/index.js";var isWhitespace=function(e){return e===CH_SPACE||e===CH_TAB||e===CH_FF},countTrailingBackslashes=function(e,r){for(var a=0,i=r-1;i>=0&&e.charCodeAt(i)===CH_BACKSLASH;)a++,i--;return a};export var parseDocument=function(e){var r="string"==typeof e?e:e.toString(),a=r.length,i=0,s=a>0&&r.charCodeAt(0)===CH_BOM;s&&(i=1);for(var t="\n",n=i;n<a;n++){var C=r.charCodeAt(n);if(C===CH_CR){t=n+1<a&&r.charCodeAt(n+1)===CH_LF?"\r\n":"\r";break}if(C===CH_LF){t="\n";break}}for(var c=(i>0?r.slice(i):r).split(/\r\n|\r|\n/),o=[],l=0,h=c.length;l<h;){for(var H=c[l],p=l+1,v=0,A=H.length;v<A&&isWhitespace(H.charCodeAt(v));)v++;if(v>=A){var f={type:"blank",rawLine:H,lineNumber:p};o.push(f),l++}else{var _=H.charCodeAt(v);if(_!==CH_HASH&&_!==CH_BANG){for(var d=[H],u=p,g=v>0?H.slice(0,v):"",L=countTrailingBackslashes(H,A),S=L%2==1;S&&l+1<h;){var m=c[++l];d.push(m);var B=m.length;S=(L=countTrailingBackslashes(m,B))%2==1}var O=l+1,b=S,N=void 0;if(1===d.length){var k=v>0?H.slice(v):H;N=b?k.slice(0,-1):k}else{for(var y=[],W=0;W<d.length;W++){var F=d[W],E=void 0,T=void 0;if(0===W)E=v,T=F.length-1;else{E=0;for(var x=F.length;E<x&&isWhitespace(F.charCodeAt(E));)E++;T=W===d.length-1&&!b?x:x-1}y.push(F.slice(E,T))}N=y.join("")}for(var K=N.length,Q=0,U=!1;Q<K;){var j=N.charCodeAt(Q);if(j!==CH_BACKSLASH){if(!U&&(j===CH_EQUALS||j===CH_COLON||isWhitespace(j)))break;U=!1,Q++}else U=!U,Q++}var w=N.slice(0,Q),G="",M=void 0,P="",R=Q;if(R<K){for(var D=R;R<K&&isWhitespace(N.charCodeAt(R));)R++;if(R<K){var V=N.charCodeAt(R);if(V===CH_EQUALS||V===CH_COLON){G=N.slice(D,R),M=V===CH_EQUALS?"=":":";for(var q=++R;R<K&&isWhitespace(N.charCodeAt(R));)R++;P=N.slice(q,R)}else G=N.slice(D,R)}else G=N.slice(D,R)}var z=N.slice(R),I={type:"property",rawLines:d,leadingWhitespace:g,key:-1!==w.indexOf("\\")?unescapeContent(w):w,escapedKey:w,separatorLeading:G,separatorChar:M,separatorTrailing:P,value:-1!==z.indexOf("\\")?unescapeContent(z):z,escapedValue:z,startingLineNumber:u,endingLineNumber:O};o.push(I),l++}else{var J={type:"comment",rawLine:H,leadingWhitespace:v>0?H.slice(0,v):"",delimiter:_===CH_HASH?"#":"!",body:H.slice(v+1),lineNumber:p};o.push(J),l++}}}return{hasBom:s,eolCharacter:t,nodes:o}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{CH_BACKSLASH,CH_LOWER_F,CH_LOWER_N,CH_LOWER_R,CH_LOWER_T,CH_LOWER_U}from"../characters.js";var hexValue=function(e){return e>=48&&e<=57?e-48:e>=65&&e<=70?e-55:e>=97&&e<=102?e-87:-1};export var unescapeContent=function(e){if(-1===e.indexOf("\\"))return e;for(var r=e.length,a="",c=0,t=0;t<r;)if(e.charCodeAt(t)===CH_BACKSLASH){if(t>c&&(a+=e.slice(c,t)),++t>=r){a+="\\",c=t;break}switch(e.charCodeAt(t)){case CH_LOWER_N:a+="\n",t++;break;case CH_LOWER_T:a+="\t",t++;break;case CH_LOWER_R:a+="\r",t++;break;case CH_LOWER_F:a+="\f",t++;break;case CH_LOWER_U:if(t+4>=r)throw new Error("malformed escaped unicode characters '".concat(e.slice(t-1,t+5),"'"));var o=hexValue(e.charCodeAt(t+1)),C=hexValue(e.charCodeAt(t+2)),_=hexValue(e.charCodeAt(t+3)),h=hexValue(e.charCodeAt(t+4));if(o<0||C<0||_<0||h<0)throw new Error("malformed escaped unicode characters '".concat(e.slice(t-1,t+5),"'"));a+=String.fromCharCode(o<<12|C<<8|_<<4|h),t+=5;break;default:a+=e.charAt(t),t++}c=t}else t++;return c<r&&(a+=e.slice(c,r)),a};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "properties-file",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.4",
|
|
4
4
|
"description": ".properties file parser, editor, formatter and bundler integrations.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
".properties",
|
|
@@ -141,7 +141,7 @@
|
|
|
141
141
|
"size": "npx tsx performance/size/compare.ts",
|
|
142
142
|
"snapshot": "npx tsx performance/snapshots/manage.ts",
|
|
143
143
|
"test": "jest --coverage",
|
|
144
|
-
"test-node-compat": "docker build --platform linux/amd64 -f tests/node-compat/Dockerfile ."
|
|
144
|
+
"test-node-compat": "docker build --platform linux/amd64 -f tests/node-compat/Dockerfile.node-0.4 ."
|
|
145
145
|
},
|
|
146
146
|
"devDependencies": {
|
|
147
147
|
"@release-it/conventional-changelog": "10.0.6",
|
|
@@ -179,6 +179,6 @@
|
|
|
179
179
|
"typescript-eslint": "8.58.1"
|
|
180
180
|
},
|
|
181
181
|
"engines": {
|
|
182
|
-
"node": "
|
|
182
|
+
"node": ">=0.4.0"
|
|
183
183
|
}
|
|
184
184
|
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { KeyValuePairObject } from './index.js';
|
|
2
|
-
/**
|
|
3
|
-
* Parse a `.properties` file content string into a key-value pair object.
|
|
4
|
-
*
|
|
5
|
-
* This is a functional, single-pass parser that implements the Java
|
|
6
|
-
* `java.util.Properties` specification:
|
|
7
|
-
*
|
|
8
|
-
* - BOM detection and skipping
|
|
9
|
-
* - Comment lines (`#` or `!`)
|
|
10
|
-
* - Line continuations (trailing odd backslash)
|
|
11
|
-
* - Key-value separator detection (`=`, `:`, or whitespace)
|
|
12
|
-
* - Escape sequence processing (`\\n`, `\\t`, `\\r`, `\\f`, `\\\\`, `\\uXXXX`)
|
|
13
|
-
* - Last-value-wins semantics for duplicate keys
|
|
14
|
-
*
|
|
15
|
-
* All character inspection uses `charCodeAt()` (ES5). No regex, no
|
|
16
|
-
* intermediate object allocations.
|
|
17
|
-
*
|
|
18
|
-
* @param content - The content of a `.properties` file (string or Buffer).
|
|
19
|
-
*
|
|
20
|
-
* @returns A key-value pair object where every value is a string.
|
|
21
|
-
*/
|
|
22
|
-
export declare const parseProperties: (content: string | Buffer) => KeyValuePairObject;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"parseProperties",{enumerable:!0,get:function(){return parseProperties}});var CH_TAB=9,CH_LF=10,CH_FF=12,CH_CR=13,CH_SPACE=32,CH_BANG=33,CH_HASH=35,CH_COLON=58,CH_EQUALS=61,CH_BACKSLASH=92,CH_LOWER_F=102,CH_LOWER_N=110,CH_LOWER_R=114,CH_LOWER_T=116,CH_LOWER_U=117,CH_BOM=65279,skipWhitespace=function(e,C,r){for(;C<r;){var a=e.charCodeAt(C);if(a!==CH_SPACE&&a!==CH_TAB&&a!==CH_FF)break;C++}return C},isHexDigit=function(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102},hexValue=function(e){return e>=48&&e<=57?e-48:e>=65&&e<=70?e-55:e-87},unescapeContent=function(e,C,r,a,t){if(!a)return e.slice(C,r);for(var H="",_=C,c=C;c<r;)if(e.charCodeAt(c)===CH_BACKSLASH){switch(c>_&&(H+=e.slice(_,c)),c++,e.charCodeAt(c)){case CH_LOWER_N:H+="\n",c++;break;case CH_LOWER_T:H+="\t",c++;break;case CH_LOWER_R:H+="\r",c++;break;case CH_LOWER_F:H+="\f",c++;break;case CH_LOWER_U:if(c+4>=r||!isHexDigit(e.charCodeAt(c+1))||!isHexDigit(e.charCodeAt(c+2))||!isHexDigit(e.charCodeAt(c+3))||!isHexDigit(e.charCodeAt(c+4))){var i=e.slice(c-1,c+5);throw new Error("malformed escaped unicode characters '".concat(i,"' in property starting at line ").concat(t))}var o=hexValue(e.charCodeAt(c+1))<<12|hexValue(e.charCodeAt(c+2))<<8|hexValue(e.charCodeAt(c+3))<<4|hexValue(e.charCodeAt(c+4));H+=String.fromCharCode(o),c+=5;break;default:H+=e.charAt(c),c++}_=c}else c++;return _<r&&(H+=e.slice(_,r)),H},parseProperties=function(e){var C="string"==typeof e?e:e.toString(),r=C.length,a={},t=0,H=1;for(r>0&&C.charCodeAt(0)===CH_BOM&&(t=1);t<r&&!((t=skipWhitespace(C,t,r))>=r);){var _=C.charCodeAt(t);if(_!==CH_LF)if(_!==CH_CR)if(_!==CH_HASH&&_!==CH_BANG){for(var c=H,i=t,o=0,A=!1;t<r&&(_=C.charCodeAt(t))!==CH_LF&&_!==CH_CR;)_===CH_BACKSLASH?(o++,A=!0):o=0,t++;if(o%2==1){var s=[C.slice(i,t-1)],h=A;for(t<r&&(C.charCodeAt(t)===CH_CR?++t<r&&C.charCodeAt(t)===CH_LF&&t++:t++,H++),t=skipWhitespace(C,t,r);;){var n=t;o=0;for(var d=!1;t<r&&(_=C.charCodeAt(t))!==CH_LF&&_!==CH_CR;)_===CH_BACKSLASH?(o++,d=!0):o=0,t++;var f=o%2==1,p=f?t-1:t;if(s.push(C.slice(n,p)),d&&(h=!0),t<r&&(C.charCodeAt(t)===CH_CR?++t<r&&C.charCodeAt(t)===CH_LF&&t++:t++,H++),!f)break;t=skipWhitespace(C,t,r)}for(var L=s.join(""),u=L.length,S=0,l=!1;S<u;)if((_=L.charCodeAt(S))!==CH_BACKSLASH){if(!l&&(_===CH_EQUALS||_===CH_COLON||_===CH_SPACE||_===CH_TAB||_===CH_FF))break;l=!1,S++}else l=!l,S++;var F=S;F<u&&((_=L.charCodeAt(F))!==CH_SPACE&&_!==CH_TAB&&_!==CH_FF||(F=skipWhitespace(L,F,u))<u&&(_=L.charCodeAt(F)),F<u&&(_===CH_EQUALS||_===CH_COLON)&&(F++,F=skipWhitespace(L,F,u))),a[unescapeContent(L,0,S,h,c)]=unescapeContent(L,F,u,h,c)}else{var O=t;t<r&&(C.charCodeAt(t)===CH_CR?++t<r&&C.charCodeAt(t)===CH_LF&&t++:t++,H++);for(var E=i,R=!1;E<O;)if((_=C.charCodeAt(E))!==CH_BACKSLASH){if(!R&&(_===CH_EQUALS||_===CH_COLON||_===CH_SPACE||_===CH_TAB||_===CH_FF))break;R=!1,E++}else R=!R,E++;var k=E;k<O&&((_=C.charCodeAt(k))!==CH_SPACE&&_!==CH_TAB&&_!==CH_FF||(k=skipWhitespace(C,k,O))<O&&(_=C.charCodeAt(k)),k<O&&(_===CH_EQUALS||_===CH_COLON)&&(k++,k=skipWhitespace(C,k,O))),a[unescapeContent(C,i,E,A,c)]=unescapeContent(C,k,O,A,c)}}else for(;t<r;){if((_=C.charCodeAt(t))===CH_LF){t++,H++;break}if(_===CH_CR){++t<r&&C.charCodeAt(t)===CH_LF&&t++,H++;break}t++}else++t<r&&C.charCodeAt(t)===CH_LF&&t++,H++;else t++,H++}return a};
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { KeyValuePairObject } from './index.js';
|
|
2
|
-
/**
|
|
3
|
-
* Parse a `.properties` file content string into a key-value pair object.
|
|
4
|
-
*
|
|
5
|
-
* This is a functional, single-pass parser that implements the Java
|
|
6
|
-
* `java.util.Properties` specification:
|
|
7
|
-
*
|
|
8
|
-
* - BOM detection and skipping
|
|
9
|
-
* - Comment lines (`#` or `!`)
|
|
10
|
-
* - Line continuations (trailing odd backslash)
|
|
11
|
-
* - Key-value separator detection (`=`, `:`, or whitespace)
|
|
12
|
-
* - Escape sequence processing (`\\n`, `\\t`, `\\r`, `\\f`, `\\\\`, `\\uXXXX`)
|
|
13
|
-
* - Last-value-wins semantics for duplicate keys
|
|
14
|
-
*
|
|
15
|
-
* All character inspection uses `charCodeAt()` (ES5). No regex, no
|
|
16
|
-
* intermediate object allocations.
|
|
17
|
-
*
|
|
18
|
-
* @param content - The content of a `.properties` file (string or Buffer).
|
|
19
|
-
*
|
|
20
|
-
* @returns A key-value pair object where every value is a string.
|
|
21
|
-
*/
|
|
22
|
-
export declare const parseProperties: (content: string | Buffer) => KeyValuePairObject;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var CH_TAB=9,CH_LF=10,CH_FF=12,CH_CR=13,CH_SPACE=32,CH_BANG=33,CH_HASH=35,CH_COLON=58,CH_EQUALS=61,CH_BACKSLASH=92,CH_LOWER_F=102,CH_LOWER_N=110,CH_LOWER_R=114,CH_LOWER_T=116,CH_LOWER_U=117,CH_BOM=65279,skipWhitespace=function(e,C,r){for(;C<r;){var a=e.charCodeAt(C);if(a!==CH_SPACE&&a!==CH_TAB&&a!==CH_FF)break;C++}return C},isHexDigit=function(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102},hexValue=function(e){return e>=48&&e<=57?e-48:e>=65&&e<=70?e-55:e-87},unescapeContent=function(e,C,r,a,t){if(!a)return e.slice(C,r);for(var H="",_=C,c=C;c<r;)if(e.charCodeAt(c)===CH_BACKSLASH){switch(c>_&&(H+=e.slice(_,c)),c++,e.charCodeAt(c)){case CH_LOWER_N:H+="\n",c++;break;case CH_LOWER_T:H+="\t",c++;break;case CH_LOWER_R:H+="\r",c++;break;case CH_LOWER_F:H+="\f",c++;break;case CH_LOWER_U:if(c+4>=r||!isHexDigit(e.charCodeAt(c+1))||!isHexDigit(e.charCodeAt(c+2))||!isHexDigit(e.charCodeAt(c+3))||!isHexDigit(e.charCodeAt(c+4))){var i=e.slice(c-1,c+5);throw new Error("malformed escaped unicode characters '".concat(i,"' in property starting at line ").concat(t))}var A=hexValue(e.charCodeAt(c+1))<<12|hexValue(e.charCodeAt(c+2))<<8|hexValue(e.charCodeAt(c+3))<<4|hexValue(e.charCodeAt(c+4));H+=String.fromCharCode(A),c+=5;break;default:H+=e.charAt(c),c++}_=c}else c++;return _<r&&(H+=e.slice(_,r)),H};export var parseProperties=function(e){var C="string"==typeof e?e:e.toString(),r=C.length,a={},t=0,H=1;for(r>0&&C.charCodeAt(0)===CH_BOM&&(t=1);t<r&&!((t=skipWhitespace(C,t,r))>=r);){var _=C.charCodeAt(t);if(_!==CH_LF)if(_!==CH_CR)if(_!==CH_HASH&&_!==CH_BANG){for(var c=H,i=t,A=0,o=!1;t<r&&(_=C.charCodeAt(t))!==CH_LF&&_!==CH_CR;)_===CH_BACKSLASH?(A++,o=!0):A=0,t++;if(A%2==1){var s=[C.slice(i,t-1)],h=o;for(t<r&&(C.charCodeAt(t)===CH_CR?++t<r&&C.charCodeAt(t)===CH_LF&&t++:t++,H++),t=skipWhitespace(C,t,r);;){var n=t;A=0;for(var L=!1;t<r&&(_=C.charCodeAt(t))!==CH_LF&&_!==CH_CR;)_===CH_BACKSLASH?(A++,L=!0):A=0,t++;var d=A%2==1,f=d?t-1:t;if(s.push(C.slice(n,f)),L&&(h=!0),t<r&&(C.charCodeAt(t)===CH_CR?++t<r&&C.charCodeAt(t)===CH_LF&&t++:t++,H++),!d)break;t=skipWhitespace(C,t,r)}for(var p=s.join(""),S=p.length,u=0,F=!1;u<S;)if((_=p.charCodeAt(u))!==CH_BACKSLASH){if(!F&&(_===CH_EQUALS||_===CH_COLON||_===CH_SPACE||_===CH_TAB||_===CH_FF))break;F=!1,u++}else F=!F,u++;var l=u;l<S&&((_=p.charCodeAt(l))!==CH_SPACE&&_!==CH_TAB&&_!==CH_FF||(l=skipWhitespace(p,l,S))<S&&(_=p.charCodeAt(l)),l<S&&(_===CH_EQUALS||_===CH_COLON)&&(l++,l=skipWhitespace(p,l,S))),a[unescapeContent(p,0,u,h,c)]=unescapeContent(p,l,S,h,c)}else{var E=t;t<r&&(C.charCodeAt(t)===CH_CR?++t<r&&C.charCodeAt(t)===CH_LF&&t++:t++,H++);for(var O=i,R=!1;O<E;)if((_=C.charCodeAt(O))!==CH_BACKSLASH){if(!R&&(_===CH_EQUALS||_===CH_COLON||_===CH_SPACE||_===CH_TAB||_===CH_FF))break;R=!1,O++}else R=!R,O++;var k=O;k<E&&((_=C.charCodeAt(k))!==CH_SPACE&&_!==CH_TAB&&_!==CH_FF||(k=skipWhitespace(C,k,E))<E&&(_=C.charCodeAt(k)),k<E&&(_===CH_EQUALS||_===CH_COLON)&&(k++,k=skipWhitespace(C,k,E))),a[unescapeContent(C,i,O,o,c)]=unescapeContent(C,k,E,o,c)}}else for(;t<r;){if((_=C.charCodeAt(t))===CH_LF){t++,H++;break}if(_===CH_CR){++t<r&&C.charCodeAt(t)===CH_LF&&t++,H++;break}t++}else++t<r&&C.charCodeAt(t)===CH_LF&&t++,H++;else t++,H++}return a};
|