@dittowords/cli 3.10.0 → 3.10.1

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 Ditto Tech, Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/bin/pull.js CHANGED
@@ -33,12 +33,21 @@ const FORMAT_EXTENSIONS = {
33
33
  "ios-stringsdict": ".stringsdict",
34
34
  icu: ".json",
35
35
  };
36
+ const getJsonFormatIsValid = (data) => {
37
+ try {
38
+ return (Object.keys(JSON.parse(data)).filter((k) => !k.startsWith("__variant"))
39
+ .length > 0);
40
+ }
41
+ catch {
42
+ return false;
43
+ }
44
+ };
36
45
  const getFormatDataIsValid = {
37
- flat: (data) => data !== "{}",
38
- structured: (data) => data !== "{}",
39
- icu: (data) => data !== "{}",
46
+ flat: getJsonFormatIsValid,
47
+ structured: getJsonFormatIsValid,
48
+ icu: getJsonFormatIsValid,
40
49
  android: (data) => data.includes("<string"),
41
- "ios-strings": (data) => !!data,
50
+ "ios-strings": (data) => data.includes(`" = "`),
42
51
  "ios-stringsdict": (data) => data.includes("<key>"),
43
52
  };
44
53
  const getFormat = (formatFromSource) => {
package/bin/pull.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"pull.js","sourceRoot":"","sources":["../lib/pull.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AAExB,8CAAsB;AAEtB,+BAAwC;AACxC,sDAA8B;AAC9B,sDAA8B;AAC9B,sDAA8B;AAC9B,wCAAmD;AACnD,0EAAkD;AAClD,+DAA4D;AAC5D,yDAAsD;AAEtD,wDAAqD;AAErD,MAAM,iBAAiB,GAAsB;IAC3C,MAAM;IACN,YAAY;IACZ,SAAS;IACT,aAAa;IACb,iBAAiB;IACjB,KAAK;CACN,CAAC;AAEF,MAAM,YAAY,GAAsB,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;AAEtE,MAAM,iBAAiB,GAAG;IACxB,IAAI,EAAE,OAAO;IACb,UAAU,EAAE,OAAO;IACnB,OAAO,EAAE,MAAM;IACf,aAAa,EAAE,UAAU;IACzB,iBAAiB,EAAE,cAAc;IACjC,GAAG,EAAE,OAAO;CACb,CAAC;AAEF,MAAM,oBAAoB,GAAG;IAC3B,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI;IACrC,UAAU,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI;IAC3C,GAAG,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI;IACpC,OAAO,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;IACnD,aAAa,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI;IACvC,iBAAiB,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;CAC5D,CAAC;AAEF,MAAM,SAAS,GAAG,CAChB,gBAA+C,EAC5B,EAAE;IACrB,MAAM,OAAO,GAAG,CACd,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CACxE,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAClB,iBAAiB,CAAC,QAAQ,CAAC,MAAyB,CAAC,CACjC,CAAC;IAEvB,IAAI,OAAO,CAAC,MAAM,EAAE;QAClB,OAAO,OAAO,CAAC;KAChB;IAED,OAAO,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,MAAuB,EAAE,EAAE;IACrD,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AACxD,MAAM,cAAc,GAAG,CAAC,IAAS,EAAE,EAAE;IACnC,MAAM,eAAe,GACnB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;SAClE,MAAM,GAAG,CAAC,CAAC;IAEhB,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAE9E,OAAO,eAAe,IAAI,cAAc,CAAC;AAC3C,CAAC,CAAC;AAEF,KAAK,UAAU,kBAAkB;IAC/B,gBAAM,CAAC,WAAW,CAAC,gBAAM,CAAC,WAAW,EAAE,gBAAM,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,OAAO,GACX,kFAAkF,CAAC;IACrF,MAAM,IAAA,2BAAmB,EAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,sBAAsB,CACnC,YAA2B,EAC3B,QAAmB,EACnB,MAAuB,EACvB,MAA0B,EAC1B,QAA6B,EAC7B,KAAa;IAEb,MAAM,GAAG,GAAG,IAAA,qBAAe,GAAE,CAAC;IAC9B,MAAM,MAAM,GAAkC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IACxE,IAAI,MAAM;QAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACnC,IAAI,MAAM;QAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACnC,IAAI,QAAQ;QAAE,MAAM,CAAC,eAAe,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAE3D,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAW,EAAE,EAAE;QAC/C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,EAAE;YAChD,MAAM;YACN,OAAO,EAAE,EAAE,aAAa,EAAE,SAAS,KAAK,EAAE,EAAE;SAC7C,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YACzB,OAAO,EAAE,CAAC;SACX;QAED,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAE7C,MAAM,QAAQ,GAAG,IAAA,6BAAa,EAC5B,QAAQ,GAAG,CAAC,IAAI,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,CAAC,GAAG,SAAS,CACzD,CAAC;QACF,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,gBAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEtD,IAAI,UAAU,GAAG,IAAI,CAAC;QACtB,IAAI,SAAS,KAAK,OAAO,EAAE;YACzB,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;SAC5C;QAED,MAAM,WAAW,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;YAC5B,OAAO,EAAE,CAAC;SACX;QAED,YAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACvC,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,KAAK,UAAU,uBAAuB,CACpC,QAA6B,EAC7B,QAAmB,EACnB,MAAuB,EACvB,MAA0B,EAC1B,QAA6B,EAC7B,KAAa;IAEb,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACjC,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC;QACvE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAqB,EAAE,EAAE,CAC/C,sBAAsB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CACzE;KACF,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,QAAmB,EACnB,MAAuB,EACvB,MAA0B,EAC1B,QAA8B,EAC9B,KAAa,EACb,OAAqB;IAErB,MAAM,GAAG,GAAG,IAAA,qBAAe,GAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC;IACpC,IAAI,MAAM;QAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACnC,IAAI,MAAM;QAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACnC,IAAI,QAAQ;QAAE,MAAM,CAAC,eAAe,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAE3D,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAW,EAAE,EAAE;QAC/C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,EAAE;YAChD,MAAM;YACN,OAAO,EAAE,EAAE,aAAa,EAAE,SAAS,KAAK,EAAE,EAAE;SAC7C,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAA,6BAAa,EAAC,GAAG,QAAQ,SAAS,SAAS,EAAE,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,gBAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEtD,IAAI,UAAU,GAAG,IAAI,CAAC;QACtB,IAAI,SAAS,KAAK,OAAO,EAAE;YACzB,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;SAC5C;QAED,MAAM,WAAW,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;YAC5B,OAAO,EAAE,CAAC;SACX;QAED,YAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACvC,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,yBAAyB,gBAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACxD,CAAC;AAED,SAAS,gBAAgB;IACvB,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,gBAAM,CAAC,QAAQ,CAAC,EAAE;QACnC,YAAE,CAAC,SAAS,CAAC,gBAAM,CAAC,QAAQ,CAAC,CAAC;KAC/B;IAED,MAAM,SAAS,GAAG,YAAE,CAAC,WAAW,CAAC,gBAAM,CAAC,QAAQ,CAAC,CAAC;IAClD,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC7B,IAAI,mCAAmC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YACtD,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,OAAO,CAAC,gBAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;SACxD;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,+BAA+B,CAAC;AACzC,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,MAAyB,EACzB,KAAa,EACb,OAAqB;IAErB,MAAM,GAAG,GAAG,IAAA,qBAAe,GAAE,CAAC;IAC9B,MAAM,EACJ,aAAa,EACb,MAAM,EAAE,gBAAgB,EACxB,2BAA2B,EAC3B,MAAM,EACN,QAAQ,EACR,gBAAgB,GACjB,GAAG,MAAM,CAAC;IAEX,MAAM,OAAO,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAE5C,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,GAAG,CAAC,CAAC;IACzB,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,MAAM,QAAQ,GAAG,MAAM,IAAA,6BAAa,EAAC,MAAM,CAAC,CAAC;IAE7C,IAAI;QACF,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAC1B,GAAG,IAAI,mCAAmC,IAAA,uBAAa,EACrD,aAAa,EACb,2BAA2B,CAC5B,IAAI,CAAC;QAEN,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAEzC,KAAK,UAAU,qBAAqB,CAAC,MAAuB;YAC1D,wEAAwE;YACxE,iDAAiD;YACjD,MAAM,iBAAiB,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;YAEtE,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YACrC,IAAI,OAAO,EAAE,IAAI;gBACf,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACxE,IAAI,MAAM;gBAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC5C,IAAI,MAAM;gBAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC5C,IAAI,QAAQ;gBAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;YACpE,IAAI,gBAAgB,EAAE;gBACpB,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;aACxE;YAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE;gBACtD,MAAM,CAAC,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;gBACtC,IAAI,YAAY;oBAAE,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;gBAEpD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;gBAE7D,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBAC3C,MAAM,QAAQ,GAAG,yBAAyB,CAAC;gBAC3C,MAAM,WAAW,GAAG,KAAK,YAAY,IAAI,MAAM,EAAE,CAAC;gBAElD,MAAM,QAAQ,GAAG,IAAA,6BAAa,EAAC,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,EAAE,CAAC,CAAC;gBACtE,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,gBAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAEtD,IAAI,UAAU,GAAG,IAAI,CAAC;gBACtB,IAAI,OAAO,KAAK,OAAO,EAAE;oBACvB,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;iBAC5C;gBAED,MAAM,WAAW,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;gBACjD,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;oBAC5B,OAAO,EAAE,CAAC;iBACX;gBAED,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;gBAChE,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;YACnC,CAAC,CAAC,CACH,CAAC;YAEF,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,2BAA2B,EAAE;YAC/B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC5B,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;aACrC;SACF;QAED,KAAK,UAAU,aAAa,CAAC,MAAuB;YAClD,GAAG,IAAI,QAAQ;gBACb,CAAC,CAAC,MAAM,uBAAuB,CAC3B,QAAQ,EACR,aAAa,EACb,MAAM,EACN,MAAM,EACN,QAAQ,EACR,KAAK,CACN;gBACH,CAAC,CAAC,MAAM,mBAAmB,CACvB,aAAa,EACb,MAAM,EACN,MAAM,EACN,QAAQ,EACR,KAAK,EACL;oBACE,IAAI;iBACL,CACF,CAAC;QACR,CAAC;QAED,IAAI,aAAa,CAAC,MAAM,EAAE;YACxB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC5B,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;aAC7B;SACF;QAED,MAAM,OAAO,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC;QACnC,IAAI,2BAA2B,EAAE;YAC/B,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,yBAAyB;gBAC7B,IAAI,EAAE,yBAAyB;gBAC/B,QAAQ,EAAE,yBAAyB;aACpC,CAAC,CAAC;SACJ;QAED,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC/C,GAAG,IAAI,IAAA,mCAAgB,EAAC,OAAO,CAAC,CAAC;QAEnC,GAAG,IAAI,KAAK,gBAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;QAEtC,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KACzB;IAAC,OAAO,CAAM,EAAE;QACf,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEjB,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,IAAI,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC;QACtB,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;YAC3C,MAAM,kBAAkB,EAAE,CAAC;YAC3B,IAAA,YAAI,GAAE,CAAC;YACP,OAAO;SACR;QACD,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;YAC3C,KAAK,GAAG,gDAAgD,CAAC;YACzD,GAAG,GAAG,GAAG,gBAAM,CAAC,SAAS,CAAC,KAAK,CAAC,8BAA8B,gBAAM,CAAC,IAAI,CACvE,SAAS,CACV,mCAAmC,CAAC;YACrC,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACzB;QACD,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;YAC3C,KAAK;gBACH,yEAAyE,CAAC;YAC5E,GAAG,GAAG,GAAG,gBAAM,CAAC,SAAS,CACvB,KAAK,CACN,iDAAiD,gBAAM,CAAC,IAAI,CAC3D,SAAS,CACV,mFAAmF,gBAAM,CAAC,MAAM,CAC/F,sDAAsD,CACvD,GAAG,CAAC;YACL,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACzB;QACD,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;YAC3C,KAAK,GAAG,oBAAoB,CAAC;SAC9B;QACD,GAAG,GAAG,oDAAoD,gBAAM,CAAC,SAAS,CACxE,KAAK,CACN,8BAA8B,gBAAM,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;QACjE,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KACzB;AACH,CAAC;AAMM,MAAM,IAAI,GAAG,CAAC,OAAqB,EAAE,EAAE;IAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,gBAAM,CAAC,QAAQ,CAAC,gBAAM,CAAC,WAAW,EAAE,gBAAM,CAAC,QAAQ,CAAC,CAAC;IACnE,MAAM,iBAAiB,GAAG,gBAAM,CAAC,sBAAsB,EAAE,CAAC;IAE1D,OAAO,eAAe,CAAC,iBAAiB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7D,CAAC,CAAC;AANW,QAAA,IAAI,QAMf;AAEF,kBAAe;IACb,IAAI,EAAJ,YAAI;IACJ,QAAQ,EAAE;QACR,gBAAgB;QAChB,sBAAsB;QACtB,uBAAuB;QACvB,mBAAmB;KACpB;CACF,CAAC"}
1
+ {"version":3,"file":"pull.js","sourceRoot":"","sources":["../lib/pull.ts"],"names":[],"mappings":"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"}
package/lib/pull.test.ts CHANGED
@@ -1,8 +1,12 @@
1
1
  import fs from "fs";
2
2
  import path from "path";
3
+
4
+ jest.mock("./api", () => ({
5
+ createApiClient: jest.fn(), // this needs to be mocked in each test that requires it
6
+ }));
3
7
  import { createApiClient } from "./api";
4
8
 
5
- const testProjects = [
9
+ const testProjects: Project[] = [
6
10
  {
7
11
  id: "1",
8
12
  name: "Project 1",
@@ -11,8 +15,6 @@ const testProjects = [
11
15
  { id: "2", name: "Project 2", fileName: "Project 2" },
12
16
  ];
13
17
 
14
- jest.mock("./api");
15
-
16
18
  // TODO: all tests in this file currently failing because we're re-instantiating the api client
17
19
  // everywhere and are unable to mock the return type separately for each instance of usage.
18
20
  // We need to refactor to share one api client everywhere instead of always re-creating it.
@@ -29,7 +31,8 @@ jest.mock("./consts", () => ({
29
31
  }));
30
32
 
31
33
  import consts from "./consts";
32
- import allPull from "./pull";
34
+ import allPull, { getFormatDataIsValid } from "./pull";
35
+ import { Project } from "./types";
33
36
 
34
37
  const {
35
38
  _testing: { cleanOutputFiles, downloadAndSaveVariant, downloadAndSaveBase },
@@ -67,49 +70,6 @@ describe("cleanOutputFiles", () => {
67
70
  });
68
71
  });
69
72
 
70
- // describe("downloadAndSaveVariant", () => {
71
- // beforeAll(() => {
72
- // if (!fs.existsSync(consts.TEXT_DIR)) {
73
- // fs.mkdirSync(consts.TEXT_DIR);
74
- // }
75
- // });
76
-
77
- // it("writes a single file for default format", async () => {
78
- // cleanOutputDir();
79
-
80
- // const output = await downloadAndSaveVariant(variant, testProjects, "");
81
- // expect(/saved to.*english\.json/.test(output)).toEqual(true);
82
- // expect(output.match(/saved to/g)?.length).toEqual(1);
83
- // expect(fs.readdirSync(consts.TEXT_DIR).length).toEqual(1);
84
- // });
85
-
86
- // it("writes multiple files for flat format", async () => {
87
- // cleanOutputDir();
88
-
89
- // const output = await downloadAndSaveVariant(variant, testProjects, "flat");
90
-
91
- // expect(/saved to.*Project 1__english\.json/.test(output)).toEqual(true);
92
- // expect(/saved to.*Project 2__english\.json/.test(output)).toEqual(true);
93
- // expect(output.match(/saved to/g)?.length).toEqual(2);
94
- // expect(fs.readdirSync(consts.TEXT_DIR).length).toEqual(2);
95
- // });
96
-
97
- // it("writes multiple files for structured format", async () => {
98
- // cleanOutputDir();
99
-
100
- // const output = await downloadAndSaveVariant(
101
- // variant,
102
- // testProjects,
103
- // "structured"
104
- // );
105
-
106
- // expect(/saved to.*Project 1__english\.json/.test(output)).toEqual(true);
107
- // expect(/saved to.*Project 2__english\.json/.test(output)).toEqual(true);
108
- // expect(output.match(/saved to/g)?.length).toEqual(2);
109
- // expect(fs.readdirSync(consts.TEXT_DIR).length).toEqual(2);
110
- // });
111
- // });
112
-
113
73
  describe("downloadAndSaveBase", () => {
114
74
  beforeAll(() => {
115
75
  if (!fs.existsSync(consts.TEXT_DIR)) {
@@ -117,93 +77,321 @@ describe("downloadAndSaveBase", () => {
117
77
  }
118
78
  });
119
79
 
120
- it.only("writes to text.json for default format", async () => {
80
+ beforeEach(() => {
121
81
  cleanOutputDir();
122
-
123
- mockApi.get.mockResolvedValueOnce({ data: [] });
124
- const output = await downloadAndSaveBase(
125
- testProjects,
126
- "" as any,
127
- undefined
128
- );
129
-
130
- expect(/saved to.*text\.json/.test(output)).toEqual(true);
131
- expect(output.match(/saved to/g)?.length).toEqual(1);
132
- expect(fs.readdirSync(consts.TEXT_DIR).length).toEqual(1);
133
82
  });
134
83
 
135
- it("writes multiple files for flat format", async () => {
136
- cleanOutputDir();
137
-
138
- mockApi.get.mockResolvedValue({ data: [] });
84
+ it("writes the flat format to disk", async () => {
85
+ const mockData = {
86
+ hello: "world",
87
+ };
88
+ (createApiClient as any).mockImplementation(() => ({
89
+ get: () => ({ data: mockData }),
90
+ }));
139
91
  const output = await downloadAndSaveBase(testProjects, "flat", undefined);
140
- expect(/saved to.*Project 1\.json/.test(output)).toEqual(true);
141
- expect(/saved to.*Project 2\.json/.test(output)).toEqual(true);
142
- expect(output.match(/saved to/g)?.length).toEqual(2);
143
- expect(fs.readdirSync(consts.TEXT_DIR).length).toEqual(2);
92
+ expect(/successfully saved/i.test(output)).toEqual(true);
93
+ const directoryContents = fs.readdirSync(consts.TEXT_DIR);
94
+ expect(directoryContents.length).toEqual(testProjects.length);
95
+ expect(directoryContents.every((f) => f.endsWith(".json"))).toBe(true);
96
+ expect(
97
+ JSON.parse(
98
+ fs.readFileSync(
99
+ path.resolve(consts.TEXT_DIR, directoryContents[0]),
100
+ "utf8"
101
+ )
102
+ )
103
+ ).toEqual(mockData);
144
104
  });
145
105
 
146
- it("writes multiple files for structured format", async () => {
147
- cleanOutputDir();
148
-
149
- mockApi.get.mockResolvedValue({ data: [] });
106
+ it("writes the structured format to disk", async () => {
107
+ const mockData = {
108
+ hello: { text: "world" },
109
+ };
110
+ (createApiClient as any).mockImplementation(() => ({
111
+ get: () => ({ data: mockData }),
112
+ }));
150
113
  const output = await downloadAndSaveBase(
151
114
  testProjects,
152
115
  "structured",
153
116
  undefined
154
117
  );
155
-
156
- expect(/saved to.*Project 1\.json/.test(output)).toEqual(true);
157
- expect(/saved to.*Project 2\.json/.test(output)).toEqual(true);
158
- expect(output.match(/saved to/g)?.length).toEqual(2);
159
- expect(fs.readdirSync(consts.TEXT_DIR).length).toEqual(2);
118
+ expect(/successfully saved/i.test(output)).toEqual(true);
119
+ const directoryContents = fs.readdirSync(consts.TEXT_DIR);
120
+ expect(directoryContents.length).toEqual(testProjects.length);
121
+ expect(directoryContents.every((f) => f.endsWith(".json"))).toBe(true);
122
+ expect(
123
+ JSON.parse(
124
+ fs.readFileSync(
125
+ path.resolve(consts.TEXT_DIR, directoryContents[0]),
126
+ "utf8"
127
+ )
128
+ )
129
+ ).toEqual(mockData);
160
130
  });
161
131
 
162
- it("writes .xml files for android", async () => {
163
- cleanOutputDir();
132
+ it("writes the icu format to disk", async () => {
133
+ const mockData = {
134
+ hello: "world",
135
+ };
136
+ (createApiClient as any).mockImplementation(() => ({
137
+ get: () => ({ data: mockData }),
138
+ }));
139
+ const output = await downloadAndSaveBase(testProjects, "icu", undefined);
140
+ expect(/successfully saved/i.test(output)).toEqual(true);
141
+ const directoryContents = fs.readdirSync(consts.TEXT_DIR);
142
+ expect(directoryContents.length).toEqual(testProjects.length);
143
+ expect(directoryContents.every((f) => f.endsWith(".json"))).toBe(true);
144
+ expect(
145
+ JSON.parse(
146
+ fs.readFileSync(
147
+ path.resolve(consts.TEXT_DIR, directoryContents[0]),
148
+ "utf8"
149
+ )
150
+ )
151
+ ).toEqual(mockData);
152
+ });
164
153
 
165
- mockApi.get.mockResolvedValue({ data: "hello" });
154
+ it("writes the android format to disk", async () => {
155
+ const mockData = `
156
+ <?xml version="1.0" encoding="utf-8"?>
157
+ <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
158
+ <string name="hello-world" ditto_api_id="hello-world">Hello World</string>
159
+ </resources>
160
+ `;
161
+ (createApiClient as any).mockImplementation(() => ({
162
+ get: () => ({ data: mockData }),
163
+ }));
166
164
  const output = await downloadAndSaveBase(
167
165
  testProjects,
168
166
  "android",
169
167
  undefined
170
168
  );
171
-
172
- expect(/saved to.*Project 1\.xml/.test(output)).toEqual(true);
173
- expect(/saved to.*Project 2\.xml/.test(output)).toEqual(true);
174
- expect(output.match(/saved to/g)?.length).toEqual(2);
175
- expect(fs.readdirSync(consts.TEXT_DIR).length).toEqual(2);
169
+ expect(/successfully saved/i.test(output)).toEqual(true);
170
+ const directoryContents = fs.readdirSync(consts.TEXT_DIR);
171
+ expect(directoryContents.length).toEqual(testProjects.length);
172
+ expect(directoryContents.every((f) => f.endsWith(".xml"))).toBe(true);
173
+ expect(
174
+ fs
175
+ .readFileSync(
176
+ path.resolve(consts.TEXT_DIR, directoryContents[0]),
177
+ "utf8"
178
+ )
179
+ .replace(/\s/g, "")
180
+ ).toEqual(mockData.replace(/\s/g, ""));
176
181
  });
177
182
 
178
- it("writes .strings files for ios-strings", async () => {
179
- cleanOutputDir();
180
-
181
- mockApi.get.mockResolvedValue({ data: "hello" });
183
+ it("writes the ios-strings format to disk", async () => {
184
+ const mockData = `
185
+ "hello" = "world";
186
+ `;
187
+ (createApiClient as any).mockImplementation(() => ({
188
+ get: () => ({ data: mockData }),
189
+ }));
182
190
  const output = await downloadAndSaveBase(
183
191
  testProjects,
184
192
  "ios-strings",
185
193
  undefined
186
194
  );
187
-
188
- expect(/saved to.*Project 1\.strings/.test(output)).toEqual(true);
189
- expect(/saved to.*Project 2\.strings/.test(output)).toEqual(true);
190
- expect(output.match(/saved to/g)?.length).toEqual(2);
191
- expect(fs.readdirSync(consts.TEXT_DIR).length).toEqual(2);
195
+ expect(/successfully saved/i.test(output)).toEqual(true);
196
+ const directoryContents = fs.readdirSync(consts.TEXT_DIR);
197
+ expect(directoryContents.length).toEqual(testProjects.length);
198
+ expect(directoryContents.every((f) => f.endsWith(".strings"))).toBe(true);
199
+ expect(
200
+ fs
201
+ .readFileSync(
202
+ path.resolve(consts.TEXT_DIR, directoryContents[0]),
203
+ "utf8"
204
+ )
205
+ .replace(/\s/g, "")
206
+ ).toEqual(mockData.replace(/\s/g, ""));
192
207
  });
193
208
 
194
- it("writes .stringsdict files for ios-stringsdict", async () => {
195
- cleanOutputDir();
196
-
197
- mockApi.get.mockResolvedValue({ data: "hello" });
209
+ it("writes the ios-stringsdict format to disk", async () => {
210
+ const mockData = `
211
+ <?xml version="1.0" encoding="utf-8"?>
212
+ <plist version="1.0">
213
+ <dict>
214
+ <key>hello-world</key>
215
+ <dict>
216
+ <key>NSStringLocalizedFormatKey</key>
217
+ <string>%1$#@count@</string>
218
+ <key>count</key>
219
+ <dict>
220
+ <key>NSStringFormatSpecTypeKey</key>
221
+ <string>NSStringPluralRuleType</string>
222
+ <key>NSStringFormatValueTypeKey</key>
223
+ <string>d</string>
224
+ <key>other</key>
225
+ <string>espanol</string>
226
+ </dict>
227
+ </dict>
228
+ </dict>
229
+ </plist>
230
+ `;
231
+ (createApiClient as any).mockImplementation(() => ({
232
+ get: () => ({ data: mockData }),
233
+ }));
198
234
  const output = await downloadAndSaveBase(
199
235
  testProjects,
200
236
  "ios-stringsdict",
201
237
  undefined
202
238
  );
239
+ expect(/successfully saved/i.test(output)).toEqual(true);
240
+ const directoryContents = fs.readdirSync(consts.TEXT_DIR);
241
+ expect(directoryContents.length).toEqual(testProjects.length);
242
+ expect(directoryContents.every((f) => f.endsWith(".stringsdict"))).toBe(
243
+ true
244
+ );
245
+ expect(
246
+ fs
247
+ .readFileSync(
248
+ path.resolve(consts.TEXT_DIR, directoryContents[0]),
249
+ "utf8"
250
+ )
251
+ .replace(/\s/g, "")
252
+ ).toEqual(mockData.replace(/\s/g, ""));
253
+ });
254
+ });
203
255
 
204
- expect(/saved to.*Project 1\.stringsdict/.test(output)).toEqual(true);
205
- expect(/saved to.*Project 2\.stringsdict/.test(output)).toEqual(true);
206
- expect(output.match(/saved to/g)?.length).toEqual(2);
207
- expect(fs.readdirSync(consts.TEXT_DIR).length).toEqual(2);
256
+ describe("getFormatDataIsValid", () => {
257
+ it("handles flat format appropriately", () => {
258
+ expect(getFormatDataIsValid.flat("{}")).toBe(false);
259
+ expect(getFormatDataIsValid.flat(`{ "hello": "world" }`)).toBe(true);
260
+ expect(
261
+ getFormatDataIsValid.flat(`{
262
+ "__variant-name": "English",
263
+ "__variant-description": ""
264
+ }`)
265
+ ).toBe(false);
266
+ expect(
267
+ getFormatDataIsValid.flat(`{
268
+ "__variant-name": "English",
269
+ "__variant-description": "",
270
+ "hello": "world"
271
+ }`)
272
+ ).toBe(true);
273
+ });
274
+ it("handles structured format appropriately", () => {
275
+ expect(getFormatDataIsValid.structured("{}")).toBe(false);
276
+ expect(
277
+ getFormatDataIsValid.structured(`{ "hello": { "text": "world" } }`)
278
+ ).toBe(true);
279
+ expect(
280
+ getFormatDataIsValid.structured(`{
281
+ "__variant-name": "English",
282
+ "__variant-description": ""
283
+ }`)
284
+ ).toBe(false);
285
+ expect(
286
+ getFormatDataIsValid.structured(`{
287
+ "__variant-name": "English",
288
+ "__variant-description": "",
289
+ "hello": { "text": "world" }
290
+ }`)
291
+ ).toBe(true);
292
+ });
293
+ it("handles icu format appropriately", () => {
294
+ expect(getFormatDataIsValid.icu("{}")).toBe(false);
295
+ expect(getFormatDataIsValid.icu(`{ "hello": "world" }`)).toBe(true);
296
+ expect(
297
+ getFormatDataIsValid.icu(`{
298
+ "__variant-name": "English",
299
+ "__variant-description": ""
300
+ }`)
301
+ ).toBe(false);
302
+ expect(
303
+ getFormatDataIsValid.icu(`{
304
+ "__variant-name": "English",
305
+ "__variant-description": "",
306
+ "hello": "world"
307
+ }`)
308
+ ).toBe(true);
309
+ });
310
+ it("handles android format appropriately", () => {
311
+ expect(
312
+ getFormatDataIsValid.android(`
313
+ <?xml version="1.0" encoding="utf-8"?>
314
+ <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"/>
315
+ `)
316
+ ).toBe(false);
317
+ expect(
318
+ getFormatDataIsValid.android(`
319
+ <?xml version="1.0" encoding="utf-8"?>
320
+ <!--Variant Name: English-->
321
+ <!--Variant Description: -->
322
+ <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"/>
323
+ `)
324
+ ).toBe(false);
325
+ expect(
326
+ getFormatDataIsValid.android(`
327
+ <?xml version="1.0" encoding="utf-8"?>
328
+ <!--Variant Name: English-->
329
+ <!--Variant Description: -->
330
+ <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
331
+ <string name="hello-world" ditto_api_id="hello-world">Hello World</string>
332
+ </resources>
333
+ `)
334
+ ).toBe(true);
335
+ });
336
+ it("handles ios-strings format appropriately", () => {
337
+ expect(getFormatDataIsValid["ios-strings"]("")).toBe(false);
338
+ expect(
339
+ getFormatDataIsValid["ios-strings"](`
340
+ /* Variant Name: English */
341
+ /* Variant Description: */
342
+ `)
343
+ ).toBe(false);
344
+ expect(
345
+ getFormatDataIsValid["ios-strings"](`
346
+ /* Variant Name: English */
347
+ /* Variant Description: */
348
+ "Hello" = "World";
349
+ `)
350
+ ).toBe(true);
351
+ });
352
+ it("handles ios-stringsdict format appropriately", () => {
353
+ expect(
354
+ getFormatDataIsValid["ios-stringsdict"](`
355
+ <?xml version="1.0" encoding="utf-8"?>
356
+ <plist version="1.0">
357
+ <dict/>
358
+ </plist>
359
+ `)
360
+ ).toBe(false);
361
+ expect(
362
+ getFormatDataIsValid["ios-stringsdict"](`
363
+ <?xml version="1.0" encoding="utf-8"?>
364
+ <!--Variant Name: English-->
365
+ <!--Variant Description: -->
366
+ <plist version="1.0">
367
+ <dict/>
368
+ </plist>
369
+ `)
370
+ ).toBe(false);
371
+ expect(
372
+ getFormatDataIsValid["ios-stringsdict"](`
373
+ <?xml version="1.0" encoding="utf-8"?>
374
+ <!--Variant Name: English-->
375
+ <!--Variant Description: -->
376
+ <plist version="1.0">
377
+ <dict>
378
+ <key>Hello World</key>
379
+ <dict>
380
+ <key>NSStringLocalizedFormatKey</key>
381
+ <string>%1$#@count@</string>
382
+ <key>count</key>
383
+ <dict>
384
+ <key>NSStringFormatSpecTypeKey</key>
385
+ <string>NSStringPluralRuleType</string>
386
+ <key>NSStringFormatValueTypeKey</key>
387
+ <string>d</string>
388
+ <key>other</key>
389
+ <string>espanol</string>
390
+ </dict>
391
+ </dict>
392
+ </dict>
393
+ </plist>
394
+ `)
395
+ ).toBe(true);
208
396
  });
209
397
  });
package/lib/pull.ts CHANGED
@@ -13,6 +13,7 @@ import { generateJsDriver } from "./utils/generateJsDriver";
13
13
  import { cleanFileName } from "./utils/cleanFileName";
14
14
  import { SourceInformation, Token, Project, SupportedFormat } from "./types";
15
15
  import { fetchVariants } from "./http/fetchVariants";
16
+ import { kMaxLength } from "buffer";
16
17
 
17
18
  const SUPPORTED_FORMATS: SupportedFormat[] = [
18
19
  "flat",
@@ -34,12 +35,23 @@ const FORMAT_EXTENSIONS = {
34
35
  icu: ".json",
35
36
  };
36
37
 
37
- const getFormatDataIsValid = {
38
- flat: (data: string) => data !== "{}",
39
- structured: (data: string) => data !== "{}",
40
- icu: (data: string) => data !== "{}",
38
+ const getJsonFormatIsValid = (data: string) => {
39
+ try {
40
+ return Object.keys(JSON.parse(data)).some(
41
+ (k) => !k.startsWith("__variant")
42
+ );
43
+ } catch {
44
+ return false;
45
+ }
46
+ };
47
+
48
+ // exported for test usage only
49
+ export const getFormatDataIsValid = {
50
+ flat: getJsonFormatIsValid,
51
+ structured: getJsonFormatIsValid,
52
+ icu: getJsonFormatIsValid,
41
53
  android: (data: string) => data.includes("<string"),
42
- "ios-strings": (data: string) => !!data,
54
+ "ios-strings": (data: string) => data.includes(`" = "`),
43
55
  "ios-stringsdict": (data: string) => data.includes("<key>"),
44
56
  };
45
57
 
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "@dittowords/cli",
3
- "version": "3.10.0",
3
+ "version": "3.10.1",
4
4
  "description": "Command Line Interface for Ditto (dittowords.com).",
5
+ "license": "MIT",
5
6
  "main": "bin/index.js",
6
7
  "scripts": {
7
8
  "prepublish": "tsc",