From 96c07d467333d988b85c57294ea55b63a7128b66 Mon Sep 17 00:00:00 2001 From: "Navy.gif" Date: Wed, 12 Apr 2023 21:34:40 +0300 Subject: [PATCH] parallel esm/cjs builds --- package.json | 16 ++++++++-- scripts/declareTypes.js | 3 ++ src/MasterLogger.ts | 2 ++ test/otherProcess.js | 2 +- test/test.cjs | 41 +++++++++++++++++++++++++ tsconfig.cjs.json | 9 ++++++ tsconfig.json | 34 +++++++++++---------- yarn.lock | 66 ++++++++++++++++------------------------- 8 files changed, 114 insertions(+), 59 deletions(-) create mode 100644 scripts/declareTypes.js create mode 100644 test/test.cjs create mode 100644 tsconfig.cjs.json diff --git a/package.json b/package.json index b7e1805..a178d25 100644 --- a/package.json +++ b/package.json @@ -2,13 +2,23 @@ "name": "@navy.gif/logger", "version": "2.0.0", "description": "Logging thing", - "main": "build/index.js", "author": "Navy.gif", "license": "MIT", "private": false, "type": "module", + "main": "build/cjs/index.js", + "module": "build/esm/index.js", + "types": "./build/esm/index.d.ts", + "exports": { + ".": { + "import": "./build/esm/index.js", + "require": "./build/cjs/index.js", + "default": "./build/cjs/index.js", + "types": "./build/esm/index.d.ts" + } + }, "files": [ - "src" + "build/**/*" ], "devDependencies": { "@types/chalk": "^2.2.0", @@ -25,6 +35,6 @@ }, "scripts": { "test": "node test/test.js", - "build": "tsc" + "build": "tsc && tsc -p tsconfig.cjs.json && node ./scripts/declareTypes.js" } } diff --git a/scripts/declareTypes.js b/scripts/declareTypes.js new file mode 100644 index 0000000..22019d6 --- /dev/null +++ b/scripts/declareTypes.js @@ -0,0 +1,3 @@ +import fs from 'node:fs'; +fs.writeFileSync('./build/cjs/package.json', JSON.stringify({ type: 'commonjs' })); +fs.writeFileSync('./build/esm/package.json', JSON.stringify({ type: 'module' })); \ No newline at end of file diff --git a/src/MasterLogger.ts b/src/MasterLogger.ts index 2602fb1..c9de267 100644 --- a/src/MasterLogger.ts +++ b/src/MasterLogger.ts @@ -192,6 +192,8 @@ class MasterLogger { this.#writeStreams[type] = this.loadFile(type); } const nextTime = Math.floor(Date.now() / this.#rotationFreq) * this.#rotationFreq + this.#rotationFreq; + if (this.#rotateTO) + clearTimeout(this.#rotateTO); this.#rotateTO = setTimeout(this.rotateLogFiles.bind(this), nextTime - Date.now()); } diff --git a/test/otherProcess.js b/test/otherProcess.js index bc9ebf5..6243474 100644 --- a/test/otherProcess.js +++ b/test/otherProcess.js @@ -1,5 +1,5 @@ // const { LoggerClient } = require('../'); -import { LoggerClient } from "../build/index.js"; +import { LoggerClient } from "../build/esm/index.js"; const logger = new LoggerClient({ customTypes: [ 'access' ], diff --git a/test/test.cjs b/test/test.cjs new file mode 100644 index 0000000..9454e8f --- /dev/null +++ b/test/test.cjs @@ -0,0 +1,41 @@ +// eslint-disable-next-line @typescript-eslint/no-var-requires +const { MasterLogger } = require('../build/cjs'); +const logger = new MasterLogger({ + debug: true, + customTypes: [ 'access' ], + customStreams: [ 'access' ], + customTypeMapping: { access: 'access', warn: 'error' }, + customColors: { + access: 'green', + // error: '#FF0000' + }, + fileRotationFreq: 0.0001, + logLevelMapping: { access: 2 }, + broadcastLevel: 3, + webhook: { + url: 'https://discord.com/api/webhooks/1093874668886294548/uDMRD6g1lmq_2EZynsbKytzWoMM-0N4te0m61r_cv1BsSnDKDxG3fvI6sxSoG5t5b_xn' + } +}); +console.log(logger); +logger.info('Test'); + +const spawn = (child) => { + return new Promise((resolve) => { + child.once('spawn', resolve); + }); + +}; + +// eslint-disable-next-line @typescript-eslint/no-var-requires +const ChildProcess = require('node:child_process'); +const main = async () => { + const child = ChildProcess.fork('./test/otherProcess.js'); + logger.attach(child); + await spawn(child); + + for (let i = 0; i < 10; i++) { + await new Promise((resolve) => setTimeout(resolve, 1000)); + logger.info(`Iteration ${i}`); + } +}; +main(); \ No newline at end of file diff --git a/tsconfig.cjs.json b/tsconfig.cjs.json new file mode 100644 index 0000000..b7793b7 --- /dev/null +++ b/tsconfig.cjs.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "declaration": false, + "sourceMap": false, + "module": "CommonJS", + "outDir": "./build/cjs" + } +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index acfd72c..d66d92c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,7 +12,7 @@ /* Language and Environment */ "target": "ES2022", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + "lib": ["ES2022"], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ // "jsx": "preserve", /* Specify what JSX code is generated. */ // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ @@ -27,11 +27,14 @@ /* Modules */ "module": "ES2022", /* Specify what module code is generated. */ // "rootDir": "./", /* Specify the root folder within your source files. */ - "moduleResolution": "nodenext", /* Specify how TypeScript looks up a file from a given module specifier. */ + "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + "typeRoots": [ + "./node_modules/@types", + "./@types" + ], /* Specify multiple folders that act like './node_modules/@types'. */ // "types": [], /* Specify type package names to be included without being referenced in a source file. */ // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ @@ -44,7 +47,7 @@ // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + "allowJs": false, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ @@ -52,10 +55,10 @@ "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ // "declarationMap": true, /* Create sourcemaps for d.ts files. */ // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + "sourceMap": true, /* Create source map files for emitted JavaScript files. */ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - "outDir": "./build", /* Specify an output folder for all emitted files. */ + "outDir": "./build/esm", /* Specify an output folder for all emitted files. */ // "removeComments": true, /* Disable emitting comments. */ // "noEmit": true, /* Disable emitting files from a compilation. */ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ @@ -66,7 +69,7 @@ // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ @@ -83,19 +86,19 @@ /* Type Checking */ "strict": true, /* Enable all strict type-checking options. */ - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ @@ -105,5 +108,6 @@ /* Completeness */ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ "skipLibCheck": true /* Skip type checking all .d.ts files. */ - } + }, + "compileOnSave": true } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 54fd2f2..672f261 100644 --- a/yarn.lock +++ b/yarn.lock @@ -49,11 +49,11 @@ integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@navy.gif/discord-webhook@^1.0.0": - version "1.1.0" - resolved "https://registry.corgi.wtf/@navy.gif/discord-webhook/-/discord-webhook-1.1.0.tgz#b3f980bc42663ff1617c3756ce6c9184bc2a48f3" - integrity sha512-+aJOfZD5kRoxEWU+sDAjX4qSRZ7vTPDBuFd6MsoaWC7ZSjSFuDqryyumBCs+w0EKU94xdxoH2qQ8ebFZ//ZugQ== + version "1.2.0" + resolved "https://registry.corgi.wtf/@navy.gif/discord-webhook/-/discord-webhook-1.2.0.tgz#cb2780c7d3f09c6b49958459d9f01e45f3f187af" + integrity sha512-fGwzHkOB9XMc+dCHZGyMUtc/SzNnowC/MGt0Tr6Vwx5EVyO7TQe+1lB44yrOMsjdNpJg6Kp0x5tgQOLHqKlJzA== dependencies: - node-fetch "^3.3.1" + node-fetch "2" "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -288,11 +288,6 @@ cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" -data-uri-to-buffer@^4.0.0: - version "4.0.1" - resolved "https://registry.corgi.wtf/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" - integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== - debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.corgi.wtf/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" @@ -473,14 +468,6 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" -fetch-blob@^3.1.2, fetch-blob@^3.1.4: - version "3.2.0" - resolved "https://registry.corgi.wtf/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" - integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== - dependencies: - node-domexception "^1.0.0" - web-streams-polyfill "^3.0.3" - file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.corgi.wtf/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -516,13 +503,6 @@ flatted@^3.1.0: resolved "https://registry.corgi.wtf/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== -formdata-polyfill@^4.0.10: - version "4.0.10" - resolved "https://registry.corgi.wtf/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" - integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== - dependencies: - fetch-blob "^3.1.2" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.corgi.wtf/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -730,19 +710,12 @@ natural-compare@^1.4.0: resolved "https://registry.corgi.wtf/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -node-domexception@^1.0.0: - version "1.0.0" - resolved "https://registry.corgi.wtf/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" - integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== - -node-fetch@^3.3.1: - version "3.3.1" - resolved "https://registry.corgi.wtf/node-fetch/-/node-fetch-3.3.1.tgz#b3eea7b54b3a48020e46f4f88b9c5a7430d20b2e" - integrity sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow== +node-fetch@2: + version "2.6.9" + resolved "https://registry.corgi.wtf/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" + integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== dependencies: - data-uri-to-buffer "^4.0.0" - fetch-blob "^3.1.4" - formdata-polyfill "^4.0.10" + whatwg-url "^5.0.0" once@^1.3.0: version "1.4.0" @@ -908,6 +881,11 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.corgi.wtf/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + tslib@^1.8.1: version "1.14.1" resolved "https://registry.corgi.wtf/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" @@ -944,10 +922,18 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -web-streams-polyfill@^3.0.3: - version "3.2.1" - resolved "https://registry.corgi.wtf/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" - integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.corgi.wtf/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.corgi.wtf/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" which@^2.0.1: version "2.0.2"