@el-j/google-sheet-translations 2.2.0 → 3.0.0-beta.2
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 +42 -0
- package/dist/action-entrypoint.d.ts.map +1 -1
- package/dist/core/rowTransformer.d.ts +26 -0
- package/dist/core/rowTransformer.d.ts.map +1 -0
- package/dist/esm/index.js +4118 -2524
- package/dist/getMultipleSpreadSheetsData.d.ts.map +1 -1
- package/dist/getSpreadSheetData.d.ts +3 -3
- package/dist/getSpreadSheetData.d.ts.map +1 -1
- package/dist/index.d.ts +13 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4232 -2611
- package/dist/migration/migrateV3.d.ts +57 -0
- package/dist/migration/migrateV3.d.ts.map +1 -0
- package/dist/providers/assetContracts.d.ts +88 -0
- package/dist/providers/assetContracts.d.ts.map +1 -0
- package/dist/providers/capabilities.d.ts +50 -0
- package/dist/providers/capabilities.d.ts.map +1 -0
- package/dist/providers/catalog.d.ts +73 -0
- package/dist/providers/catalog.d.ts.map +1 -0
- package/dist/providers/config.d.ts +56 -0
- package/dist/providers/config.d.ts.map +1 -0
- package/dist/providers/contracts.d.ts +138 -0
- package/dist/providers/contracts.d.ts.map +1 -0
- package/dist/providers/cryptpad/assetProvider.d.ts +36 -0
- package/dist/providers/cryptpad/assetProvider.d.ts.map +1 -0
- package/dist/providers/cryptpad/fullProvider.d.ts +50 -0
- package/dist/providers/cryptpad/fullProvider.d.ts.map +1 -0
- package/dist/providers/cryptpad/index.d.ts +8 -0
- package/dist/providers/cryptpad/index.d.ts.map +1 -0
- package/dist/providers/cryptpad/provider.d.ts +37 -0
- package/dist/providers/cryptpad/provider.d.ts.map +1 -0
- package/dist/providers/google/index.d.ts +4 -0
- package/dist/providers/google/index.d.ts.map +1 -0
- package/dist/providers/google/providers.d.ts +105 -0
- package/dist/providers/google/providers.d.ts.map +1 -0
- package/dist/providers/index.d.ts +25 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/orchestrator.d.ts +74 -0
- package/dist/providers/orchestrator.d.ts.map +1 -0
- package/dist/providers/runtime.d.ts +30 -0
- package/dist/providers/runtime.d.ts.map +1 -0
- package/dist/providers/syncEngine.d.ts +106 -0
- package/dist/providers/syncEngine.d.ts.map +1 -0
- package/dist/setup/gcpTransport.d.ts +25 -0
- package/dist/setup/gcpTransport.d.ts.map +1 -1
- package/dist/setup/migrateV3Cli.d.ts +2 -0
- package/dist/setup/migrateV3Cli.d.ts.map +1 -0
- package/dist/setup/providerCli.d.ts +2 -0
- package/dist/setup/providerCli.d.ts.map +1 -0
- package/dist/setup/wifSetup.d.ts +1 -1
- package/dist/setup/wifSetup.d.ts.map +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/auth.d.ts +1 -1
- package/dist/utils/auth.d.ts.map +1 -1
- package/dist/utils/configurationHandler.d.ts.map +1 -1
- package/dist/utils/dataConverter/convertFromDataJsonFormat.d.ts +1 -1
- package/dist/utils/dataConverter/convertFromDataJsonFormat.d.ts.map +1 -1
- package/dist/utils/dataConverter/convertToDataJsonFormat.d.ts +1 -1
- package/dist/utils/dataConverter/convertToDataJsonFormat.d.ts.map +1 -1
- package/dist/utils/dataConverter/findLocalChanges.d.ts +1 -1
- package/dist/utils/dataConverter/findLocalChanges.d.ts.map +1 -1
- package/dist/utils/docIngester.d.ts.map +1 -1
- package/dist/utils/docParser.d.ts.map +1 -1
- package/dist/utils/driveDocScanner.d.ts.map +1 -1
- package/dist/utils/driveFolderScanner.d.ts.map +1 -1
- package/dist/utils/driveImageSync.d.ts.map +1 -1
- package/dist/utils/driveSpreadsheetBootstrap.d.ts.map +1 -1
- package/dist/utils/fileWriter.d.ts +1 -1
- package/dist/utils/fileWriter.d.ts.map +1 -1
- package/dist/utils/getDriveTranslations.d.ts.map +1 -1
- package/dist/utils/isDataJsonNewer.d.ts.map +1 -1
- package/dist/utils/localImageUtils.d.ts.map +1 -1
- package/dist/utils/localeFilter.d.ts.map +1 -1
- package/dist/utils/localeNormalizer.d.ts.map +1 -1
- package/dist/utils/multiSpreadsheetMerger.d.ts.map +1 -1
- package/dist/utils/publicSheetReader.d.ts +1 -1
- package/dist/utils/publicSheetReader.d.ts.map +1 -1
- package/dist/utils/rateLimiter.d.ts.map +1 -1
- package/dist/utils/readDataJson.d.ts +1 -1
- package/dist/utils/sheetProcessor.d.ts +4 -9
- package/dist/utils/sheetProcessor.d.ts.map +1 -1
- package/dist/utils/spreadsheetCreator.d.ts +1 -1
- package/dist/utils/spreadsheetCreator.d.ts.map +1 -1
- package/dist/utils/spreadsheetFormulas.d.ts +1 -1
- package/dist/utils/spreadsheetFormulas.d.ts.map +1 -1
- package/dist/utils/spreadsheetUpdater.d.ts +3 -3
- package/dist/utils/spreadsheetUpdater.d.ts.map +1 -1
- package/dist/utils/syncManager.d.ts +2 -2
- package/dist/utils/syncManager.d.ts.map +1 -1
- package/dist/utils/translationHelpers.d.ts.map +1 -1
- package/dist/utils/validateEnv.d.ts +1 -1
- package/dist/utils/validateEnv.d.ts.map +1 -1
- package/dist/utils/wait.d.ts.map +1 -1
- package/dist-cli/migrate-v3.mjs +406 -0
- package/dist-cli/run-provider.mjs +2025 -0
- package/dist-cli/setup-wif.mjs +334 -18949
- package/package.json +25 -20
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driveFolderScanner.d.ts","sourceRoot":"","sources":["../../src/utils/driveFolderScanner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9C,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,WAAW,CAAC,EAAE,aAAa,CAAC;CAC7B;
|
|
1
|
+
{"version":3,"file":"driveFolderScanner.d.ts","sourceRoot":"","sources":["../../src/utils/driveFolderScanner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9C,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,WAAW,CAAC,EAAE,aAAa,CAAC;CAC7B;AAqHD;;;;GAIG;AACH,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAKjC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driveImageSync.d.ts","sourceRoot":"","sources":["../../src/utils/driveImageSync.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"driveImageSync.d.ts","sourceRoot":"","sources":["../../src/utils/driveImageSync.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9C,MAAM,WAAW,qBAAqB;IACpC,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,UAAU,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,iFAAiF;IACjF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAwCD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOvD;AAgKD;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CA8F/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driveSpreadsheetBootstrap.d.ts","sourceRoot":"","sources":["../../src/utils/driveSpreadsheetBootstrap.ts"],"names":[],"mappings":"AAEA,kEAAkE;AAClE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQvD;AAED;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAC3C,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"driveSpreadsheetBootstrap.d.ts","sourceRoot":"","sources":["../../src/utils/driveSpreadsheetBootstrap.ts"],"names":[],"mappings":"AAEA,kEAAkE;AAClE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQvD;AAED;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAC3C,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CA8Bf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileWriter.d.ts","sourceRoot":"","sources":["../../src/utils/fileWriter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAGhD;;;;;GAKG;AACH,wBAAgB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"fileWriter.d.ts","sourceRoot":"","sources":["../../src/utils/fileWriter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAGhD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,eAAe,EAC7B,OAAO,EAAE,MAAM,EAAE,EACjB,qBAAqB,EAAE,MAAM,GAC5B,IAAI,CAuCN;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EAAE,EACjB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACrC,iBAAiB,EAAE,MAAM,GACxB,IAAI,CAqCN;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,eAAe,EAC7B,OAAO,EAAE,MAAM,EAAE,EACjB,YAAY,EAAE,MAAM,GACnB,IAAI,CAoBN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDriveTranslations.d.ts","sourceRoot":"","sources":["../../src/utils/getDriveTranslations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAM9E,OAAO,KAAK,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAEpF,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"getDriveTranslations.d.ts","sourceRoot":"","sources":["../../src/utils/getDriveTranslations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAM9E,OAAO,KAAK,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAEpF,OAAO,KAAK,EAEV,oBAAoB,EAErB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,KAAK,EAAsB,aAAa,EAAE,MAAM,eAAe,CAAC;AAEvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD,MAAM,WAAW,yBAAyB;IACxC;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAElD;;;OAGG;IACH,kBAAkB,CAAC,EAAE,uBAAuB,CAAC;IAE7C,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAErB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,6DAA6D;IAC7D,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,gDAAgD;IAChD,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAI1C;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAE9B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACvC,YAAY,EAAE,eAAe,CAAC;IAC9B,kDAAkD;IAClD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,CAAA;KAAE,CAAC,CAAC;CAC5F;AAED,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,CAAC;AAEvD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,wBAAwB,CAAC,CAiPnC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isDataJsonNewer.d.ts","sourceRoot":"","sources":["../../src/utils/isDataJsonNewer.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"isDataJsonNewer.d.ts","sourceRoot":"","sources":["../../src/utils/isDataJsonNewer.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,GAAG,OAAO,CA8B5F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localImageUtils.d.ts","sourceRoot":"","sources":["../../src/utils/localImageUtils.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,MAAM,EAAE,CAAC,CAuBnB;AAMD,2EAA2E;AAC3E,eAAO,MAAM,wBAAwB,UAWpC,CAAC;AAEF,MAAM,WAAW,+BAA+B;IAC9C;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAE3B;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,8BAA8B;IAC7C;;;OAGG;IACH,KAAK,EAAE,OAAO,CAAC;IACf,oDAAoD;IACpD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;;OAGG;IACH,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,8DAA8D;IAC9D,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,8BAA8B,CAAC,
|
|
1
|
+
{"version":3,"file":"localImageUtils.d.ts","sourceRoot":"","sources":["../../src/utils/localImageUtils.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,MAAM,EAAE,CAAC,CAuBnB;AAMD,2EAA2E;AAC3E,eAAO,MAAM,wBAAwB,UAWpC,CAAC;AAEF,MAAM,WAAW,+BAA+B;IAC9C;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAE3B;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,8BAA8B;IAC7C;;;OAGG;IACH,KAAK,EAAE,OAAO,CAAC;IACf,oDAAoD;IACpD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;;OAGG;IACH,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,8DAA8D;IAC9D,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,8BAA8B,CAAC,CAoEzC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localeFilter.d.ts","sourceRoot":"","sources":["../../src/utils/localeFilter.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"localeFilter.d.ts","sourceRoot":"","sources":["../../src/utils/localeFilter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmCH;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAcpD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAKnF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localeNormalizer.d.ts","sourceRoot":"","sources":["../../src/utils/localeNormalizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAExD;AASD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAM7D;AA4CD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA0B1D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"localeNormalizer.d.ts","sourceRoot":"","sources":["../../src/utils/localeNormalizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAExD;AASD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAM7D;AA4CD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA0B1D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,eAAe,EAAE,MAAM,EAAE,EACzB,SAAS,EAAE,MAAM,GAChB;IACD,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC,CA+BA;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CACxC,gBAAgB,EAAE,MAAM,EACxB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC,MAAM,GAAG,SAAS,CA2BpB;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAC1C,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC,MAAM,GAAG,SAAS,CAEpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,EAAE,GACzB,MAAM,GAAG,SAAS,CAUpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multiSpreadsheetMerger.d.ts","sourceRoot":"","sources":["../../src/utils/multiSpreadsheetMerger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD;;;GAGG;AACH,wBAAgB,4BAA4B,
|
|
1
|
+
{"version":3,"file":"multiSpreadsheetMerger.d.ts","sourceRoot":"","sources":["../../src/utils/multiSpreadsheetMerger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,eAAe,EAAE,EAC1B,aAAa,GAAE,YAAY,GAAG,YAA2B,GACxD,eAAe,CAuBjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publicSheetReader.d.ts","sourceRoot":"","sources":["../../src/utils/publicSheetReader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAiFzC;;;;;;;;;;;;GAYG;AACH,wBAAsB,eAAe,
|
|
1
|
+
{"version":3,"file":"publicSheetReader.d.ts","sourceRoot":"","sources":["../../src/utils/publicSheetReader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAiFzC;;;;;;;;;;;;GAYG;AACH,wBAAsB,eAAe,CACnC,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAoDrB;eAEc,eAAe"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rateLimiter.d.ts","sourceRoot":"","sources":["../../src/utils/rateLimiter.ts"],"names":[],"mappings":"AAsBA;;;;;;;;;;;GAWG;AACH,wBAAsB,SAAS,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"rateLimiter.d.ts","sourceRoot":"","sources":["../../src/utils/rateLimiter.ts"],"names":[],"mappings":"AAsBA;;;;;;;;;;;GAWG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,KAAK,EAAE,MAAM,EACb,WAAW,SAAQ,EACnB,OAAO,SAAkB,EACzB,UAAU,SAAuB,GAChC,OAAO,CAAC,CAAC,CAAC,CAgBZ;eAEc,SAAS"}
|
|
@@ -1,15 +1,10 @@
|
|
|
1
|
-
import type { GoogleSpreadsheetWorksheet } from
|
|
2
|
-
import type { SheetRow
|
|
1
|
+
import type { GoogleSpreadsheetWorksheet } from 'google-spreadsheet';
|
|
2
|
+
import type { SheetRow } from '../types';
|
|
3
|
+
import { type SheetProcessingResult } from '../core/rowTransformer';
|
|
3
4
|
/**
|
|
4
5
|
* Result of processing a single sheet
|
|
5
6
|
*/
|
|
6
|
-
export
|
|
7
|
-
translations: TranslationData;
|
|
8
|
-
locales: string[];
|
|
9
|
-
localeMapping: Record<string, string>;
|
|
10
|
-
originalMapping: Record<string, string>;
|
|
11
|
-
success: boolean;
|
|
12
|
-
}
|
|
7
|
+
export type { SheetProcessingResult } from '../core/rowTransformer';
|
|
13
8
|
/**
|
|
14
9
|
* Core row-processing logic shared by both the authenticated and public sheet paths.
|
|
15
10
|
* Accepts pre-fetched rows (as plain objects) and returns the same
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sheetProcessor.d.ts","sourceRoot":"","sources":["../../src/utils/sheetProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"sheetProcessor.d.ts","sourceRoot":"","sources":["../../src/utils/sheetProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAA4B,KAAK,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAK9F;;GAEG;AACH,YAAY,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAEpE;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,QAAQ,EAAE,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,CAAC,CAMhC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,0BAA0B,EACjC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,WAAW,SAAQ,GAClB,OAAO,CAAC,qBAAqB,CAAC,CA4BhC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spreadsheetCreator.d.ts","sourceRoot":"","sources":["../../src/utils/spreadsheetCreator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AA2CtD,MAAM,WAAW,wBAAwB;
|
|
1
|
+
{"version":3,"file":"spreadsheetCreator.d.ts","sourceRoot":"","sources":["../../src/utils/spreadsheetCreator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AA2CtD,MAAM,WAAW,wBAAwB;IACvC,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8FAA8F;IAC9F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mGAAmG;IACnG,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,mFAAmF;IACnF,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;CACb;AAiBD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,UAAU,EACtB,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,sBAAsB,CAAC,CA4GjC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spreadsheetFormulas.d.ts","sourceRoot":"","sources":["../../src/utils/spreadsheetFormulas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQzD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,iBAAiB,GAAG,MAAM,CAalE;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAOpE;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,
|
|
1
|
+
{"version":3,"file":"spreadsheetFormulas.d.ts","sourceRoot":"","sources":["../../src/utils/spreadsheetFormulas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQzD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,iBAAiB,GAAG,MAAM,CAalE;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAOpE;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,EACvB,GAAG,EAAE,MAAM,GACV,MAAM,CAER"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { GoogleSpreadsheet } from
|
|
2
|
-
import type { TranslationData } from
|
|
3
|
-
import { columnIndexToLetter, getFormulaSeparator, langCodeFormula, buildGoogleTranslateFormula } from
|
|
1
|
+
import type { GoogleSpreadsheet } from 'google-spreadsheet';
|
|
2
|
+
import type { TranslationData } from '../types';
|
|
3
|
+
import { columnIndexToLetter, getFormulaSeparator, langCodeFormula, buildGoogleTranslateFormula } from './spreadsheetFormulas';
|
|
4
4
|
export { columnIndexToLetter, getFormulaSeparator, langCodeFormula, buildGoogleTranslateFormula };
|
|
5
5
|
/**
|
|
6
6
|
* Updates the Google Spreadsheet with new keys from local data.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spreadsheetUpdater.d.ts","sourceRoot":"","sources":["../../src/utils/spreadsheetUpdater.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAA8B,MAAM,oBAAoB,CAAC;AACxF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAKhD,OAAO,
|
|
1
|
+
{"version":3,"file":"spreadsheetUpdater.d.ts","sourceRoot":"","sources":["../../src/utils/spreadsheetUpdater.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAA8B,MAAM,oBAAoB,CAAC;AACxF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAKhD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,2BAA2B,EAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,eAAe,EAAE,2BAA2B,EAAE,CAAC;AAElG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAsB,iCAAiC,CACrD,GAAG,EAAE,iBAAiB,EACtB,OAAO,EAAE,eAAe,EACxB,WAAW,EAAE,MAAM,EACnB,aAAa,UAAQ,EACrB,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EAC1C,QAAQ,UAAQ,GACf,OAAO,CAAC,IAAI,CAAC,CA6Uf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncManager.d.ts","sourceRoot":"","sources":["../../src/utils/syncManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAQhD;;GAEG;AACH,MAAM,WAAW,UAAU;
|
|
1
|
+
{"version":3,"file":"syncManager.d.ts","sourceRoot":"","sources":["../../src/utils/syncManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAQhD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;CACrB;AA2BD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,iBAAiB,EACtB,YAAY,EAAE,MAAM,EACpB,qBAAqB,EAAE,MAAM,EAC7B,gBAAgB,EAAE,OAAO,EACzB,aAAa,EAAE,OAAO,EACtB,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,MAAM,EACnB,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EAC1C,QAAQ,UAAQ,EAChB,SAAS,UAAQ,GAChB,OAAO,CAAC,UAAU,CAAC,CAqFrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translationHelpers.d.ts","sourceRoot":"","sources":["../../src/utils/translationHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAMlE;;;GAGG;AACH,MAAM,WAAW,YAAY;
|
|
1
|
+
{"version":3,"file":"translationHelpers.d.ts","sourceRoot":"","sources":["../../src/utils/translationHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAMlE;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;AAMhE;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,eAAe,GAAG,kBAAkB,CASvF;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,eAAe,EAC7B,SAAS,SAAS,GACjB,MAAM,CAUR;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,WAAW,CACzB,YAAY,EAAE,eAAe,EAC7B,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,EAAE,GACpB,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAalC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateEnv.d.ts","sourceRoot":"","sources":["../../src/utils/validateEnv.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,
|
|
1
|
+
{"version":3,"file":"validateEnv.d.ts","sourceRoot":"","sources":["../../src/utils/validateEnv.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CACzC,aAAa,EACb,qBAAqB,GAAG,oBAAoB,CAC7C,CAoBA;AAED;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,aAAa,CAiC3C;eAEc,WAAW"}
|
package/dist/utils/wait.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../src/utils/wait.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGnE;
|
|
1
|
+
{"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../src/utils/wait.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGnE;eAEc,IAAI"}
|
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import fs from "node:fs";
|
|
4
|
+
//#region src/providers/config.ts
|
|
5
|
+
/**
|
|
6
|
+
* Maps legacy Google-first options to the provider runtime schema.
|
|
7
|
+
* This enables v3 adoption without forcing immediate option rewrites.
|
|
8
|
+
*/
|
|
9
|
+
function mapLegacyGoogleOptionsToProviderConfig(options = {}) {
|
|
10
|
+
return {
|
|
11
|
+
config: {
|
|
12
|
+
input: {
|
|
13
|
+
provider: "google-sheets",
|
|
14
|
+
options: {
|
|
15
|
+
spreadsheetId: options.spreadsheetId,
|
|
16
|
+
rowLimit: options.rowLimit,
|
|
17
|
+
waitSeconds: options.waitSeconds,
|
|
18
|
+
publicSheet: options.publicSheet
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
sync: options.syncLocalChanges !== false ? {
|
|
22
|
+
provider: "google-sheets",
|
|
23
|
+
options: {
|
|
24
|
+
spreadsheetId: options.spreadsheetId,
|
|
25
|
+
waitSeconds: options.waitSeconds,
|
|
26
|
+
autoTranslate: options.autoTranslate,
|
|
27
|
+
override: options.override
|
|
28
|
+
}
|
|
29
|
+
} : void 0
|
|
30
|
+
},
|
|
31
|
+
deprecations: ["Legacy SpreadsheetOptions are deprecated in v3 provider mode; migrate to ProviderRuntimeConfig."]
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
//#region src/migration/migrateV3.ts
|
|
36
|
+
const LEGACY_KEYS_TO_REMOVE = /* @__PURE__ */ new Set([
|
|
37
|
+
"google-spreadsheet-id",
|
|
38
|
+
"row-limit",
|
|
39
|
+
"wait-seconds",
|
|
40
|
+
"sync-local-changes",
|
|
41
|
+
"auto-translate",
|
|
42
|
+
"override",
|
|
43
|
+
"clean-push",
|
|
44
|
+
"auto-create",
|
|
45
|
+
"spreadsheet-title",
|
|
46
|
+
"source-locale",
|
|
47
|
+
"target-locales"
|
|
48
|
+
]);
|
|
49
|
+
function listWorkflowFiles(projectRoot) {
|
|
50
|
+
const workflowsDir = path.join(projectRoot, ".github", "workflows");
|
|
51
|
+
if (!fs.existsSync(workflowsDir)) return [];
|
|
52
|
+
return fs.readdirSync(workflowsDir, { withFileTypes: true }).filter((e) => e.isFile() && (e.name.endsWith(".yml") || e.name.endsWith(".yaml"))).map((e) => path.join(workflowsDir, e.name));
|
|
53
|
+
}
|
|
54
|
+
/** Parses the `with:` block of one workflow step (lines `[start, end)`) into a flat key/value map. */
|
|
55
|
+
function extractInputsFromStep(lines, start, end) {
|
|
56
|
+
const inputs = {};
|
|
57
|
+
for (let i = start; i < end; i++) {
|
|
58
|
+
const withMatch = lines[i].match(/^(\s*)with:\s*$/);
|
|
59
|
+
if (withMatch) {
|
|
60
|
+
const withIndent = withMatch[1].length;
|
|
61
|
+
for (let j = i + 1; j < end; j++) {
|
|
62
|
+
const nextLine = lines[j];
|
|
63
|
+
if (nextLine.trim() === "") continue;
|
|
64
|
+
if ((nextLine.match(/^(\s*)/)?.[1].length ?? 0) <= withIndent) break;
|
|
65
|
+
const kv = nextLine.match(/^\s*([a-zA-Z0-9_-]+):\s*(.*)$/);
|
|
66
|
+
if (kv) inputs[kv[1]] = kv[2].trim();
|
|
67
|
+
}
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return inputs;
|
|
72
|
+
}
|
|
73
|
+
/** Finds the line ranges of every step in `content` that uses `el-j/google-sheet-translations@...`. */
|
|
74
|
+
function findActionStepRanges(content) {
|
|
75
|
+
const lines = content.split(/\r?\n/);
|
|
76
|
+
const ranges = [];
|
|
77
|
+
for (let i = 0; i < lines.length; i++) {
|
|
78
|
+
const line = lines[i];
|
|
79
|
+
if (!line.includes("uses:")) continue;
|
|
80
|
+
if (!line.includes("el-j/google-sheet-translations@")) continue;
|
|
81
|
+
const currentIndent = line.match(/^(\s*)/)?.[1].length ?? 0;
|
|
82
|
+
let end = lines.length;
|
|
83
|
+
for (let j = i + 1; j < lines.length; j++) {
|
|
84
|
+
const candidate = lines[j];
|
|
85
|
+
const indent = candidate.match(/^(\s*)/)?.[1].length ?? 0;
|
|
86
|
+
if (/^\s*-\s+/.test(candidate) && indent <= currentIndent) {
|
|
87
|
+
end = j;
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
ranges.push({
|
|
92
|
+
start: i,
|
|
93
|
+
end
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
return ranges;
|
|
97
|
+
}
|
|
98
|
+
function parseBool(input, fallback) {
|
|
99
|
+
if (!input) return fallback;
|
|
100
|
+
const cleaned = input.replace(/^['"]|['"]$/g, "").toLowerCase();
|
|
101
|
+
if (cleaned === "true") return true;
|
|
102
|
+
if (cleaned === "false") return false;
|
|
103
|
+
return fallback;
|
|
104
|
+
}
|
|
105
|
+
function parseOptionalBool(input) {
|
|
106
|
+
if (!input) return void 0;
|
|
107
|
+
return parseBool(input, false);
|
|
108
|
+
}
|
|
109
|
+
function parseNum(input) {
|
|
110
|
+
if (!input) return void 0;
|
|
111
|
+
const cleaned = input.replace(/^['"]|['"]$/g, "");
|
|
112
|
+
const value = Number.parseInt(cleaned, 10);
|
|
113
|
+
return Number.isFinite(value) ? value : void 0;
|
|
114
|
+
}
|
|
115
|
+
function unquote(input) {
|
|
116
|
+
if (!input) return void 0;
|
|
117
|
+
return input.replace(/^['"]|['"]$/g, "");
|
|
118
|
+
}
|
|
119
|
+
/** Maps a legacy workflow step's parsed `with:` inputs to a v3 {@link ProviderRuntimeConfig}. */
|
|
120
|
+
function buildProviderConfigFromInputs(inputs) {
|
|
121
|
+
const spreadsheetId = unquote(inputs["google-spreadsheet-id"]);
|
|
122
|
+
const rowLimit = parseNum(inputs["row-limit"]);
|
|
123
|
+
const waitSeconds = parseNum(inputs["wait-seconds"]);
|
|
124
|
+
const syncLocalChanges = parseBool(inputs["sync-local-changes"], true);
|
|
125
|
+
const autoTranslate = parseBool(inputs["auto-translate"], false);
|
|
126
|
+
const override = parseBool(inputs["override"], false);
|
|
127
|
+
const inputOptions = {};
|
|
128
|
+
if (spreadsheetId) inputOptions.spreadsheetId = spreadsheetId;
|
|
129
|
+
if (rowLimit !== void 0) inputOptions.rowLimit = rowLimit;
|
|
130
|
+
if (waitSeconds !== void 0) inputOptions.waitSeconds = waitSeconds;
|
|
131
|
+
const config = { input: {
|
|
132
|
+
provider: "google-sheets",
|
|
133
|
+
options: inputOptions
|
|
134
|
+
} };
|
|
135
|
+
if (syncLocalChanges) config.sync = {
|
|
136
|
+
provider: "google-sheets",
|
|
137
|
+
options: {
|
|
138
|
+
spreadsheetId,
|
|
139
|
+
waitSeconds,
|
|
140
|
+
autoTranslate,
|
|
141
|
+
override
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
return config;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Rewrites every legacy action step in `content` (that isn't already using
|
|
148
|
+
* `provider-config`/`provider-config-path`) by stripping its legacy input keys and
|
|
149
|
+
* inserting a `provider-config-path: '<providerConfigPath>'` input in their place.
|
|
150
|
+
* Steps are processed back-to-front so earlier line-range offsets stay valid as later
|
|
151
|
+
* steps are rewritten.
|
|
152
|
+
*/
|
|
153
|
+
function rewriteWorkflow(content, providerConfigPath) {
|
|
154
|
+
const lines = content.split(/\r?\n/);
|
|
155
|
+
const ranges = findActionStepRanges(content);
|
|
156
|
+
for (let r = ranges.length - 1; r >= 0; r--) {
|
|
157
|
+
const { start, end } = ranges[r];
|
|
158
|
+
const stepLines = lines.slice(start, end);
|
|
159
|
+
if (!stepLines.some((line) => Array.from(LEGACY_KEYS_TO_REMOVE).some((key) => line.match(new RegExp(`^\\s*${key}:`))))) continue;
|
|
160
|
+
if (stepLines.some((line) => /^\s*provider-config(-path)?:/.test(line))) continue;
|
|
161
|
+
const withLineIndex = stepLines.findIndex((line) => /^\s*with:\s*$/.test(line));
|
|
162
|
+
if (withLineIndex === -1) continue;
|
|
163
|
+
const providerLine = `${`${stepLines[withLineIndex].match(/^(\s*)/)?.[1] ?? ""} `}provider-config-path: '${providerConfigPath}'`;
|
|
164
|
+
const cleaned = [];
|
|
165
|
+
for (let i = 0; i < stepLines.length; i++) {
|
|
166
|
+
const line = stepLines[i];
|
|
167
|
+
const keyMatch = line.match(/^\s*([a-zA-Z0-9_-]+):\s*/);
|
|
168
|
+
if (keyMatch && LEGACY_KEYS_TO_REMOVE.has(keyMatch[1])) continue;
|
|
169
|
+
cleaned.push(line);
|
|
170
|
+
}
|
|
171
|
+
const insertionIndex = cleaned.findIndex((line) => /^\s*with:\s*$/.test(line));
|
|
172
|
+
if (insertionIndex !== -1) cleaned.splice(insertionIndex + 1, 0, providerLine);
|
|
173
|
+
lines.splice(start, end - start, ...cleaned);
|
|
174
|
+
}
|
|
175
|
+
return lines.join("\n");
|
|
176
|
+
}
|
|
177
|
+
function hasUnsupportedDriveMode(inputs) {
|
|
178
|
+
return Boolean(inputs["drive-folder-id"] || inputs["spreadsheet-ids"] || inputs["sync-images"]);
|
|
179
|
+
}
|
|
180
|
+
function toLegacyOptions(inputs) {
|
|
181
|
+
return {
|
|
182
|
+
spreadsheetId: unquote(inputs["google-spreadsheet-id"]),
|
|
183
|
+
rowLimit: parseNum(inputs["row-limit"]),
|
|
184
|
+
waitSeconds: parseNum(inputs["wait-seconds"]),
|
|
185
|
+
syncLocalChanges: parseBool(inputs["sync-local-changes"], true),
|
|
186
|
+
autoTranslate: parseOptionalBool(inputs["auto-translate"]),
|
|
187
|
+
override: parseOptionalBool(inputs["override"]),
|
|
188
|
+
publicSheet: parseOptionalBool(inputs["public-sheet"])
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
function normalizeValue(value) {
|
|
192
|
+
if (Array.isArray(value)) return value.map(normalizeValue);
|
|
193
|
+
if (value && typeof value === "object") {
|
|
194
|
+
const normalizedEntries = Object.entries(value).filter(([, nested]) => nested !== void 0).map(([key, nested]) => [key, normalizeValue(nested)]).sort(([a], [b]) => a.localeCompare(b));
|
|
195
|
+
return Object.fromEntries(normalizedEntries);
|
|
196
|
+
}
|
|
197
|
+
return value;
|
|
198
|
+
}
|
|
199
|
+
function canonicalizeParityConfig(config) {
|
|
200
|
+
const clone = JSON.parse(JSON.stringify(config));
|
|
201
|
+
const inputOptions = clone.input?.options;
|
|
202
|
+
if (inputOptions?.publicSheet === false) delete inputOptions.publicSheet;
|
|
203
|
+
const syncOptions = clone.sync?.options;
|
|
204
|
+
if (syncOptions?.autoTranslate === false) delete syncOptions.autoTranslate;
|
|
205
|
+
if (syncOptions?.override === false) delete syncOptions.override;
|
|
206
|
+
return clone;
|
|
207
|
+
}
|
|
208
|
+
function collectDifferences(actual, expected, atPath = "config") {
|
|
209
|
+
if (Array.isArray(actual) && Array.isArray(expected)) {
|
|
210
|
+
if (actual.length !== expected.length) return [`${atPath}: array length differs (actual ${actual.length}, expected ${expected.length})`];
|
|
211
|
+
const differences = [];
|
|
212
|
+
for (let i = 0; i < actual.length; i++) differences.push(...collectDifferences(actual[i], expected[i], `${atPath}[${i}]`));
|
|
213
|
+
return differences;
|
|
214
|
+
}
|
|
215
|
+
if (Boolean(actual) && typeof actual === "object" && Boolean(expected) && typeof expected === "object") {
|
|
216
|
+
const actualRecord = actual;
|
|
217
|
+
const expectedRecord = expected;
|
|
218
|
+
const keys = Array.from(/* @__PURE__ */ new Set([...Object.keys(actualRecord), ...Object.keys(expectedRecord)])).sort();
|
|
219
|
+
const differences = [];
|
|
220
|
+
for (const key of keys) differences.push(...collectDifferences(actualRecord[key], expectedRecord[key], `${atPath}.${key}`));
|
|
221
|
+
return differences;
|
|
222
|
+
}
|
|
223
|
+
if (actual !== expected) return [`${atPath}: actual=${JSON.stringify(actual)} expected=${JSON.stringify(expected)}`];
|
|
224
|
+
return [];
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Compares the generated `providerConfig` against the config
|
|
228
|
+
* {@link mapLegacyGoogleOptionsToProviderConfig} would produce from the same legacy
|
|
229
|
+
* inputs, after canonicalizing both sides (dropping default-valued optional fields
|
|
230
|
+
* so they don't register as spurious differences).
|
|
231
|
+
*/
|
|
232
|
+
function runParityCheck(providerConfig, inputs) {
|
|
233
|
+
const mapped = mapLegacyGoogleOptionsToProviderConfig(toLegacyOptions(inputs));
|
|
234
|
+
const differences = collectDifferences(normalizeValue(canonicalizeParityConfig(providerConfig)), normalizeValue(canonicalizeParityConfig(mapped.config)));
|
|
235
|
+
return {
|
|
236
|
+
passed: differences.length === 0,
|
|
237
|
+
differences,
|
|
238
|
+
expectedConfig: mapped.config
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Auto-migrates a project from the legacy GitHub Action inputs to the v3 provider
|
|
243
|
+
* runtime: scans `.github/workflows/*.yml` for steps using the legacy action inputs,
|
|
244
|
+
* generates a {@link ProviderRuntimeConfig} from the first legacy step found, writes
|
|
245
|
+
* it to `providerConfigPath` (unless it already exists and `force` is not set), and —
|
|
246
|
+
* when `writeWorkflows` is set — rewrites each matching step in place to reference
|
|
247
|
+
* that config file instead of the legacy inputs. Workflows using Drive-folder mode
|
|
248
|
+
* (which has no v3 equivalent yet) are left untouched with a warning rather than
|
|
249
|
+
* being rewritten. Throws if no workflow files exist, or if none use the legacy action.
|
|
250
|
+
*/
|
|
251
|
+
function migrateProjectToV3(options = {}) {
|
|
252
|
+
const projectRoot = path.resolve(options.projectRoot ?? process.cwd());
|
|
253
|
+
const providerConfigPath = options.providerConfigPath ?? "provider.config.json";
|
|
254
|
+
const absoluteProviderConfigPath = path.resolve(projectRoot, providerConfigPath);
|
|
255
|
+
const warnings = [];
|
|
256
|
+
const legacyWorkflowsFound = [];
|
|
257
|
+
const rewrittenWorkflows = [];
|
|
258
|
+
const createdFiles = [];
|
|
259
|
+
const workflowFiles = listWorkflowFiles(projectRoot);
|
|
260
|
+
if (workflowFiles.length === 0) throw new Error("No workflow files found under .github/workflows.");
|
|
261
|
+
let firstLegacyInputs;
|
|
262
|
+
for (const workflowFile of workflowFiles) {
|
|
263
|
+
const content = fs.readFileSync(workflowFile, "utf8");
|
|
264
|
+
const lines = content.split(/\r?\n/);
|
|
265
|
+
const ranges = findActionStepRanges(content);
|
|
266
|
+
let hasLegacyInFile = false;
|
|
267
|
+
let skipRewriteForDriveMode = false;
|
|
268
|
+
for (const range of ranges) {
|
|
269
|
+
const inputs = extractInputsFromStep(lines, range.start, range.end);
|
|
270
|
+
const hasLegacyKeys = Object.keys(inputs).some((k) => LEGACY_KEYS_TO_REMOVE.has(k) || k === "google-client-email" || k === "google-private-key");
|
|
271
|
+
const hasProviderConfig = Boolean(inputs["provider-config"] || inputs["provider-config-path"]);
|
|
272
|
+
if (hasLegacyKeys && !hasProviderConfig) {
|
|
273
|
+
hasLegacyInFile = true;
|
|
274
|
+
if (!firstLegacyInputs) firstLegacyInputs = inputs;
|
|
275
|
+
if (hasUnsupportedDriveMode(inputs)) {
|
|
276
|
+
skipRewriteForDriveMode = true;
|
|
277
|
+
warnings.push(`Workflow ${path.relative(projectRoot, workflowFile)} uses Drive mode inputs. Auto-rewrite skipped for safety; generate provider config only and migrate this workflow manually.`);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
if (!hasLegacyInFile) continue;
|
|
282
|
+
legacyWorkflowsFound.push(path.relative(projectRoot, workflowFile));
|
|
283
|
+
if (options.writeWorkflows && !skipRewriteForDriveMode) {
|
|
284
|
+
const updated = rewriteWorkflow(content, providerConfigPath);
|
|
285
|
+
if (updated !== content) {
|
|
286
|
+
rewrittenWorkflows.push(path.relative(projectRoot, workflowFile));
|
|
287
|
+
if (!options.dryRun) fs.writeFileSync(workflowFile, updated, "utf8");
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
if (!firstLegacyInputs) throw new Error("No legacy action usage found to migrate.");
|
|
292
|
+
const providerConfig = buildProviderConfigFromInputs(firstLegacyInputs);
|
|
293
|
+
let parityCheck;
|
|
294
|
+
if (options.parityCheck) {
|
|
295
|
+
parityCheck = runParityCheck(providerConfig, firstLegacyInputs);
|
|
296
|
+
if (!parityCheck.passed) warnings.push(`Parity check found ${parityCheck.differences.length} difference(s) between generated provider config and legacy mapping.`);
|
|
297
|
+
}
|
|
298
|
+
if (fs.existsSync(absoluteProviderConfigPath) && !options.force) warnings.push(`Provider config already exists at ${path.relative(projectRoot, absoluteProviderConfigPath)}. Use --force to overwrite.`);
|
|
299
|
+
else if (!options.dryRun) {
|
|
300
|
+
fs.mkdirSync(path.dirname(absoluteProviderConfigPath), { recursive: true });
|
|
301
|
+
fs.writeFileSync(absoluteProviderConfigPath, `${JSON.stringify(providerConfig, null, 2)}\n`, "utf8");
|
|
302
|
+
createdFiles.push(path.relative(projectRoot, absoluteProviderConfigPath));
|
|
303
|
+
}
|
|
304
|
+
return {
|
|
305
|
+
projectRoot,
|
|
306
|
+
providerConfigPath: path.relative(projectRoot, absoluteProviderConfigPath),
|
|
307
|
+
providerConfig,
|
|
308
|
+
legacyWorkflowsFound,
|
|
309
|
+
rewrittenWorkflows,
|
|
310
|
+
createdFiles,
|
|
311
|
+
warnings,
|
|
312
|
+
parityCheck
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
//#endregion
|
|
316
|
+
//#region src/setup/migrateV3Cli.ts
|
|
317
|
+
/**
|
|
318
|
+
* `gst-migrate-v3` CLI entrypoint. Wraps {@link migrateProjectToV3}: prints a summary
|
|
319
|
+
* of legacy workflows found, files rewritten/created, and any parity-check result;
|
|
320
|
+
* exits with code 2 if `--parity-check` reports differences, or code 1 on any thrown error.
|
|
321
|
+
*/
|
|
322
|
+
function parseArgs(argv) {
|
|
323
|
+
const result = {};
|
|
324
|
+
for (const arg of argv.slice(2)) {
|
|
325
|
+
const match = arg.match(/^--([^=]+)(?:=(.*))?$/);
|
|
326
|
+
if (match) result[match[1]] = match[2] ?? "true";
|
|
327
|
+
}
|
|
328
|
+
return result;
|
|
329
|
+
}
|
|
330
|
+
function printHelp() {
|
|
331
|
+
console.log(`
|
|
332
|
+
gst-migrate-v3 - Auto-migrate legacy workflow usage to provider runtime config
|
|
333
|
+
|
|
334
|
+
USAGE
|
|
335
|
+
npx -p @el-j/google-sheet-translations gst-migrate-v3 [options]
|
|
336
|
+
|
|
337
|
+
OPTIONS
|
|
338
|
+
--project-root=PATH Project root (default: current working directory)
|
|
339
|
+
--provider-config-path=PATH Output provider config path (default: provider.config.json)
|
|
340
|
+
--write-workflows Rewrite legacy action steps to provider-config-path mode
|
|
341
|
+
--parity-check Validate generated config parity against legacy option mapping
|
|
342
|
+
--dry-run Preview changes without writing files
|
|
343
|
+
--force Overwrite existing provider config file
|
|
344
|
+
--help Show this help
|
|
345
|
+
|
|
346
|
+
EXAMPLES
|
|
347
|
+
gst-migrate-v3 --dry-run
|
|
348
|
+
gst-migrate-v3 --dry-run --parity-check
|
|
349
|
+
gst-migrate-v3 --write-workflows --provider-config-path=.github/provider.config.json
|
|
350
|
+
`);
|
|
351
|
+
}
|
|
352
|
+
async function main() {
|
|
353
|
+
const args = parseArgs(process.argv);
|
|
354
|
+
if (args.help || args.h) {
|
|
355
|
+
printHelp();
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
const result = migrateProjectToV3({
|
|
359
|
+
projectRoot: path.resolve(args["project-root"] ?? process.cwd()),
|
|
360
|
+
providerConfigPath: args["provider-config-path"] ?? "provider.config.json",
|
|
361
|
+
dryRun: args["dry-run"] === "true",
|
|
362
|
+
writeWorkflows: args["write-workflows"] === "true",
|
|
363
|
+
force: args.force === "true",
|
|
364
|
+
parityCheck: args["parity-check"] === "true"
|
|
365
|
+
});
|
|
366
|
+
console.log("Migration summary:");
|
|
367
|
+
console.log(`- Project root: ${result.projectRoot}`);
|
|
368
|
+
console.log(`- Provider config path: ${result.providerConfigPath}`);
|
|
369
|
+
console.log(`- Legacy workflows found: ${result.legacyWorkflowsFound.length}`);
|
|
370
|
+
console.log(`- Rewritten workflows: ${result.rewrittenWorkflows.length}`);
|
|
371
|
+
console.log(`- Created files: ${result.createdFiles.length}`);
|
|
372
|
+
if (result.legacyWorkflowsFound.length > 0) {
|
|
373
|
+
console.log("\nLegacy workflows:");
|
|
374
|
+
for (const file of result.legacyWorkflowsFound) console.log(`- ${file}`);
|
|
375
|
+
}
|
|
376
|
+
if (result.rewrittenWorkflows.length > 0) {
|
|
377
|
+
console.log("\nRewritten workflows:");
|
|
378
|
+
for (const file of result.rewrittenWorkflows) console.log(`- ${file}`);
|
|
379
|
+
}
|
|
380
|
+
if (result.createdFiles.length > 0) {
|
|
381
|
+
console.log("\nCreated files:");
|
|
382
|
+
for (const file of result.createdFiles) console.log(`- ${file}`);
|
|
383
|
+
}
|
|
384
|
+
if (result.warnings.length > 0) {
|
|
385
|
+
console.log("\nWarnings:");
|
|
386
|
+
for (const warning of result.warnings) console.log(`- ${warning}`);
|
|
387
|
+
}
|
|
388
|
+
if (result.parityCheck) {
|
|
389
|
+
console.log("\nParity check:");
|
|
390
|
+
console.log(`- Passed: ${result.parityCheck.passed ? "yes" : "no"}`);
|
|
391
|
+
console.log(`- Differences: ${result.parityCheck.differences.length}`);
|
|
392
|
+
if (!result.parityCheck.passed) {
|
|
393
|
+
for (const diff of result.parityCheck.differences) console.log(`- ${diff}`);
|
|
394
|
+
process.exitCode = 2;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
console.log("\nGenerated provider config:");
|
|
398
|
+
console.log(JSON.stringify(result.providerConfig, null, 2));
|
|
399
|
+
}
|
|
400
|
+
main().catch((err) => {
|
|
401
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
402
|
+
console.error(message);
|
|
403
|
+
process.exit(1);
|
|
404
|
+
});
|
|
405
|
+
//#endregion
|
|
406
|
+
export {};
|