tnp-helpers 19.0.67 → 19.0.72
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/browser/fesm2022/tnp-helpers.mjs +510 -166
- package/browser/fesm2022/tnp-helpers.mjs.map +1 -1
- package/browser/lib/base/classes/base-cli-worker/base-cli-worker-controller.d.ts +1 -1
- package/browser/lib/base/classes/base-cli-worker/base-cli-worker-terminal-ui.d.ts +2 -2
- package/browser/lib/base/classes/base-cli-worker/base-cli-worker.d.ts +2 -2
- package/browser/lib/base/classes/base-cli-worker/base-cli-worker.models.d.ts +2 -2
- package/browser/lib/base/classes/base-compiler-for-project.d.ts +4 -4
- package/browser/lib/base/classes/base-global-command-line.d.ts +15 -1
- package/browser/lib/base/classes/base-linked-projects.d.ts +10 -3
- package/browser/lib/base/classes/base-package-json.d.ts +1 -0
- package/browser/lib/base/tcp-udp-ports/ports.controller.d.ts +2 -2
- package/browser/lib/base/tcp-udp-ports/tcp-udp-ports.context.d.ts +1 -1
- package/browser/lib/base/tcp-udp-ports/tcp-upd-ports.worker.d.ts +3 -3
- package/browser/lib/build-info._auto-generated_.d.ts +1 -1
- package/browser/lib/utils.d.ts +26 -3
- package/browser/migrations/1736198527297_init.d.ts +1 -1
- package/browser/migrations/1736199486472_addingNotAssignablePorts.d.ts +3 -3
- package/browser/migrations/1736454437350_addFreePorts.d.ts +3 -3
- package/browser/migrations/migrations_index._auto-generated_.d.ts +7 -7
- package/browser/package.json +1 -1
- package/lib/base/classes/base-bower-json.js +1 -1
- package/lib/base/classes/base-bower-json.js.map +1 -1
- package/lib/base/classes/base-cli-worker/base-cli-worker-controller.d.ts +1 -1
- package/lib/base/classes/base-cli-worker/base-cli-worker-controller.js +11 -11
- package/lib/base/classes/base-cli-worker/base-cli-worker-controller.js.map +1 -1
- package/lib/base/classes/base-cli-worker/base-cli-worker-terminal-ui.d.ts +2 -2
- package/lib/base/classes/base-cli-worker/base-cli-worker-terminal-ui.js +1 -1
- package/lib/base/classes/base-cli-worker/base-cli-worker-terminal-ui.js.map +1 -1
- package/lib/base/classes/base-cli-worker/base-cli-worker.d.ts +2 -2
- package/lib/base/classes/base-cli-worker/base-cli-worker.js +1 -1
- package/lib/base/classes/base-cli-worker/base-cli-worker.js.map +1 -1
- package/lib/base/classes/base-cli-worker/base-cli-worker.models.d.ts +2 -2
- package/lib/base/classes/base-cli-worker/base-cli-worker.models.js +1 -1
- package/lib/base/classes/base-cli-worker/base-cli-worker.models.js.map +1 -1
- package/lib/base/classes/base-compiler-for-project.d.ts +4 -4
- package/lib/base/classes/base-compiler-for-project.js +9 -11
- package/lib/base/classes/base-compiler-for-project.js.map +1 -1
- package/lib/base/classes/base-debounce-compiler-for-project.js +8 -5
- package/lib/base/classes/base-debounce-compiler-for-project.js.map +1 -1
- package/lib/base/classes/base-file-folders-operations.js +1 -1
- package/lib/base/classes/base-file-folders-operations.js.map +1 -1
- package/lib/base/classes/base-global-command-line.backend.d.ts +1 -13
- package/lib/base/classes/base-global-command-line.backend.js +11 -416
- package/lib/base/classes/base-global-command-line.backend.js.map +1 -1
- package/lib/base/classes/base-global-command-line.d.ts +14 -0
- package/lib/base/classes/base-global-command-line.js +105 -5
- package/lib/base/classes/base-global-command-line.js.map +1 -1
- package/lib/base/classes/base-json-file-reader.js +1 -1
- package/lib/base/classes/base-json-file-reader.js.map +1 -1
- package/lib/base/classes/base-library-build.js +1 -1
- package/lib/base/classes/base-library-build.js.map +1 -1
- package/lib/base/classes/base-linked-projects.d.ts +10 -3
- package/lib/base/classes/base-linked-projects.js +18 -8
- package/lib/base/classes/base-linked-projects.js.map +1 -1
- package/lib/base/classes/base-linter.js +4 -0
- package/lib/base/classes/base-linter.js.map +1 -1
- package/lib/base/classes/base-node-modules.js +1 -1
- package/lib/base/classes/base-node-modules.js.map +1 -1
- package/lib/base/classes/base-package-json.d.ts +1 -0
- package/lib/base/classes/base-package-json.js +5 -1
- package/lib/base/classes/base-package-json.js.map +1 -1
- package/lib/base/classes/base-project-resolver.js +1 -1
- package/lib/base/classes/base-project-resolver.js.map +1 -1
- package/lib/base/classes/base-project.js +23 -3
- package/lib/base/classes/base-project.js.map +1 -1
- package/lib/base/classes/base-quick-fixes.js +1 -1
- package/lib/base/classes/base-quick-fixes.js.map +1 -1
- package/lib/base/classes/base-release-process.js +1 -1
- package/lib/base/classes/base-release-process.js.map +1 -1
- package/lib/base/classes/base-start-config.backend.js +1 -1
- package/lib/base/classes/base-start-config.backend.js.map +1 -1
- package/lib/base/classes/base-static-pages.js +1 -1
- package/lib/base/classes/base-static-pages.js.map +1 -1
- package/lib/base/classes/base-vscode.js +15 -6
- package/lib/base/classes/base-vscode.js.map +1 -1
- package/lib/base/index-rebuilder.backend.js +1 -1
- package/lib/base/index-rebuilder.backend.js.map +1 -1
- package/lib/base/linked-project.js +1 -1
- package/lib/base/linked-project.js.map +1 -1
- package/lib/base/tcp-udp-ports/not-assignable-port.entity.js +2 -2
- package/lib/base/tcp-udp-ports/ports.controller.d.ts +2 -2
- package/lib/base/tcp-udp-ports/ports.controller.js +13 -13
- package/lib/base/tcp-udp-ports/ports.controller.js.map +1 -1
- package/lib/base/tcp-udp-ports/tcp-udp-ports.context.d.ts +1 -1
- package/lib/base/tcp-udp-ports/tcp-udp-ports.context.js +6 -6
- package/lib/base/tcp-udp-ports/tcp-udp-ports.context.js.map +1 -1
- package/lib/base/tcp-udp-ports/tcp-upd-ports.worker.d.ts +3 -3
- package/lib/base/tcp-udp-ports/tcp-upd-ports.worker.js +2 -2
- package/lib/base/tcp-udp-ports/tcp-upd-ports.worker.js.map +1 -1
- package/lib/build-info._auto-generated_.d.ts +1 -1
- package/lib/build-info._auto-generated_.js +1 -1
- package/lib/helpers/for-backend/helpers-cli-tool.backend.js +1 -1
- package/lib/helpers/for-backend/helpers-cli-tool.backend.js.map +1 -1
- package/lib/helpers/for-backend/helpers-dependencies.backend.d.ts +1 -0
- package/lib/helpers/for-backend/helpers-dependencies.backend.js +27 -0
- package/lib/helpers/for-backend/helpers-dependencies.backend.js.map +1 -1
- package/lib/helpers/for-backend/helpers-file-folders.js +1 -1
- package/lib/helpers/for-backend/helpers-file-folders.js.map +1 -1
- package/lib/helpers/for-backend/helpers-git.backend.js +1 -1
- package/lib/helpers/for-backend/helpers-git.backend.js.map +1 -1
- package/lib/helpers/for-backend/helpers-path.backend.js +2 -2
- package/lib/helpers/for-backend/helpers-path.backend.js.map +1 -1
- package/lib/helpers/for-backend/helpers-process.js +1 -1
- package/lib/helpers/for-backend/helpers-process.js.map +1 -1
- package/lib/helpers/for-browser/angular.helper.js +2 -2
- package/lib/helpers/helpers-json5.backend.js +1 -1
- package/lib/helpers/helpers-json5.backend.js.map +1 -1
- package/lib/old/base-component.js +2 -2
- package/lib/old/base-formly-component.js +2 -2
- package/lib/old/dual-component-ctrl.js +2 -2
- package/lib/utils.d.ts +26 -3
- package/lib/utils.js +231 -67
- package/lib/utils.js.map +1 -1
- package/lib/validators/validators-git.js.map +1 -1
- package/migrations/1736198527297_init.d.ts +1 -1
- package/migrations/1736198527297_init.js +6 -6
- package/migrations/1736198527297_init.js.map +1 -1
- package/migrations/1736199486472_addingNotAssignablePorts.d.ts +3 -3
- package/migrations/1736199486472_addingNotAssignablePorts.js +7 -7
- package/migrations/1736199486472_addingNotAssignablePorts.js.map +1 -1
- package/migrations/1736454437350_addFreePorts.d.ts +3 -3
- package/migrations/1736454437350_addFreePorts.js +7 -7
- package/migrations/1736454437350_addFreePorts.js.map +1 -1
- package/migrations/migrations_index._auto-generated_.d.ts +7 -7
- package/migrations/migrations_index._auto-generated_.js +5 -5
- package/migrations/migrations_index._auto-generated_.js.map +1 -1
- package/package.json +7 -10
- package/tmp-environment.json +11 -7
- package/websql/fesm2022/tnp-helpers.mjs +482 -122
- package/websql/fesm2022/tnp-helpers.mjs.map +1 -1
- package/websql/lib/base/classes/base-cli-worker/base-cli-worker-controller.d.ts +1 -1
- package/websql/lib/base/classes/base-cli-worker/base-cli-worker-terminal-ui.d.ts +2 -2
- package/websql/lib/base/classes/base-cli-worker/base-cli-worker.d.ts +2 -2
- package/websql/lib/base/classes/base-cli-worker/base-cli-worker.models.d.ts +2 -2
- package/websql/lib/base/classes/base-compiler-for-project.d.ts +4 -4
- package/websql/lib/base/classes/base-global-command-line.d.ts +15 -1
- package/websql/lib/base/classes/base-linked-projects.d.ts +10 -3
- package/websql/lib/base/classes/base-package-json.d.ts +1 -0
- package/websql/lib/base/tcp-udp-ports/ports.controller.d.ts +2 -2
- package/websql/lib/base/tcp-udp-ports/tcp-udp-ports.context.d.ts +1 -1
- package/websql/lib/base/tcp-udp-ports/tcp-upd-ports.worker.d.ts +3 -3
- package/websql/lib/build-info._auto-generated_.d.ts +1 -1
- package/websql/lib/utils.d.ts +26 -3
- package/websql/migrations/1736198527297_init.d.ts +1 -1
- package/websql/migrations/1736199486472_addingNotAssignablePorts.d.ts +3 -3
- package/websql/migrations/1736454437350_addFreePorts.d.ts +3 -3
- package/websql/migrations/migrations_index._auto-generated_.d.ts +7 -7
- package/websql/package.json +1 -1
- package/lib/base/classes/base-process/base-process-api.service.d.ts +0 -7
- package/lib/base/classes/base-process/base-process.context.d.ts +0 -19
- package/lib/base/classes/base-process/base-process.context.js +0 -22
- package/lib/base/classes/base-process/base-process.context.js.map +0 -1
- package/lib/base/classes/base-process/base-process.controller.d.ts +0 -17
- package/lib/base/classes/base-process/base-process.controller.js +0 -91
- package/lib/base/classes/base-process/base-process.controller.js.map +0 -1
- package/lib/base/classes/base-process/base-process.d.ts +0 -8
- package/lib/base/classes/base-process/base-process.defaults-values.d.ts +0 -2
- package/lib/base/classes/base-process/base-process.defaults-values.js +0 -9
- package/lib/base/classes/base-process/base-process.defaults-values.js.map +0 -1
- package/lib/base/classes/base-process/base-process.js +0 -62
- package/lib/base/classes/base-process/base-process.js.map +0 -1
- package/lib/base/classes/base-process/base-process.models.d.ts +0 -6
- package/lib/base/classes/base-process/base-process.models.js +0 -3
- package/lib/base/classes/base-process/base-process.models.js.map +0 -1
- package/lib/base/classes/base-process/base-process.provider.d.ts +0 -16
- package/lib/base/classes/base-process/base-process.provider.js +0 -69
- package/lib/base/classes/base-process/base-process.provider.js.map +0 -1
- package/lib/base/classes/base-process/base-process.repository copy.d.ts +0 -8
- package/lib/base/classes/base-process/base-process.repository copy.js +0 -32
- package/lib/base/classes/base-process/base-process.repository copy.js.map +0 -1
- package/lib/base/classes/base-process/base-process.repository.d.ts +0 -8
- package/lib/base/classes/base-process/base-process.repository.js +0 -32
- package/lib/base/classes/base-process/base-process.repository.js.map +0 -1
- package/lib/base/classes/base-process/base-process.terminal-ui.d.ts +0 -11
- package/lib/base/classes/base-process/base-process.terminal-ui.js +0 -54
- package/lib/base/classes/base-process/base-process.terminal-ui.js.map +0 -1
- package/lib/base/classes/base-process/base-process.worker.d.ts +0 -16
- package/lib/base/classes/base-process/base-process.worker.js +0 -29
- package/lib/base/classes/base-process/base-process.worker.js.map +0 -1
- package/lib/base/classes/base-process/index.d.ts +0 -1
- package/lib/base/classes/base-process/index.js +0 -22
- package/lib/base/classes/base-process/index.js.map +0 -1
- package/lib/base/classes/base-process/processes.repository.d.ts +0 -0
- package/lib/base/classes/base-process/processes.repository.js +0 -5
- package/lib/base/classes/base-process/processes.repository.js.map +0 -1
- package/lib/env-backend._auto-generated_.d.ts +0 -34
- package/lib/env-backend._auto-generated_.js +0 -38
- package/lib/env-backend._auto-generated_.js.map +0 -1
- package/lib/env-browser._auto-generated_.d.ts +0 -34
- package/lib/env-browser._auto-generated_.js +0 -38
- package/lib/env-browser._auto-generated_.js.map +0 -1
- package/lib/env.backend.d.ts +0 -34
- package/lib/env.backend.js +0 -40
- package/lib/env.backend.js.map +0 -1
- package/lib/env.browser.d.ts +0 -34
package/lib/utils.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.UtilsDocker = exports.UtilsPasswords = exports.UtilsJava = exports.UtilsTaonWorker = exports.UtilsZip = exports.UtilsZipBrowser = exports.UtilsVSCode = exports.UtilsQuickFixes = exports.UtilsMd = exports.UtilsHttp = exports.UtilsTypescript = exports.UtilsNpm = void 0;
|
|
3
|
+
exports.UtilsFileSync = exports.UtilsDocker = exports.UtilsPasswords = exports.UtilsJava = exports.UtilsTaonWorker = exports.UtilsZip = exports.UtilsZipBrowser = exports.UtilsVSCode = exports.UtilsQuickFixes = exports.UtilsMd = exports.UtilsHttp = exports.UtilsTypescript = exports.UtilsNpm = void 0;
|
|
4
4
|
const node_crypto_1 = require("node:crypto"); // @backend
|
|
5
5
|
const node_util_1 = require("node:util"); // @backend
|
|
6
|
-
const lib_1 = require("tnp-
|
|
6
|
+
const lib_1 = require("tnp-core/lib");
|
|
7
7
|
const lib_2 = require("tnp-core/lib");
|
|
8
8
|
const lib_3 = require("tnp-core/lib");
|
|
9
9
|
const typescript_1 = require("typescript");
|
|
@@ -326,11 +326,12 @@ var UtilsTypescript;
|
|
|
326
326
|
//#region @backendFunc
|
|
327
327
|
absPathToFile = (0, lib_2.crossPlatformPath)(absPathToFile);
|
|
328
328
|
if (index_1.Helpers.exists(absPathToFile)) {
|
|
329
|
-
const { execSync } = require('child_process');
|
|
330
329
|
index_1.Helpers.logInfo(`Fixing file with eslint: ${absPathToFile}`);
|
|
331
330
|
try {
|
|
332
|
-
|
|
331
|
+
// use local eslint first
|
|
332
|
+
lib_2.child_process.execSync(`npx --yes eslint --fix ${lib_2.path.basename(absPathToFile)}`, {
|
|
333
333
|
cwd: lib_2.path.dirname(absPathToFile),
|
|
334
|
+
stdio: 'inherit',
|
|
334
335
|
});
|
|
335
336
|
}
|
|
336
337
|
catch (error) { }
|
|
@@ -345,15 +346,14 @@ var UtilsTypescript;
|
|
|
345
346
|
index_1.Helpers.info(`Fixing files with eslint in: ${absPathToFolder}`);
|
|
346
347
|
const lintFixFn = () => {
|
|
347
348
|
try {
|
|
348
|
-
|
|
349
|
+
lib_2.child_process.execSync(`npx --yes eslint --fix . `, {
|
|
349
350
|
cwd: absPathToFolder,
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
}).sync();
|
|
351
|
+
stdio: 'inherit',
|
|
352
|
+
});
|
|
353
353
|
}
|
|
354
354
|
catch (error) { }
|
|
355
355
|
};
|
|
356
|
-
lintFixFn();
|
|
356
|
+
lintFixFn(); // TODO QUICK_FIX
|
|
357
357
|
lintFixFn(); // sometimes it needs to be run twice
|
|
358
358
|
index_1.Helpers.info(`Eslint fixing files done.`);
|
|
359
359
|
}
|
|
@@ -776,66 +776,39 @@ var UtilsTypescript;
|
|
|
776
776
|
//#endregion
|
|
777
777
|
};
|
|
778
778
|
//#endregion
|
|
779
|
-
//#region fix standalone ng 19
|
|
780
779
|
/**
|
|
781
780
|
* Transition methods ng18 => ng19
|
|
782
|
-
*
|
|
783
|
-
* and add standalone: false if not exists
|
|
781
|
+
* Adds standalone: false if not exists in component decorator
|
|
784
782
|
*/
|
|
785
783
|
function transformComponentStandaloneOption(sourceText) {
|
|
786
784
|
//#region @backendFunc
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
const
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
prop.name.text === 'standalone') {
|
|
807
|
-
hasStandalone = true;
|
|
808
|
-
if (prop.initializer.kind === typescript_1.SyntaxKind.TrueKeyword) {
|
|
809
|
-
standaloneIsTrue = true;
|
|
810
|
-
continue; // skip it
|
|
811
|
-
}
|
|
812
|
-
}
|
|
813
|
-
newProps.push(prop);
|
|
814
|
-
}
|
|
815
|
-
if (!hasStandalone) {
|
|
816
|
-
// add standalone: false
|
|
817
|
-
newProps.push(factory.createPropertyAssignment(factory.createIdentifier('standalone'), factory.createFalse()));
|
|
818
|
-
}
|
|
819
|
-
const newArgs = [
|
|
820
|
-
factory.updateObjectLiteralExpression(args[0], newProps),
|
|
821
|
-
];
|
|
822
|
-
const newExpression = factory.updateCallExpression(node.expression, node.expression.expression, undefined, newArgs);
|
|
823
|
-
return factory.updateDecorator(node, newExpression);
|
|
785
|
+
return sourceText.replace(/@Component\s*\(\s*\{([\s\S]*?)\}\s*\)/g, (full, propsBlock) => {
|
|
786
|
+
let props = propsBlock;
|
|
787
|
+
// 1. Remove standalone: true
|
|
788
|
+
// props = props.replace(/\s*standalone\s*:\s*true\s*,?/g, '');
|
|
789
|
+
// 2. Check if standalone exists after removal
|
|
790
|
+
const hasStandalone = /standalone\s*:/.test(props);
|
|
791
|
+
// 3. Insert standalone: false if missing
|
|
792
|
+
if (hasStandalone) {
|
|
793
|
+
// do nothing
|
|
794
|
+
}
|
|
795
|
+
else {
|
|
796
|
+
const hasImports = /imports\s*:/.test(props);
|
|
797
|
+
if (!hasImports) {
|
|
798
|
+
// If block is empty or only whitespace
|
|
799
|
+
if (/^\s*$/.test(props)) {
|
|
800
|
+
props = `\n standalone: false\n`;
|
|
801
|
+
}
|
|
802
|
+
else {
|
|
803
|
+
props += `\n standalone: false`;
|
|
824
804
|
}
|
|
825
805
|
}
|
|
826
|
-
|
|
827
|
-
}
|
|
828
|
-
|
|
829
|
-
};
|
|
830
|
-
const result = (0, typescript_1.transform)(sourceFile, [transformerFactory]);
|
|
831
|
-
const transformedSourceFile = result.transformed[0];
|
|
832
|
-
const resultText = printer.printFile(transformedSourceFile);
|
|
833
|
-
result.dispose();
|
|
834
|
-
return resultText;
|
|
806
|
+
}
|
|
807
|
+
return `@Component({${props}})`;
|
|
808
|
+
});
|
|
835
809
|
//#endregion
|
|
836
810
|
}
|
|
837
811
|
UtilsTypescript.transformComponentStandaloneOption = transformComponentStandaloneOption;
|
|
838
|
-
//#endregion
|
|
839
812
|
//#region escape @ in html text
|
|
840
813
|
const escapeAtInHtmlText = (fileContent) => {
|
|
841
814
|
return fileContent.replace(/>([^<@]*?)@([^<]*)</g, (_match, before, after) => {
|
|
@@ -866,7 +839,6 @@ var UtilsTypescript;
|
|
|
866
839
|
//#endregion
|
|
867
840
|
//#region remove tagged imports/exports
|
|
868
841
|
function removeTaggedImportExport(tsFileContent, tags) {
|
|
869
|
-
//#region @websqlFunc
|
|
870
842
|
const sourceFile = (0, typescript_1.createSourceFile)('temp.ts', tsFileContent, typescript_1.ScriptTarget.Latest, true, typescript_1.ScriptKind.TS);
|
|
871
843
|
// debug && console.log(tsFileContent);
|
|
872
844
|
const lines = tsFileContent.split(/\r?\n/);
|
|
@@ -907,15 +879,26 @@ var UtilsTypescript;
|
|
|
907
879
|
const result = lines.join('\n');
|
|
908
880
|
// debug && console.log(result)
|
|
909
881
|
return result;
|
|
910
|
-
//#endregion
|
|
911
882
|
}
|
|
912
883
|
UtilsTypescript.removeTaggedImportExport = removeTaggedImportExport;
|
|
913
884
|
//#endregion
|
|
914
885
|
//#region wrap first imports in region
|
|
915
886
|
UtilsTypescript.wrapFirstImportsInImportsRegion = (fileContent) => {
|
|
916
887
|
//#region @backendFunc
|
|
917
|
-
const
|
|
888
|
+
const importRegion = `//#re` + `gion`;
|
|
889
|
+
const importRegionStart = `${importRegion} imports`;
|
|
918
890
|
const importRegionEnd = `//#end` + `region`;
|
|
891
|
+
if (fileContent.startsWith(importRegionStart)) {
|
|
892
|
+
return fileContent; // already wrapped
|
|
893
|
+
}
|
|
894
|
+
let firstRegionLine = undefined;
|
|
895
|
+
if (fileContent.startsWith(importRegion)) {
|
|
896
|
+
const lines = fileContent.split(/\r?\n/);
|
|
897
|
+
if (lines[0].includes('@notF' + 'orNpm')) {
|
|
898
|
+
firstRegionLine = lines[0];
|
|
899
|
+
fileContent = lines.slice(1).join('\n');
|
|
900
|
+
}
|
|
901
|
+
}
|
|
919
902
|
const sourceFile = (0, typescript_1.createSourceFile)('temp.ts', fileContent, typescript_1.ScriptTarget.Latest, true);
|
|
920
903
|
const lines = fileContent.split(/\r?\n/);
|
|
921
904
|
const importDeclarations = [];
|
|
@@ -934,7 +917,7 @@ var UtilsTypescript;
|
|
|
934
917
|
}
|
|
935
918
|
}
|
|
936
919
|
if (importDeclarations.length === 0) {
|
|
937
|
-
return fileContent; // nothing to wrap
|
|
920
|
+
return fileContent + (firstRegionLine ? `\n${firstRegionLine}` : ''); // nothing to wrap
|
|
938
921
|
}
|
|
939
922
|
const firstImportStart = importDeclarations[0].getFullStart();
|
|
940
923
|
const lastImportEnd = importDeclarations[importDeclarations.length - 1].getEnd();
|
|
@@ -946,11 +929,14 @@ var UtilsTypescript;
|
|
|
946
929
|
const after = lines.slice(endLine + 1);
|
|
947
930
|
return [
|
|
948
931
|
...before,
|
|
932
|
+
firstRegionLine,
|
|
949
933
|
importRegionStart,
|
|
950
934
|
...importBlock,
|
|
951
935
|
importRegionEnd,
|
|
952
936
|
...after,
|
|
953
|
-
]
|
|
937
|
+
]
|
|
938
|
+
.filter(f => f !== undefined)
|
|
939
|
+
.join('\n');
|
|
954
940
|
//#endregion
|
|
955
941
|
};
|
|
956
942
|
//#endregion
|
|
@@ -1024,8 +1010,9 @@ var UtilsTypescript;
|
|
|
1024
1010
|
var UtilsHttp;
|
|
1025
1011
|
(function (UtilsHttp) {
|
|
1026
1012
|
//#region utils http / start http server
|
|
1027
|
-
UtilsHttp.startHttpServer = async (cwd, port) => {
|
|
1013
|
+
UtilsHttp.startHttpServer = async (cwd, port, options) => {
|
|
1028
1014
|
//#region @backendFunc
|
|
1015
|
+
options = options || {};
|
|
1029
1016
|
const express = require('express');
|
|
1030
1017
|
const app = express();
|
|
1031
1018
|
// Serve static files from the provided cwd
|
|
@@ -1034,12 +1021,13 @@ var UtilsHttp;
|
|
|
1034
1021
|
app.use((req, res) => {
|
|
1035
1022
|
res.status(404).send('File not found');
|
|
1036
1023
|
});
|
|
1024
|
+
index_1.Helpers.taskStarted(`Starting server.. http://localhost:${port}`);
|
|
1037
1025
|
// Start the server
|
|
1038
1026
|
const server = app.listen(port, () => {
|
|
1039
|
-
|
|
1027
|
+
index_1.Helpers.taskDone(options.startMessage ||
|
|
1028
|
+
`Server started at http://localhost:${port}, serving files from ${cwd}`);
|
|
1040
1029
|
});
|
|
1041
1030
|
return new Promise((resolve, reject) => {
|
|
1042
|
-
console.log(`Server started at http://localhost:${port}`);
|
|
1043
1031
|
// Handle Ctrl+C (SIGINT) gracefully
|
|
1044
1032
|
process.on('SIGINT', () => {
|
|
1045
1033
|
server.close(() => resolve());
|
|
@@ -1074,6 +1062,17 @@ var UtilsMd;
|
|
|
1074
1062
|
return assets.map(r => r.replace(new RegExp(/^\.\//), ''));
|
|
1075
1063
|
//#endregion
|
|
1076
1064
|
};
|
|
1065
|
+
UtilsMd.getAssetsFromFile = (absPathToFile) => {
|
|
1066
|
+
//#region @backendFunc
|
|
1067
|
+
if (!index_1.Helpers.exists(absPathToFile)) {
|
|
1068
|
+
return [];
|
|
1069
|
+
}
|
|
1070
|
+
if (lib_2.path.extname('absPathToFile').toLowerCase() !== '.md') {
|
|
1071
|
+
return [];
|
|
1072
|
+
}
|
|
1073
|
+
return UtilsMd.getAssets(index_1.Helpers.readFile(absPathToFile));
|
|
1074
|
+
//#endregion
|
|
1075
|
+
};
|
|
1077
1076
|
/**
|
|
1078
1077
|
* Extract links to other Markdown files from a given Markdown content.
|
|
1079
1078
|
* @param mdfileContent
|
|
@@ -2084,4 +2083,169 @@ var UtilsDocker;
|
|
|
2084
2083
|
//#endregion
|
|
2085
2084
|
})(UtilsDocker || (exports.UtilsDocker = UtilsDocker = {}));
|
|
2086
2085
|
//#endregion
|
|
2086
|
+
//#region utils file sync
|
|
2087
|
+
/**
|
|
2088
|
+
* ! TODO @IN_PROGRESS @LAST
|
|
2089
|
+
*/
|
|
2090
|
+
var UtilsFileSync;
|
|
2091
|
+
(function (UtilsFileSync) {
|
|
2092
|
+
//#region constants
|
|
2093
|
+
// ───── SAFETY SETTINGS ─────────────────────────────
|
|
2094
|
+
// Minimum realistic photo/video size (in bytes) before we even try
|
|
2095
|
+
const MIN_PHOTO_SIZE = 50_000; // ~50 KB — anything smaller is probably placeholder
|
|
2096
|
+
const MIN_VIDEO_SIZE = 500_000; // ~500 KB
|
|
2097
|
+
// How long we wait after the file stops growing before processing
|
|
2098
|
+
const STABILIZATION_MS = 5000; // 5 seconds is bulletproof
|
|
2099
|
+
//#region @backend
|
|
2100
|
+
const execAsync = (0, node_util_1.promisify)(lib_2.child_process.exec);
|
|
2101
|
+
//#endregion
|
|
2102
|
+
//#region for folders
|
|
2103
|
+
UtilsFileSync.forFolders = async (folder) => {
|
|
2104
|
+
//#region @backendFunc
|
|
2105
|
+
const hasFFmpeg = await lib_2.UtilsOs.commandExistsAsync('ffmpeg');
|
|
2106
|
+
if (!hasFFmpeg) {
|
|
2107
|
+
index_1.Helpers.error(`FFmpeg is not installed or not available in PATH. Please install FFmpeg to use the safe watcher.`);
|
|
2108
|
+
return;
|
|
2109
|
+
}
|
|
2110
|
+
const hasFFprobe = await lib_2.UtilsOs.commandExistsAsync('ffprobe');
|
|
2111
|
+
if (!hasFFprobe) {
|
|
2112
|
+
index_1.Helpers.error(`FFprobe is not installed or not available in PATH. Please install FFprobe to use the safe watcher.`);
|
|
2113
|
+
return;
|
|
2114
|
+
}
|
|
2115
|
+
//#region watcher setup
|
|
2116
|
+
await lib_2.fse.mkdirp(folder.tempConvertFolder);
|
|
2117
|
+
const processed = new Set();
|
|
2118
|
+
const pending = new Map();
|
|
2119
|
+
const watcherData = {
|
|
2120
|
+
...folder,
|
|
2121
|
+
processed,
|
|
2122
|
+
pending,
|
|
2123
|
+
};
|
|
2124
|
+
//#endregion
|
|
2125
|
+
//#region terminal menu
|
|
2126
|
+
index_1.Helpers.info(`Starting safe watcher with the following settings:
|
|
2127
|
+
${lib_1.chalk.bold('Android folder')}:\n${folder.androidFolder}
|
|
2128
|
+
${lib_1.chalk.bold('MacOS Photos library')}:\n${folder.macPhotosLibrary}
|
|
2129
|
+
Temporary conversion folder:\n${folder.tempConvertFolder}
|
|
2130
|
+
|
|
2131
|
+
`);
|
|
2132
|
+
if (!folder.skipTerminalMenu) {
|
|
2133
|
+
const proceed = await lib_2.UtilsTerminal.confirm({
|
|
2134
|
+
message: `Proceed with starting the watcher?`,
|
|
2135
|
+
});
|
|
2136
|
+
}
|
|
2137
|
+
//#endregion
|
|
2138
|
+
// ───── MAIN WATCHER ─────────────────────────────────
|
|
2139
|
+
lib_1.chokidar
|
|
2140
|
+
.watch(folder.androidFolder, {
|
|
2141
|
+
//#region watcher options
|
|
2142
|
+
ignored: /(^|[\/\\])\../,
|
|
2143
|
+
persistent: true,
|
|
2144
|
+
ignoreInitial: false,
|
|
2145
|
+
awaitWriteFinish: {
|
|
2146
|
+
stabilityThreshold: STABILIZATION_MS,
|
|
2147
|
+
pollInterval: 500,
|
|
2148
|
+
},
|
|
2149
|
+
// On Windows 11 + MTP devices, native events are unreliable → force polling
|
|
2150
|
+
usePolling: true,
|
|
2151
|
+
interval: 2000,
|
|
2152
|
+
binaryInterval: 3000,
|
|
2153
|
+
//#endregion
|
|
2154
|
+
})
|
|
2155
|
+
.on('add', filePath => {
|
|
2156
|
+
//#region handle add
|
|
2157
|
+
// Clear any old timer
|
|
2158
|
+
if (pending.has(filePath))
|
|
2159
|
+
clearTimeout(pending.get(filePath));
|
|
2160
|
+
// Wait until the file stops growing for STABILIZATION_MS
|
|
2161
|
+
const timer = setTimeout(() => {
|
|
2162
|
+
pending.delete(filePath);
|
|
2163
|
+
safeProcess(filePath);
|
|
2164
|
+
}, STABILIZATION_MS + 1000);
|
|
2165
|
+
pending.set(filePath, timer);
|
|
2166
|
+
//#endregion
|
|
2167
|
+
})
|
|
2168
|
+
.on('change', filePath => {
|
|
2169
|
+
//#region handle change
|
|
2170
|
+
// File is still being written → reset timer
|
|
2171
|
+
if (pending.has(filePath))
|
|
2172
|
+
clearTimeout(pending.get(filePath));
|
|
2173
|
+
pending.set(filePath, setTimeout(() => {
|
|
2174
|
+
pending.delete(filePath);
|
|
2175
|
+
safeProcess(filePath);
|
|
2176
|
+
}, STABILIZATION_MS));
|
|
2177
|
+
//#endregion
|
|
2178
|
+
});
|
|
2179
|
+
//#region log startup info
|
|
2180
|
+
console.log(`Safe watcher started`);
|
|
2181
|
+
console.log(`Android folder : ${watcherData.androidFolder}`);
|
|
2182
|
+
console.log(`macOS Photos : ${watcherData.macPhotosLibrary}`);
|
|
2183
|
+
console.log(`Waiting ${STABILIZATION_MS / 1000}s after file stops growing...`);
|
|
2184
|
+
//#endregion
|
|
2185
|
+
//#endregion
|
|
2186
|
+
};
|
|
2187
|
+
//#endregion
|
|
2188
|
+
//#region is hevc
|
|
2189
|
+
async function isHevc(file) {
|
|
2190
|
+
//#region @backendFunc
|
|
2191
|
+
try {
|
|
2192
|
+
const { stdout } = await execAsync(`ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of csv=p=0 "${file}"`);
|
|
2193
|
+
const codec = stdout.trim(); // ← remove newline
|
|
2194
|
+
return codec === 'hevc' || codec === 'hvc1'; // both mean HEVC/H.265
|
|
2195
|
+
}
|
|
2196
|
+
catch {
|
|
2197
|
+
return false;
|
|
2198
|
+
}
|
|
2199
|
+
//#endregion
|
|
2200
|
+
}
|
|
2201
|
+
//#endregion
|
|
2202
|
+
//#region safe process
|
|
2203
|
+
const safeProcess = async (filePath, wacherData) => {
|
|
2204
|
+
//#region @backendFunc
|
|
2205
|
+
if (wacherData.processed.has(filePath))
|
|
2206
|
+
return;
|
|
2207
|
+
const ext = lib_2.path.extname(filePath).toLowerCase();
|
|
2208
|
+
const stat = await lib_2.fse.stat(filePath);
|
|
2209
|
+
// ───── REJECT OBVIOUS PLACEHOLDERS ─────────────────
|
|
2210
|
+
if (stat.size < 10_000) {
|
|
2211
|
+
console.log(`Skipped tiny/placeholder file: ${lib_2.path.basename(filePath)} (${stat.size} bytes)`);
|
|
2212
|
+
wacherData.processed.add(filePath);
|
|
2213
|
+
return;
|
|
2214
|
+
}
|
|
2215
|
+
// ───── REJECT TOO-SMALL PHOTOS/VIDEOS ───────────────
|
|
2216
|
+
const isVideo = /\.(mp4|mov|avi|mkv|webm)$/i.test(ext);
|
|
2217
|
+
const minSize = isVideo ? MIN_VIDEO_SIZE : MIN_PHOTO_SIZE;
|
|
2218
|
+
if (stat.size < minSize) {
|
|
2219
|
+
console.log(`Still downloading or placeholder → ${lib_2.path.basename(filePath)} (${(stat.size / 1024 / 1024).toFixed(1)} MB)`);
|
|
2220
|
+
return; // don't mark as processed yet — wait for it to grow
|
|
2221
|
+
}
|
|
2222
|
+
wacherData.processed.add(filePath);
|
|
2223
|
+
const filename = lib_2.path.basename(filePath);
|
|
2224
|
+
try {
|
|
2225
|
+
if (ext === '.heic' || ext === '.heif') {
|
|
2226
|
+
// HEIC can be copied directly — Apple Photos loves them
|
|
2227
|
+
await lib_2.fse.copyFile(filePath, lib_2.path.join(wacherData.macPhotosLibrary, filename));
|
|
2228
|
+
console.log(`HEIC copied: ${filename} (${(stat.size / 1024 / 1024).toFixed(1)} MB)`);
|
|
2229
|
+
}
|
|
2230
|
+
else if (isVideo && (await isHevc(filePath))) {
|
|
2231
|
+
const outName = filename.replace(/\.[^.]+$/, '_iphone.mp4');
|
|
2232
|
+
const tempOut = lib_2.path.join(wacherData.tempConvertFolder, outName);
|
|
2233
|
+
console.log(`Converting HEVC → H.264: ${filename} (${(stat.size / 1024 / 1024).toFixed(1)} MB)`);
|
|
2234
|
+
await execAsync(`ffmpeg -i "${filePath}" -c:v libx264 -preset veryfast -crf 18 -pix_fmt yuv420p -movflags +faststart -c:a aac -b:a 192k "${tempOut}" -y`);
|
|
2235
|
+
await lib_2.fse.copyFile(tempOut, lib_2.path.join(wacherData.macPhotosLibrary, outName));
|
|
2236
|
+
console.log(`Converted: ${outName}`);
|
|
2237
|
+
}
|
|
2238
|
+
else {
|
|
2239
|
+
await lib_2.fse.copyFile(filePath, lib_2.path.join(wacherData.macPhotosLibrary, filename));
|
|
2240
|
+
console.log(`Copied: ${filename} (${(stat.size / 1024 / 1024).toFixed(1)} MB)`);
|
|
2241
|
+
}
|
|
2242
|
+
}
|
|
2243
|
+
catch (err) {
|
|
2244
|
+
console.error(`Failed ${filename}:`, err.message);
|
|
2245
|
+
wacherData.processed.delete(filePath); // retry later if it was a temporary error
|
|
2246
|
+
}
|
|
2247
|
+
//#endregion
|
|
2248
|
+
};
|
|
2249
|
+
//#endregion
|
|
2250
|
+
})(UtilsFileSync || (exports.UtilsFileSync = UtilsFileSync = {}));
|
|
2087
2251
|
//# sourceMappingURL=utils.js.map
|