Compare commits

..

17 Commits

Author SHA1 Message Date
standardci
023f90456b chore(release): publish
- @standardnotes/scheduler-server@1.1.0-alpha.4
2022-06-21 12:27:23 +00:00
Karol Sójko
16f6b902d9 Merge branch 'develop' of github.com:standardnotes/server into develop 2022-06-21 14:26:21 +02:00
Karol Sójko
c62ff8f5c9 fix: linter setup 2022-06-21 14:25:56 +02:00
Karol Sójko
1a8670cdaa fix: jest setup 2022-06-21 14:04:58 +02:00
Karol Sójko
c205ebb710 fix: docker image building 2022-06-21 13:53:26 +02:00
Karol Sójko
5e54617325 fix: bump shared deps 2022-06-21 11:26:15 +02:00
Karol Sójko
6e1e6fa291 fix: typescript setup 2022-06-21 11:25:52 +02:00
Karol Sójko
79926bb77d fix: add pnp gitignore setup with zero installs 2022-06-21 11:24:01 +02:00
Karol Sójko
a40bbf4872 fix: add pnp setup 2022-06-21 11:23:39 +02:00
Karol Sójko
8647a484f4 fix: add vscode yarn sdks 2022-06-21 11:22:55 +02:00
Karol Sójko
dcd32e7601 fix: cached dependencies 2022-06-21 11:22:35 +02:00
standardci
0eaf1a593d chore(release): publish
- @standardnotes/scheduler-server@1.1.0-alpha.3
2022-06-20 10:50:54 +00:00
Karol Sójko
1c4c609865 fix: add default value for db migrations path 2022-06-20 12:50:10 +02:00
Karol Sójko
17a0c9fd24 fix: install and build app locally before adding to docker image 2022-06-20 12:39:34 +02:00
standardci
dd3ea0bfb5 chore(release): publish
- @standardnotes/scheduler-server@1.1.0-alpha.2
2022-06-20 10:34:31 +00:00
Karol Sójko
a982c78541 fix: docker building for scheduler 2022-06-20 12:33:50 +02:00
Karol Sójko
49093923ca fix: testing script for scheduler 2022-06-20 11:33:18 +02:00
68 changed files with 21252 additions and 286 deletions

56
.eslintrc Normal file
View File

@@ -0,0 +1,56 @@
{
"root": true,
"parser": "@typescript-eslint/parser",
"parserOptions": {
"project": "./tsconfig.json"
},
"plugins": ["@typescript-eslint", "prettier"],
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended",
"prettier"
],
"rules": {
"@typescript-eslint/no-unused-vars": [
"error",
{
"vars": "all",
"args": "after-used",
"ignoreRestSiblings": false,
"argsIgnorePattern": "^_",
"varsIgnorePattern": "^_"
}
],
"@typescript-eslint/no-explicit-any": ["error", { "ignoreRestArgs": true }],
"@typescript-eslint/no-floating-promises": ["error"],
"block-scoped-var": "error",
"comma-dangle": ["error", "always-multiline"],
"curly": ["error", "all"],
"no-confusing-arrow": "error",
"no-inline-comments": "warn",
"no-invalid-this": "error",
"no-return-assign": "warn",
"no-constructor-return": "error",
"no-duplicate-imports": "error",
"no-self-compare": "error",
"no-console": ["error", { "allow": ["warn", "error"] }],
"no-unmodified-loop-condition": "error",
"no-unused-private-class-members": "error",
"object-curly-spacing": ["error", "always"],
"quotes": ["error", "single", { "avoidEscape": true }],
"semi": ["error", "never"],
"prettier/prettier": [
"error",
{
"singleQuote": true,
"trailingComma": "all",
"printWidth": 120,
"semi": false
},
{
"usePrettierrc": false
}
]
}
}

View File

@@ -13,9 +13,6 @@ on:
jobs:
test:
defaults:
run:
working-directory: packages/scheduler
runs-on: ubuntu-latest
steps:
@@ -23,20 +20,15 @@ jobs:
- uses: actions/setup-node@v1
with:
node-version: '16.x'
- run: yarn install
- run: yarn test
- run: yarn test:scheduler
publish-aws-ecr:
needs: test
defaults:
run:
working-directory: packages/scheduler
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: cp .env.sample .env
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
@@ -53,7 +45,7 @@ jobs:
ECR_REPOSITORY: scheduler-worker
IMAGE_TAG: ${{ github.sha }}
run: |
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
yarn docker build @standardnotes/scheduler-server -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
docker tag $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG $ECR_REGISTRY/$ECR_REPOSITORY:dev
docker push $ECR_REGISTRY/$ECR_REPOSITORY:dev
@@ -61,31 +53,30 @@ jobs:
publish-docker-hub:
needs: test
defaults:
run:
working-directory: packages/scheduler
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: cp .env.sample .env
- name: Publish to Registry
env:
DOCKER_BUILDKIT: 1
COMPOSE_DOCKER_CLI_BUILD: 1
uses: elgohr/Publish-Docker-Github-Action@master
- name: Build image
run: yarn docker build @standardnotes/scheduler-server -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
- name: Publish to Registry (dev tag)
uses: manusa/actions-publish-docker@v1.1.2
with:
name: standardnotes/scheduler
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
tags: "dev,${{ github.sha }}"
tag: "dev"
- name: Publish to Registry (sha tag)
uses: manusa/actions-publish-docker@v1.1.2
with:
name: standardnotes/scheduler
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
tag: "${{ github.sha }}"
deploy-worker:
needs: publish-aws-ecr
defaults:
run:
working-directory: packages/scheduler
runs-on: ubuntu-latest
steps:
@@ -119,9 +110,6 @@ jobs:
newrelic:
needs: [ deploy-worker ]
defaults:
run:
working-directory: packages/scheduler
runs-on: ubuntu-latest
steps:
@@ -138,9 +126,6 @@ jobs:
notify_discord:
needs: [ deploy-worker ]
defaults:
run:
working-directory: packages/scheduler
runs-on: ubuntu-latest
steps:

View File

@@ -32,7 +32,7 @@ jobs:
with:
node-version: '16.x'
- run: yarn install
- run: yarn install --immutable
- name: Bump Prod Version
if: ${{ github.ref == 'refs/heads/main' }}

6
.gitignore vendored
View File

@@ -8,11 +8,11 @@ coverage
.env
newrelic_agent.log
**/.pnp.*
**/.yarn/*
.yarn/*
!.yarn/cache
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/unplugged
!.yarn/sdks
!.yarn/versions
!.yarn/cache

19990
.pnp.cjs generated Executable file

File diff suppressed because one or more lines are too long

271
.pnp.loader.mjs generated Normal file
View File

@@ -0,0 +1,271 @@
import { URL, fileURLToPath, pathToFileURL } from 'url';
import fs from 'fs';
import path from 'path';
import moduleExports, { Module } from 'module';
var PathType;
(function(PathType2) {
PathType2[PathType2["File"] = 0] = "File";
PathType2[PathType2["Portable"] = 1] = "Portable";
PathType2[PathType2["Native"] = 2] = "Native";
})(PathType || (PathType = {}));
const npath = Object.create(path);
const ppath = Object.create(path.posix);
npath.cwd = () => process.cwd();
ppath.cwd = () => toPortablePath(process.cwd());
ppath.resolve = (...segments) => {
if (segments.length > 0 && ppath.isAbsolute(segments[0])) {
return path.posix.resolve(...segments);
} else {
return path.posix.resolve(ppath.cwd(), ...segments);
}
};
const contains = function(pathUtils, from, to) {
from = pathUtils.normalize(from);
to = pathUtils.normalize(to);
if (from === to)
return `.`;
if (!from.endsWith(pathUtils.sep))
from = from + pathUtils.sep;
if (to.startsWith(from)) {
return to.slice(from.length);
} else {
return null;
}
};
npath.fromPortablePath = fromPortablePath;
npath.toPortablePath = toPortablePath;
npath.contains = (from, to) => contains(npath, from, to);
ppath.contains = (from, to) => contains(ppath, from, to);
const WINDOWS_PATH_REGEXP = /^([a-zA-Z]:.*)$/;
const UNC_WINDOWS_PATH_REGEXP = /^\/\/(\.\/)?(.*)$/;
const PORTABLE_PATH_REGEXP = /^\/([a-zA-Z]:.*)$/;
const UNC_PORTABLE_PATH_REGEXP = /^\/unc\/(\.dot\/)?(.*)$/;
function fromPortablePath(p) {
if (process.platform !== `win32`)
return p;
let portablePathMatch, uncPortablePathMatch;
if (portablePathMatch = p.match(PORTABLE_PATH_REGEXP))
p = portablePathMatch[1];
else if (uncPortablePathMatch = p.match(UNC_PORTABLE_PATH_REGEXP))
p = `\\\\${uncPortablePathMatch[1] ? `.\\` : ``}${uncPortablePathMatch[2]}`;
else
return p;
return p.replace(/\//g, `\\`);
}
function toPortablePath(p) {
if (process.platform !== `win32`)
return p;
p = p.replace(/\\/g, `/`);
let windowsPathMatch, uncWindowsPathMatch;
if (windowsPathMatch = p.match(WINDOWS_PATH_REGEXP))
p = `/${windowsPathMatch[1]}`;
else if (uncWindowsPathMatch = p.match(UNC_WINDOWS_PATH_REGEXP))
p = `/unc/${uncWindowsPathMatch[1] ? `.dot/` : ``}${uncWindowsPathMatch[2]}`;
return p;
}
const builtinModules = new Set(Module.builtinModules || Object.keys(process.binding(`natives`)));
const isBuiltinModule = (request) => request.startsWith(`node:`) || builtinModules.has(request);
function readPackageScope(checkPath) {
const rootSeparatorIndex = checkPath.indexOf(npath.sep);
let separatorIndex;
do {
separatorIndex = checkPath.lastIndexOf(npath.sep);
checkPath = checkPath.slice(0, separatorIndex);
if (checkPath.endsWith(`${npath.sep}node_modules`))
return false;
const pjson = readPackage(checkPath + npath.sep);
if (pjson) {
return {
data: pjson,
path: checkPath
};
}
} while (separatorIndex > rootSeparatorIndex);
return false;
}
function readPackage(requestPath) {
const jsonPath = npath.resolve(requestPath, `package.json`);
if (!fs.existsSync(jsonPath))
return null;
return JSON.parse(fs.readFileSync(jsonPath, `utf8`));
}
async function tryReadFile(path2) {
try {
return await fs.promises.readFile(path2, `utf8`);
} catch (error) {
if (error.code === `ENOENT`)
return null;
throw error;
}
}
function tryParseURL(str, base) {
try {
return new URL(str, base);
} catch {
return null;
}
}
let entrypointPath = null;
function setEntrypointPath(file) {
entrypointPath = file;
}
function getFileFormat(filepath) {
var _a, _b;
const ext = path.extname(filepath);
switch (ext) {
case `.mjs`: {
return `module`;
}
case `.cjs`: {
return `commonjs`;
}
case `.wasm`: {
throw new Error(`Unknown file extension ".wasm" for ${filepath}`);
}
case `.json`: {
throw new Error(`Unknown file extension ".json" for ${filepath}`);
}
case `.js`: {
const pkg = readPackageScope(filepath);
if (!pkg)
return `commonjs`;
return (_a = pkg.data.type) != null ? _a : `commonjs`;
}
default: {
if (entrypointPath !== filepath)
return null;
const pkg = readPackageScope(filepath);
if (!pkg)
return `commonjs`;
if (pkg.data.type === `module`)
return null;
return (_b = pkg.data.type) != null ? _b : `commonjs`;
}
}
}
async function getFormat$1(resolved, context, defaultGetFormat) {
const url = tryParseURL(resolved);
if ((url == null ? void 0 : url.protocol) !== `file:`)
return defaultGetFormat(resolved, context, defaultGetFormat);
const format = getFileFormat(fileURLToPath(url));
if (format) {
return {
format
};
}
return defaultGetFormat(resolved, context, defaultGetFormat);
}
async function getSource$1(urlString, context, defaultGetSource) {
const url = tryParseURL(urlString);
if ((url == null ? void 0 : url.protocol) !== `file:`)
return defaultGetSource(urlString, context, defaultGetSource);
return {
source: await fs.promises.readFile(fileURLToPath(url), `utf8`)
};
}
async function load$1(urlString, context, defaultLoad) {
const url = tryParseURL(urlString);
if ((url == null ? void 0 : url.protocol) !== `file:`)
return defaultLoad(urlString, context, defaultLoad);
const filePath = fileURLToPath(url);
const format = getFileFormat(filePath);
if (!format)
return defaultLoad(urlString, context, defaultLoad);
return {
format,
source: await fs.promises.readFile(filePath, `utf8`)
};
}
const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/;
const isRelativeRegexp = /^\.{0,2}\//;
async function resolve$1(originalSpecifier, context, defaultResolver) {
var _a;
const {findPnpApi} = moduleExports;
if (!findPnpApi || isBuiltinModule(originalSpecifier))
return defaultResolver(originalSpecifier, context, defaultResolver);
let specifier = originalSpecifier;
const url = tryParseURL(specifier, isRelativeRegexp.test(specifier) ? context.parentURL : void 0);
if (url) {
if (url.protocol !== `file:`)
return defaultResolver(originalSpecifier, context, defaultResolver);
specifier = fileURLToPath(url);
}
const {parentURL, conditions = []} = context;
const issuer = parentURL ? fileURLToPath(parentURL) : process.cwd();
const pnpapi = (_a = findPnpApi(issuer)) != null ? _a : url ? findPnpApi(specifier) : null;
if (!pnpapi)
return defaultResolver(originalSpecifier, context, defaultResolver);
const dependencyNameMatch = specifier.match(pathRegExp);
let allowLegacyResolve = false;
if (dependencyNameMatch) {
const [, dependencyName, subPath] = dependencyNameMatch;
if (subPath === ``) {
const resolved = pnpapi.resolveToUnqualified(`${dependencyName}/package.json`, issuer);
if (resolved) {
const content = await tryReadFile(resolved);
if (content) {
const pkg = JSON.parse(content);
allowLegacyResolve = pkg.exports == null;
}
}
}
}
const result = pnpapi.resolveRequest(specifier, issuer, {
conditions: new Set(conditions),
extensions: allowLegacyResolve ? void 0 : []
});
if (!result)
throw new Error(`Resolving '${specifier}' from '${issuer}' failed`);
const resultURL = pathToFileURL(result);
if (url) {
resultURL.search = url.search;
resultURL.hash = url.hash;
}
if (!parentURL)
setEntrypointPath(fileURLToPath(resultURL));
return {
url: resultURL.href
};
}
const binding = process.binding(`fs`);
const originalfstat = binding.fstat;
const ZIP_FD = 2147483648;
binding.fstat = function(...args) {
const [fd, useBigint, req] = args;
if ((fd & ZIP_FD) !== 0 && useBigint === false && req === void 0) {
try {
const stats = fs.fstatSync(fd);
return new Float64Array([
stats.dev,
stats.mode,
stats.nlink,
stats.uid,
stats.gid,
stats.rdev,
stats.blksize,
stats.ino,
stats.size,
stats.blocks
]);
} catch {
}
}
return originalfstat.apply(this, args);
};
const [major, minor] = process.versions.node.split(`.`).map((value) => parseInt(value, 10));
const hasConsolidatedHooks = major > 16 || major === 16 && minor >= 12;
const resolve = resolve$1;
const getFormat = hasConsolidatedHooks ? void 0 : getFormat$1;
const getSource = hasConsolidatedHooks ? void 0 : getSource$1;
const load = hasConsolidatedHooks ? load$1 : void 0;
export { getFormat, getSource, load, resolve };

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

20
.yarn/sdks/eslint/bin/eslint.js vendored Executable file
View File

@@ -0,0 +1,20 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire, createRequireFromPath} = require(`module`);
const {resolve} = require(`path`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absRequire = (createRequire || createRequireFromPath)(absPnpApiPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require eslint/bin/eslint.js
require(absPnpApiPath).setup();
}
}
// Defer to the real eslint/bin/eslint.js your application uses
module.exports = absRequire(`eslint/bin/eslint.js`);

20
.yarn/sdks/eslint/lib/api.js vendored Normal file
View File

@@ -0,0 +1,20 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire, createRequireFromPath} = require(`module`);
const {resolve} = require(`path`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absRequire = (createRequire || createRequireFromPath)(absPnpApiPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require eslint
require(absPnpApiPath).setup();
}
}
// Defer to the real eslint your application uses
module.exports = absRequire(`eslint`);

6
.yarn/sdks/eslint/package.json vendored Normal file
View File

@@ -0,0 +1,6 @@
{
"name": "eslint",
"version": "8.18.0-sdk",
"main": "./lib/api.js",
"type": "commonjs"
}

5
.yarn/sdks/integrations.yml vendored Normal file
View File

@@ -0,0 +1,5 @@
# This file is automatically generated by @yarnpkg/sdks.
# Manual changes might be lost!
integrations:
- vscode

20
.yarn/sdks/prettier/index.js vendored Executable file
View File

@@ -0,0 +1,20 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire, createRequireFromPath} = require(`module`);
const {resolve} = require(`path`);
const relPnpApiPath = "../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absRequire = (createRequire || createRequireFromPath)(absPnpApiPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require prettier/index.js
require(absPnpApiPath).setup();
}
}
// Defer to the real prettier/index.js your application uses
module.exports = absRequire(`prettier/index.js`);

6
.yarn/sdks/prettier/package.json vendored Normal file
View File

@@ -0,0 +1,6 @@
{
"name": "prettier",
"version": "2.7.1-sdk",
"main": "./index.js",
"type": "commonjs"
}

20
.yarn/sdks/typescript/bin/tsc vendored Executable file
View File

@@ -0,0 +1,20 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire, createRequireFromPath} = require(`module`);
const {resolve} = require(`path`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absRequire = (createRequire || createRequireFromPath)(absPnpApiPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require typescript/bin/tsc
require(absPnpApiPath).setup();
}
}
// Defer to the real typescript/bin/tsc your application uses
module.exports = absRequire(`typescript/bin/tsc`);

20
.yarn/sdks/typescript/bin/tsserver vendored Executable file
View File

@@ -0,0 +1,20 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire, createRequireFromPath} = require(`module`);
const {resolve} = require(`path`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absRequire = (createRequire || createRequireFromPath)(absPnpApiPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require typescript/bin/tsserver
require(absPnpApiPath).setup();
}
}
// Defer to the real typescript/bin/tsserver your application uses
module.exports = absRequire(`typescript/bin/tsserver`);

20
.yarn/sdks/typescript/lib/tsc.js vendored Normal file
View File

@@ -0,0 +1,20 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire, createRequireFromPath} = require(`module`);
const {resolve} = require(`path`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absRequire = (createRequire || createRequireFromPath)(absPnpApiPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require typescript/lib/tsc.js
require(absPnpApiPath).setup();
}
}
// Defer to the real typescript/lib/tsc.js your application uses
module.exports = absRequire(`typescript/lib/tsc.js`);

223
.yarn/sdks/typescript/lib/tsserver.js vendored Normal file
View File

@@ -0,0 +1,223 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire, createRequireFromPath} = require(`module`);
const {resolve} = require(`path`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absRequire = (createRequire || createRequireFromPath)(absPnpApiPath);
const moduleWrapper = tsserver => {
if (!process.versions.pnp) {
return tsserver;
}
const {isAbsolute} = require(`path`);
const pnpApi = require(`pnpapi`);
const isVirtual = str => str.match(/\/(\$\$virtual|__virtual__)\//);
const isPortal = str => str.startsWith("portal:/");
const normalize = str => str.replace(/\\/g, `/`).replace(/^\/?/, `/`);
const dependencyTreeRoots = new Set(pnpApi.getDependencyTreeRoots().map(locator => {
return `${locator.name}@${locator.reference}`;
}));
// VSCode sends the zip paths to TS using the "zip://" prefix, that TS
// doesn't understand. This layer makes sure to remove the protocol
// before forwarding it to TS, and to add it back on all returned paths.
function toEditorPath(str) {
// We add the `zip:` prefix to both `.zip/` paths and virtual paths
if (isAbsolute(str) && !str.match(/^\^?(zip:|\/zip\/)/) && (str.match(/\.zip\//) || isVirtual(str))) {
// We also take the opportunity to turn virtual paths into physical ones;
// this makes it much easier to work with workspaces that list peer
// dependencies, since otherwise Ctrl+Click would bring us to the virtual
// file instances instead of the real ones.
//
// We only do this to modules owned by the the dependency tree roots.
// This avoids breaking the resolution when jumping inside a vendor
// with peer dep (otherwise jumping into react-dom would show resolution
// errors on react).
//
const resolved = isVirtual(str) ? pnpApi.resolveVirtual(str) : str;
if (resolved) {
const locator = pnpApi.findPackageLocator(resolved);
if (locator && (dependencyTreeRoots.has(`${locator.name}@${locator.reference}`) || isPortal(locator.reference))) {
str = resolved;
}
}
str = normalize(str);
if (str.match(/\.zip\//)) {
switch (hostInfo) {
// Absolute VSCode `Uri.fsPath`s need to start with a slash.
// VSCode only adds it automatically for supported schemes,
// so we have to do it manually for the `zip` scheme.
// The path needs to start with a caret otherwise VSCode doesn't handle the protocol
//
// Ref: https://github.com/microsoft/vscode/issues/105014#issuecomment-686760910
//
// 2021-10-08: VSCode changed the format in 1.61.
// Before | ^zip:/c:/foo/bar.zip/package.json
// After | ^/zip//c:/foo/bar.zip/package.json
//
// 2022-04-06: VSCode changed the format in 1.66.
// Before | ^/zip//c:/foo/bar.zip/package.json
// After | ^/zip/c:/foo/bar.zip/package.json
//
// 2022-05-06: VSCode changed the format in 1.68
// Before | ^/zip/c:/foo/bar.zip/package.json
// After | ^/zip//c:/foo/bar.zip/package.json
//
case `vscode <1.61`: {
str = `^zip:${str}`;
} break;
case `vscode <1.66`: {
str = `^/zip/${str}`;
} break;
case `vscode <1.68`: {
str = `^/zip${str}`;
} break;
case `vscode`: {
str = `^/zip/${str}`;
} break;
// To make "go to definition" work,
// We have to resolve the actual file system path from virtual path
// and convert scheme to supported by [vim-rzip](https://github.com/lbrayner/vim-rzip)
case `coc-nvim`: {
str = normalize(resolved).replace(/\.zip\//, `.zip::`);
str = resolve(`zipfile:${str}`);
} break;
// Support neovim native LSP and [typescript-language-server](https://github.com/theia-ide/typescript-language-server)
// We have to resolve the actual file system path from virtual path,
// everything else is up to neovim
case `neovim`: {
str = normalize(resolved).replace(/\.zip\//, `.zip::`);
str = `zipfile://${str}`;
} break;
default: {
str = `zip:${str}`;
} break;
}
}
}
return str;
}
function fromEditorPath(str) {
switch (hostInfo) {
case `coc-nvim`: {
str = str.replace(/\.zip::/, `.zip/`);
// The path for coc-nvim is in format of /<pwd>/zipfile:/<pwd>/.yarn/...
// So in order to convert it back, we use .* to match all the thing
// before `zipfile:`
return process.platform === `win32`
? str.replace(/^.*zipfile:\//, ``)
: str.replace(/^.*zipfile:/, ``);
} break;
case `neovim`: {
str = str.replace(/\.zip::/, `.zip/`);
// The path for neovim is in format of zipfile:///<pwd>/.yarn/...
return str.replace(/^zipfile:\/\//, ``);
} break;
case `vscode`:
default: {
return str.replace(/^\^?(zip:|\/zip(\/ts-nul-authority)?)\/+/, process.platform === `win32` ? `` : `/`)
} break;
}
}
// Force enable 'allowLocalPluginLoads'
// TypeScript tries to resolve plugins using a path relative to itself
// which doesn't work when using the global cache
// https://github.com/microsoft/TypeScript/blob/1b57a0395e0bff191581c9606aab92832001de62/src/server/project.ts#L2238
// VSCode doesn't want to enable 'allowLocalPluginLoads' due to security concerns but
// TypeScript already does local loads and if this code is running the user trusts the workspace
// https://github.com/microsoft/vscode/issues/45856
const ConfiguredProject = tsserver.server.ConfiguredProject;
const {enablePluginsWithOptions: originalEnablePluginsWithOptions} = ConfiguredProject.prototype;
ConfiguredProject.prototype.enablePluginsWithOptions = function() {
this.projectService.allowLocalPluginLoads = true;
return originalEnablePluginsWithOptions.apply(this, arguments);
};
// And here is the point where we hijack the VSCode <-> TS communications
// by adding ourselves in the middle. We locate everything that looks
// like an absolute path of ours and normalize it.
const Session = tsserver.server.Session;
const {onMessage: originalOnMessage, send: originalSend} = Session.prototype;
let hostInfo = `unknown`;
Object.assign(Session.prototype, {
onMessage(/** @type {string | object} */ message) {
const isStringMessage = typeof message === 'string';
const parsedMessage = isStringMessage ? JSON.parse(message) : message;
if (
parsedMessage != null &&
typeof parsedMessage === `object` &&
parsedMessage.arguments &&
typeof parsedMessage.arguments.hostInfo === `string`
) {
hostInfo = parsedMessage.arguments.hostInfo;
if (hostInfo === `vscode` && process.env.VSCODE_IPC_HOOK) {
const [, major, minor] = (process.env.VSCODE_IPC_HOOK.match(
// The RegExp from https://semver.org/ but without the caret at the start
/(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/
) ?? []).map(Number)
if (major === 1) {
if (minor < 61) {
hostInfo += ` <1.61`;
} else if (minor < 66) {
hostInfo += ` <1.66`;
} else if (minor < 68) {
hostInfo += ` <1.68`;
}
}
}
}
const processedMessageJSON = JSON.stringify(parsedMessage, (key, value) => {
return typeof value === 'string' ? fromEditorPath(value) : value;
});
return originalOnMessage.call(
this,
isStringMessage ? processedMessageJSON : JSON.parse(processedMessageJSON)
);
},
send(/** @type {any} */ msg) {
return originalSend.call(this, JSON.parse(JSON.stringify(msg, (key, value) => {
return typeof value === `string` ? toEditorPath(value) : value;
})));
}
});
return tsserver;
};
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require typescript/lib/tsserver.js
require(absPnpApiPath).setup();
}
}
// Defer to the real typescript/lib/tsserver.js your application uses
module.exports = moduleWrapper(absRequire(`typescript/lib/tsserver.js`));

View File

@@ -0,0 +1,223 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire, createRequireFromPath} = require(`module`);
const {resolve} = require(`path`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absRequire = (createRequire || createRequireFromPath)(absPnpApiPath);
const moduleWrapper = tsserver => {
if (!process.versions.pnp) {
return tsserver;
}
const {isAbsolute} = require(`path`);
const pnpApi = require(`pnpapi`);
const isVirtual = str => str.match(/\/(\$\$virtual|__virtual__)\//);
const isPortal = str => str.startsWith("portal:/");
const normalize = str => str.replace(/\\/g, `/`).replace(/^\/?/, `/`);
const dependencyTreeRoots = new Set(pnpApi.getDependencyTreeRoots().map(locator => {
return `${locator.name}@${locator.reference}`;
}));
// VSCode sends the zip paths to TS using the "zip://" prefix, that TS
// doesn't understand. This layer makes sure to remove the protocol
// before forwarding it to TS, and to add it back on all returned paths.
function toEditorPath(str) {
// We add the `zip:` prefix to both `.zip/` paths and virtual paths
if (isAbsolute(str) && !str.match(/^\^?(zip:|\/zip\/)/) && (str.match(/\.zip\//) || isVirtual(str))) {
// We also take the opportunity to turn virtual paths into physical ones;
// this makes it much easier to work with workspaces that list peer
// dependencies, since otherwise Ctrl+Click would bring us to the virtual
// file instances instead of the real ones.
//
// We only do this to modules owned by the the dependency tree roots.
// This avoids breaking the resolution when jumping inside a vendor
// with peer dep (otherwise jumping into react-dom would show resolution
// errors on react).
//
const resolved = isVirtual(str) ? pnpApi.resolveVirtual(str) : str;
if (resolved) {
const locator = pnpApi.findPackageLocator(resolved);
if (locator && (dependencyTreeRoots.has(`${locator.name}@${locator.reference}`) || isPortal(locator.reference))) {
str = resolved;
}
}
str = normalize(str);
if (str.match(/\.zip\//)) {
switch (hostInfo) {
// Absolute VSCode `Uri.fsPath`s need to start with a slash.
// VSCode only adds it automatically for supported schemes,
// so we have to do it manually for the `zip` scheme.
// The path needs to start with a caret otherwise VSCode doesn't handle the protocol
//
// Ref: https://github.com/microsoft/vscode/issues/105014#issuecomment-686760910
//
// 2021-10-08: VSCode changed the format in 1.61.
// Before | ^zip:/c:/foo/bar.zip/package.json
// After | ^/zip//c:/foo/bar.zip/package.json
//
// 2022-04-06: VSCode changed the format in 1.66.
// Before | ^/zip//c:/foo/bar.zip/package.json
// After | ^/zip/c:/foo/bar.zip/package.json
//
// 2022-05-06: VSCode changed the format in 1.68
// Before | ^/zip/c:/foo/bar.zip/package.json
// After | ^/zip//c:/foo/bar.zip/package.json
//
case `vscode <1.61`: {
str = `^zip:${str}`;
} break;
case `vscode <1.66`: {
str = `^/zip/${str}`;
} break;
case `vscode <1.68`: {
str = `^/zip${str}`;
} break;
case `vscode`: {
str = `^/zip/${str}`;
} break;
// To make "go to definition" work,
// We have to resolve the actual file system path from virtual path
// and convert scheme to supported by [vim-rzip](https://github.com/lbrayner/vim-rzip)
case `coc-nvim`: {
str = normalize(resolved).replace(/\.zip\//, `.zip::`);
str = resolve(`zipfile:${str}`);
} break;
// Support neovim native LSP and [typescript-language-server](https://github.com/theia-ide/typescript-language-server)
// We have to resolve the actual file system path from virtual path,
// everything else is up to neovim
case `neovim`: {
str = normalize(resolved).replace(/\.zip\//, `.zip::`);
str = `zipfile://${str}`;
} break;
default: {
str = `zip:${str}`;
} break;
}
}
}
return str;
}
function fromEditorPath(str) {
switch (hostInfo) {
case `coc-nvim`: {
str = str.replace(/\.zip::/, `.zip/`);
// The path for coc-nvim is in format of /<pwd>/zipfile:/<pwd>/.yarn/...
// So in order to convert it back, we use .* to match all the thing
// before `zipfile:`
return process.platform === `win32`
? str.replace(/^.*zipfile:\//, ``)
: str.replace(/^.*zipfile:/, ``);
} break;
case `neovim`: {
str = str.replace(/\.zip::/, `.zip/`);
// The path for neovim is in format of zipfile:///<pwd>/.yarn/...
return str.replace(/^zipfile:\/\//, ``);
} break;
case `vscode`:
default: {
return str.replace(/^\^?(zip:|\/zip(\/ts-nul-authority)?)\/+/, process.platform === `win32` ? `` : `/`)
} break;
}
}
// Force enable 'allowLocalPluginLoads'
// TypeScript tries to resolve plugins using a path relative to itself
// which doesn't work when using the global cache
// https://github.com/microsoft/TypeScript/blob/1b57a0395e0bff191581c9606aab92832001de62/src/server/project.ts#L2238
// VSCode doesn't want to enable 'allowLocalPluginLoads' due to security concerns but
// TypeScript already does local loads and if this code is running the user trusts the workspace
// https://github.com/microsoft/vscode/issues/45856
const ConfiguredProject = tsserver.server.ConfiguredProject;
const {enablePluginsWithOptions: originalEnablePluginsWithOptions} = ConfiguredProject.prototype;
ConfiguredProject.prototype.enablePluginsWithOptions = function() {
this.projectService.allowLocalPluginLoads = true;
return originalEnablePluginsWithOptions.apply(this, arguments);
};
// And here is the point where we hijack the VSCode <-> TS communications
// by adding ourselves in the middle. We locate everything that looks
// like an absolute path of ours and normalize it.
const Session = tsserver.server.Session;
const {onMessage: originalOnMessage, send: originalSend} = Session.prototype;
let hostInfo = `unknown`;
Object.assign(Session.prototype, {
onMessage(/** @type {string | object} */ message) {
const isStringMessage = typeof message === 'string';
const parsedMessage = isStringMessage ? JSON.parse(message) : message;
if (
parsedMessage != null &&
typeof parsedMessage === `object` &&
parsedMessage.arguments &&
typeof parsedMessage.arguments.hostInfo === `string`
) {
hostInfo = parsedMessage.arguments.hostInfo;
if (hostInfo === `vscode` && process.env.VSCODE_IPC_HOOK) {
const [, major, minor] = (process.env.VSCODE_IPC_HOOK.match(
// The RegExp from https://semver.org/ but without the caret at the start
/(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/
) ?? []).map(Number)
if (major === 1) {
if (minor < 61) {
hostInfo += ` <1.61`;
} else if (minor < 66) {
hostInfo += ` <1.66`;
} else if (minor < 68) {
hostInfo += ` <1.68`;
}
}
}
}
const processedMessageJSON = JSON.stringify(parsedMessage, (key, value) => {
return typeof value === 'string' ? fromEditorPath(value) : value;
});
return originalOnMessage.call(
this,
isStringMessage ? processedMessageJSON : JSON.parse(processedMessageJSON)
);
},
send(/** @type {any} */ msg) {
return originalSend.call(this, JSON.parse(JSON.stringify(msg, (key, value) => {
return typeof value === `string` ? toEditorPath(value) : value;
})));
}
});
return tsserver;
};
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require typescript/lib/tsserverlibrary.js
require(absPnpApiPath).setup();
}
}
// Defer to the real typescript/lib/tsserverlibrary.js your application uses
module.exports = moduleWrapper(absRequire(`typescript/lib/tsserverlibrary.js`));

20
.yarn/sdks/typescript/lib/typescript.js vendored Normal file
View File

@@ -0,0 +1,20 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire, createRequireFromPath} = require(`module`);
const {resolve} = require(`path`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absRequire = (createRequire || createRequireFromPath)(absPnpApiPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require typescript/lib/typescript.js
require(absPnpApiPath).setup();
}
}
// Defer to the real typescript/lib/typescript.js your application uses
module.exports = absRequire(`typescript/lib/typescript.js`);

6
.yarn/sdks/typescript/package.json vendored Normal file
View File

@@ -0,0 +1,6 @@
{
"name": "typescript",
"version": "4.7.4-sdk",
"main": "./lib/typescript.js",
"type": "commonjs"
}

View File

@@ -1,9 +1,7 @@
checksumBehavior: update
nodeLinker: node-modules
plugins:
- path: .yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs
spec: "@yarnpkg/plugin-workspace-tools"
- path: .yarn/plugins/@yarnpkg/plugin-docker-build.cjs
spec: "https://github.com/Dcard/yarn-plugins/releases/latest/download/plugin-docker-build.js"
yarnPath: .yarn/releases/yarn-3.2.1.cjs

26
jest.config.js Normal file
View File

@@ -0,0 +1,26 @@
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.ts$',
testPathIgnorePatterns: [
'/node_modules/',
'/dist/',
'/goldstackLocal/',
'/distWeb/',
'/distLambda/',
'.d.ts',
],
globals: {
'ts-jest': {
tsconfig: './linter.tsconfig.json',
},
},
coverageThreshold: {
global: {
branches: 100,
functions: 100,
lines: 100,
statements: 100,
},
},
};

View File

@@ -13,11 +13,12 @@
"scripts": {
"lint": "yarn workspaces foreach -pt --parallel --jobs 10 --verbose run lint",
"test": "yarn workspaces foreach -pt --parallel --jobs 10 --verbose run test",
"test:scheduler": "yarn workspace @standardnotes/scheduler-server test",
"clean": "yarn workspaces foreach -pt --parallel --jobs 10 --verbose run clean",
"build:all": "yarn workspaces foreach -pt --verbose run build",
"setup:env": "yarn workspaces foreach -pt --verbose run setup:env",
"build:scheduler": "yarn workspaces foreach -pt --verbose -R --from @standardnotes/scheduler-server run build",
"start:scheduler": "yarn workspaces foreach -pt --verbose -R --from @standardnotes/scheduler-server run worker",
"build:scheduler": "yarn workspace @standardnotes/scheduler-server build",
"start:scheduler": "yarn workspace @standardnotes/scheduler-server worker",
"release:beta": "lerna version --conventional-prerelease --conventional-commits --yes -m \"chore(release): publish\""
},
"devDependencies": {
@@ -26,17 +27,12 @@
"@lerna-lite/cli": "^1.5.1",
"@lerna-lite/list": "^1.5.1",
"@lerna-lite/run": "^1.5.1",
"@standardnotes/config": "^2.4.3",
"@types/jest": "^28.1.1",
"@types/node": "^18.0.0",
"@typescript-eslint/eslint-plugin": "^5.20.0",
"@typescript-eslint/parser": "^5.20.0",
"@typescript-eslint/parser": "^5.29.0",
"eslint": "^8.17.0",
"jest": "^28.1.1",
"prettier": "^2.6.2",
"ts-jest": "^28.0.5",
"eslint-config-prettier": "^8.5.0",
"prettier": "^2.7.1",
"ts-node": "^10.8.1",
"typescript": "^4.7.3"
"typescript": "^4.7.4"
},
"packageManager": "yarn@3.2.1"
}

View File

@@ -1,5 +1,6 @@
{
"extends": [
"../../node_modules/@standardnotes/config/src/.eslintrc"
]
"extends": "../../.eslintrc",
"parserOptions": {
"project": "./linter.tsconfig.json"
}
}

View File

@@ -3,6 +3,27 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [1.1.0-alpha.4](https://github.com/standardnotes/server/compare/@standardnotes/scheduler-server@1.1.0-alpha.3...@standardnotes/scheduler-server@1.1.0-alpha.4) (2022-06-21)
### Bug Fixes
* docker image building ([c205ebb](https://github.com/standardnotes/server/commit/c205ebb7101705572d8be96173b02870893a2630))
* jest setup ([1a8670c](https://github.com/standardnotes/server/commit/1a8670cdaa8e9aec3b7e6e179dfeef30d7922f3a))
* linter setup ([c62ff8f](https://github.com/standardnotes/server/commit/c62ff8f5c99f894dcd6a6ee93b3cd4671f6c594f))
* typescript setup ([6e1e6fa](https://github.com/standardnotes/server/commit/6e1e6fa2916cac01fe6147803c84fb29c2e3b2f1))
# [1.1.0-alpha.3](https://github.com/standardnotes/server/compare/@standardnotes/scheduler-server@1.1.0-alpha.2...@standardnotes/scheduler-server@1.1.0-alpha.3) (2022-06-20)
### Bug Fixes
* add default value for db migrations path ([1c4c609](https://github.com/standardnotes/server/commit/1c4c609865f834f09106e934c85350a9ea276b6d))
# [1.1.0-alpha.2](https://github.com/standardnotes/server/compare/@standardnotes/scheduler-server@1.1.0-alpha.1...@standardnotes/scheduler-server@1.1.0-alpha.2) (2022-06-20)
### Bug Fixes
* docker building for scheduler ([a982c78](https://github.com/standardnotes/server/commit/a982c785419b70e6b3f4595070edc21acade6d19))
# [1.1.0-alpha.1](https://github.com/standardnotes/server/compare/@standardnotes/scheduler-server@1.1.0-alpha.0...@standardnotes/scheduler-server@1.1.0-alpha.1) (2022-06-20)
### Bug Fixes

View File

@@ -1,29 +1,23 @@
FROM node:16.13.1-alpine3.15
FROM node:16.13.1-alpine AS builder
ARG UID=1001
ARG GID=1001
# Install dependencies for building native libraries
RUN apk add --update git openssh-client python3 alpine-sdk
RUN addgroup -S scheduler -g $GID && adduser -D -S scheduler -G scheduler -u $UID
WORKDIR /workspace
RUN apk add --update --no-cache \
curl \
alpine-sdk \
python3
# docker-build plugin copies everything needed for `yarn install` to `manifests` folder.
COPY manifests ./
WORKDIR /var/www
RUN yarn install --immutable
RUN chown -R $UID:$GID .
FROM node:16.13.1-alpine
USER scheduler
WORKDIR /workspace
COPY --chown=$UID:$GID package.json yarn.lock /var/www/
# Copy the installed dependencies from the previous stage.
COPY --from=builder /workspace ./
RUN yarn install
# docker-build plugin runs `yarn pack` in all workspace dependencies and copies them to `packs` folder.
COPY packs ./
COPY --chown=$UID:$GID . /var/www
RUN yarn build
ENTRYPOINT [ "docker/entrypoint.sh" ]
CMD [ "start-worker" ]
CMD yarn workspace @standardnotes/scheduler-server worker

View File

@@ -0,0 +1,11 @@
// eslint-disable-next-line @typescript-eslint/no-var-requires
const base = require('../../jest.config');
module.exports = {
...base,
globals: {
'ts-jest': {
tsconfig: 'tsconfig.json',
},
},
};

View File

@@ -1,8 +1,4 @@
{
"extends": "./tsconfig.json",
"exclude": [
"node_modules",
"dist",
"data"
]
"exclude": ["dist", "test-setup.ts"]
}

View File

@@ -1,6 +1,6 @@
{
"name": "@standardnotes/scheduler-server",
"version": "1.1.0-alpha.1",
"version": "1.1.0-alpha.4",
"engines": {
"node": ">=16.0.0 <17.0.0"
},
@@ -15,7 +15,7 @@
"build": "tsc --rootDir ./",
"lint": "eslint . --ext .ts",
"pretest": "yarn lint && yarn build",
"test": "jest --coverage",
"test": "jest --collect-coverage --config=./jest.config.js --runInBand",
"worker": "yarn node dist/bin/worker.js",
"verify:jobs": "yarn node dist/bin/verify.js",
"setup:env": "cp .env.sample .env",
@@ -24,26 +24,34 @@
"dependencies": {
"@newrelic/native-metrics": "7.0.2",
"@newrelic/winston-enricher": "^2.1.0",
"@standardnotes/common": "^1.23.0",
"@standardnotes/domain-events": "^2.32.0",
"@standardnotes/domain-events-infra": "^1.5.0",
"@standardnotes/scheduler": "^1.1.0",
"@standardnotes/time": "^1.7.0",
"aws-sdk": "^2.1158.0",
"dayjs": "^1.11.3",
"dotenv": "8.2.0",
"inversify": "5.0.5",
"ioredis": "^4.28.3",
"ioredis": "^5.0.6",
"mysql2": "^2.3.3",
"newrelic": "8.6.0",
"reflect-metadata": "0.1.13",
"reflect-metadata": "^0.1.13",
"typeorm": "^0.3.6",
"winston": "3.3.3"
},
"devDependencies": {
"@standardnotes/config": "^2.4.3",
"@types/ioredis": "^4.28.10",
"@types/newrelic": "^7.0.2"
"@types/jest": "^28.1.2",
"@types/newrelic": "^7.0.2",
"@types/node": "^18.0.0",
"@typescript-eslint/eslint-plugin": "^5.29.0",
"eslint-plugin-prettier": "^4.0.0",
"jest": "^28.1.1",
"ts-jest": "^28.0.5"
},
"jest": {
"preset": "../../node_modules/@standardnotes/config/src/jest.json",
"preset": "../../.yarn/unplugged/@standardnotes-config-npm-2.4.3-f16699e480/node_modules/@standardnotes/config/src/jest.json",
"coveragePathIgnorePatterns": [
"/node_modules/",
"/Bootstrap/"

View File

@@ -1,5 +1,5 @@
import * as winston from 'winston'
import * as IORedis from 'ioredis'
import Redis from 'ioredis'
import * as AWS from 'aws-sdk'
import { Container } from 'inversify'
import {
@@ -53,9 +53,9 @@ export class ContainerConfigLoader {
const isRedisInClusterMode = redisUrl.indexOf(',') > 0
let redis
if (isRedisInClusterMode) {
redis = new IORedis.Cluster(redisUrl.split(','))
redis = new Redis.Cluster(redisUrl.split(','))
} else {
redis = new IORedis(redisUrl)
redis = new Redis(redisUrl)
}
container.bind(TYPES.Redis).toConstantValue(redis)

View File

@@ -35,7 +35,7 @@ export const AppDataSource = new DataSource({
removeNodeErrorCount: 10,
},
entities: [Job, Predicate],
migrations: [env.get('DB_MIGRATIONS_PATH')],
migrations: [env.get('DB_MIGRATIONS_PATH', true) ?? 'dist/migrations/*.js'],
migrationsRun: true,
logging: <LoggerOptions>env.get('DB_DEBUG_LEVEL'),
})

View File

@@ -1,12 +1,13 @@
{
"extends": "../../node_modules/@standardnotes/config/src/tsconfig.json",
"extends": "../../tsconfig.json",
"compilerOptions": {
"target": "esnext",
"outDir": "dist"
"composite": true,
"outDir": "./dist",
},
"include": [
"src/**/*",
"bin/**/*",
"migrations/**/*",
]
],
"references": []
}

29
tsconfig.json Normal file
View File

@@ -0,0 +1,29 @@
{
"compilerOptions": {
"alwaysStrict": true,
"declaration": true,
"incremental": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"module": "commonjs",
"moduleResolution": "node",
"noFallthroughCasesInSwitch": true,
"noImplicitAny": true,
"noImplicitOverride": true,
"noImplicitReturns": true,
"noImplicitThis": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"removeComments": false,
"skipLibCheck": true,
"strict": true,
"strictNullChecks": true,
"target": "es2022",
},
"exclude": ["**/*.spec.ts", "dist", "test-setup.ts"],
"references": [
{
"path": "./packages/scheduler"
}
]
}

356
yarn.lock
View File

@@ -689,6 +689,13 @@ __metadata:
languageName: node
linkType: hard
"@ioredis/commands@npm:^1.1.1":
version: 1.1.1
resolution: "@ioredis/commands@npm:1.1.1"
checksum: 66a9dc315dc077826fef4057c027c77c5af3fba247e6a5156c6847700fec8968a1b180bca344120ad561f5654cda54ed63119f790a041b0a010cacf02421ecff
languageName: node
linkType: hard
"@istanbuljs/load-nyc-config@npm:^1.0.0":
version: 1.1.0
resolution: "@istanbuljs/load-nyc-config@npm:1.1.0"
@@ -1467,10 +1474,10 @@ __metadata:
languageName: node
linkType: hard
"@octokit/openapi-types@npm:^12.1.0":
version: 12.1.0
resolution: "@octokit/openapi-types@npm:12.1.0"
checksum: 449f21166d53bb6c88f9b01b45d8ac730aa4ce1aa4d8ca86fc7c06b552c94e7f01281c9a73b2902a4cd2e5ce88d24766e0338109d5aa35a8e0bfc514c6cfd2d7
"@octokit/openapi-types@npm:^12.2.0":
version: 12.3.0
resolution: "@octokit/openapi-types@npm:12.3.0"
checksum: 2f568d2e1dcf26f786b3d4ff424ec266a60bbe7fac457e338203f72f58a65cb3f5695f50721d1f587da6387b9fadaa741b4090da566547bad2977c19d4dc0b26
languageName: node
linkType: hard
@@ -1482,13 +1489,13 @@ __metadata:
linkType: hard
"@octokit/plugin-paginate-rest@npm:^2.16.8":
version: 2.18.0
resolution: "@octokit/plugin-paginate-rest@npm:2.18.0"
version: 2.19.0
resolution: "@octokit/plugin-paginate-rest@npm:2.19.0"
dependencies:
"@octokit/types": ^6.35.0
"@octokit/types": ^6.36.0
peerDependencies:
"@octokit/core": ">=2"
checksum: e804e44f92a16a0cf5b32a4a05e1acb908d96c63b0e4340355a7f99876b2aee998f636b5ac11a360a4e33ab05ee1c1a384fa48c7f63a78ea5992bc2d8a55e4ce
checksum: f91a4374addbd6366eab46fbe91bbee9bb24975f1ff35db6b0f570bb24340cb4f2e456f4456c1e92acff68ab09418311414642e960cb2512f3db438b4b9639bf
languageName: node
linkType: hard
@@ -1502,14 +1509,14 @@ __metadata:
linkType: hard
"@octokit/plugin-rest-endpoint-methods@npm:^5.12.0":
version: 5.14.0
resolution: "@octokit/plugin-rest-endpoint-methods@npm:5.14.0"
version: 5.14.1
resolution: "@octokit/plugin-rest-endpoint-methods@npm:5.14.1"
dependencies:
"@octokit/types": ^6.35.0
deprecation: ^2.3.1
peerDependencies:
"@octokit/core": ">=3"
checksum: 3fbd33aadcd136dbf45175fe24795d2aaab39a3ae6d6832bf49883089f08fb000d1b97ddd293e4a6d694f44c62cc1abaa239551b613b7a226f6f62a074ece6dc
checksum: 7a3dd0b45853b1d4a3b61dc8f2d53c84cc35c9b8852d8a612243751dbd822feff031f61fb953f64534672f67e8f9a8f3981d44f9ba63b57bd8a241148eb751a2
languageName: node
linkType: hard
@@ -1550,12 +1557,12 @@ __metadata:
languageName: node
linkType: hard
"@octokit/types@npm:^6.0.3, @octokit/types@npm:^6.16.1, @octokit/types@npm:^6.35.0":
version: 6.35.0
resolution: "@octokit/types@npm:6.35.0"
"@octokit/types@npm:^6.0.3, @octokit/types@npm:^6.16.1, @octokit/types@npm:^6.35.0, @octokit/types@npm:^6.36.0":
version: 6.36.0
resolution: "@octokit/types@npm:6.36.0"
dependencies:
"@octokit/openapi-types": ^12.1.0
checksum: 0f1949aece03733d1a45a9ee1c2162f8f35d58814e66ed2e00929b0fbb7cb315625203bf748ea7cb855b20b1c794c7f1add7203508a186289f489b7fb1143924
"@octokit/openapi-types": ^12.2.0
checksum: b2802c2ab1657113ab4b657c916649c4991e117cc8f052f9869b1dd597e621cff680b975d64526800162d53c6efffbcd171c79b66f475e4de7d5f9453a939b47
languageName: node
linkType: hard
@@ -1681,19 +1688,6 @@ __metadata:
languageName: node
linkType: hard
"@standardnotes/config@npm:^2.4.3":
version: 2.4.3
resolution: "@standardnotes/config@npm:2.4.3"
dependencies:
"@typescript-eslint/eslint-plugin": ^5.12.1
"@typescript-eslint/parser": ^5.12.1
eslint-config-prettier: ^8.5.0
eslint-plugin-prettier: ^4.0.0
prettier: ^2.6.2
checksum: b57b49242ac5ad31db96600b5ac1e28f2e2f71179578f5d35b8f1c07a68fdebba51fdaed7d648f7aaed7db3ca83570a70b973ffe81bcfdd38513808a4cbac405
languageName: node
linkType: hard
"@standardnotes/domain-events-infra@npm:^1.5.0":
version: 1.5.2
resolution: "@standardnotes/domain-events-infra@npm:1.5.2"
@@ -1736,19 +1730,27 @@ __metadata:
dependencies:
"@newrelic/native-metrics": 7.0.2
"@newrelic/winston-enricher": ^2.1.0
"@standardnotes/config": ^2.4.3
"@standardnotes/common": ^1.23.0
"@standardnotes/domain-events": ^2.32.0
"@standardnotes/domain-events-infra": ^1.5.0
"@standardnotes/scheduler": ^1.1.0
"@standardnotes/time": ^1.7.0
"@types/ioredis": ^4.28.10
"@types/jest": ^28.1.2
"@types/newrelic": ^7.0.2
"@types/node": ^18.0.0
"@typescript-eslint/eslint-plugin": ^5.29.0
aws-sdk: ^2.1158.0
dayjs: ^1.11.3
dotenv: 8.2.0
eslint-plugin-prettier: ^4.0.0
inversify: 5.0.5
ioredis: ^4.28.3
ioredis: ^5.0.6
jest: ^28.1.1
mysql2: ^2.3.3
newrelic: 8.6.0
reflect-metadata: 0.1.13
reflect-metadata: ^0.1.13
ts-jest: ^28.0.5
typeorm: ^0.3.6
winston: 3.3.3
languageName: unknown
@@ -1772,17 +1774,12 @@ __metadata:
"@lerna-lite/cli": ^1.5.1
"@lerna-lite/list": ^1.5.1
"@lerna-lite/run": ^1.5.1
"@standardnotes/config": ^2.4.3
"@types/jest": ^28.1.1
"@types/node": ^18.0.0
"@typescript-eslint/eslint-plugin": ^5.20.0
"@typescript-eslint/parser": ^5.20.0
"@typescript-eslint/parser": ^5.29.0
eslint: ^8.17.0
jest: ^28.1.1
prettier: ^2.6.2
ts-jest: ^28.0.5
eslint-config-prettier: ^8.5.0
prettier: ^2.7.1
ts-node: ^10.8.1
typescript: ^4.7.3
typescript: ^4.7.4
languageName: unknown
linkType: soft
@@ -1923,13 +1920,13 @@ __metadata:
languageName: node
linkType: hard
"@types/jest@npm:^28.1.1":
version: 28.1.1
resolution: "@types/jest@npm:28.1.1"
"@types/jest@npm:^28.1.2":
version: 28.1.2
resolution: "@types/jest@npm:28.1.2"
dependencies:
jest-matcher-utils: ^27.0.0
pretty-format: ^27.0.0
checksum: 0a8b045a7b660372decc807c390d3f99a2b12bb1659a1cd593afe04557f4b7c235b0576a5e35b1577710d20e42759d3d8755eb8bed6edc8733f47007e75a5509
jest-matcher-utils: ^28.0.0
pretty-format: ^28.0.0
checksum: 53ec95b0b27c61380225b94f8660e661e8c6c6fc69b7130531fb5d72ebf5c8838a4266b8a6d7b3a77b3bcdabed632de0c21c9592a2529c1efe80a0f0a995a3aa
languageName: node
linkType: hard
@@ -2019,13 +2016,13 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/eslint-plugin@npm:^5.12.1, @typescript-eslint/eslint-plugin@npm:^5.20.0":
version: 5.28.0
resolution: "@typescript-eslint/eslint-plugin@npm:5.28.0"
"@typescript-eslint/eslint-plugin@npm:^5.29.0":
version: 5.29.0
resolution: "@typescript-eslint/eslint-plugin@npm:5.29.0"
dependencies:
"@typescript-eslint/scope-manager": 5.28.0
"@typescript-eslint/type-utils": 5.28.0
"@typescript-eslint/utils": 5.28.0
"@typescript-eslint/scope-manager": 5.29.0
"@typescript-eslint/type-utils": 5.29.0
"@typescript-eslint/utils": 5.29.0
debug: ^4.3.4
functional-red-black-tree: ^1.0.1
ignore: ^5.2.0
@@ -2038,42 +2035,42 @@ __metadata:
peerDependenciesMeta:
typescript:
optional: true
checksum: 49e08865abd35acdc44829b929f2cd01d01a1f91d3c3c357963b6980e938de365f178efcec21e0ed6ec13a2ad9373f52b73001ddd5cdc7b0245fcf02b9564dd3
checksum: b1022a640f80c314ac8b247a2ccdd21f4b523b3cb8906956f5d276008ac964c8a1e951b2b2b16ca9621eb795dc9bbf6447b5b767acfe4866a1bc3e3527d966fc
languageName: node
linkType: hard
"@typescript-eslint/parser@npm:^5.12.1, @typescript-eslint/parser@npm:^5.20.0":
version: 5.28.0
resolution: "@typescript-eslint/parser@npm:5.28.0"
"@typescript-eslint/parser@npm:^5.29.0":
version: 5.29.0
resolution: "@typescript-eslint/parser@npm:5.29.0"
dependencies:
"@typescript-eslint/scope-manager": 5.28.0
"@typescript-eslint/types": 5.28.0
"@typescript-eslint/typescript-estree": 5.28.0
"@typescript-eslint/scope-manager": 5.29.0
"@typescript-eslint/types": 5.29.0
"@typescript-eslint/typescript-estree": 5.29.0
debug: ^4.3.4
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
peerDependenciesMeta:
typescript:
optional: true
checksum: cb18ff47b0a10373ba1c05c90901d08f5f99180e624f3f2faa85f13d1048fc59601a3cab6b852f72d13287b314d94c4d4997129ff6c639496a9144c762f6d31e
checksum: 7805796638d1ddbe21f2627e9f03493ec17710e22ae81d2345f3e0f5ff9cbf6f0cd1b0e05d8d0b9aa08435bafdb6b5c86f27d7115f0959de43e3322b86c00709
languageName: node
linkType: hard
"@typescript-eslint/scope-manager@npm:5.28.0":
version: 5.28.0
resolution: "@typescript-eslint/scope-manager@npm:5.28.0"
"@typescript-eslint/scope-manager@npm:5.29.0":
version: 5.29.0
resolution: "@typescript-eslint/scope-manager@npm:5.29.0"
dependencies:
"@typescript-eslint/types": 5.28.0
"@typescript-eslint/visitor-keys": 5.28.0
checksum: f187fd295d152508aa85233ef3ac89031952300fbbe277e188dfba3fbfd82656b15d3d8daa6d85984970ce00a30fdf75da912c4024df982004b24f3a95420b8f
"@typescript-eslint/types": 5.29.0
"@typescript-eslint/visitor-keys": 5.29.0
checksum: 540642bef9c55fd7692af98dfb42ab99eeb82553f42ab2a3c4e132e02b5ba492da1c6bf1ca6b02b900a678fc74399ad6c564c0ca20d91032090b6cbcb01a5bde
languageName: node
linkType: hard
"@typescript-eslint/type-utils@npm:5.28.0":
version: 5.28.0
resolution: "@typescript-eslint/type-utils@npm:5.28.0"
"@typescript-eslint/type-utils@npm:5.29.0":
version: 5.29.0
resolution: "@typescript-eslint/type-utils@npm:5.29.0"
dependencies:
"@typescript-eslint/utils": 5.28.0
"@typescript-eslint/utils": 5.29.0
debug: ^4.3.4
tsutils: ^3.21.0
peerDependencies:
@@ -2081,23 +2078,23 @@ __metadata:
peerDependenciesMeta:
typescript:
optional: true
checksum: 05563dab5414a42b7781f5ce65ee540b10a946c419bde3fbc45593aa3b1225b2a70558581f311720d670dc82ab699a3f9ecb4b1447d6fd557bd330cf8890d8ca
checksum: 686b8ff05a7591f76a2a1d3746b988168dcbd59c2f52de095b19e4f8e17063e03dc3d0f7b3d84f7be6880f2df97c3e184877664d0b4275ea9871c31d1e58c7d2
languageName: node
linkType: hard
"@typescript-eslint/types@npm:5.28.0":
version: 5.28.0
resolution: "@typescript-eslint/types@npm:5.28.0"
checksum: e948915d6f24ece98043763a48e34ced5e16a1aa88cc86ea7d9057010ed92ce39457a753dd7a140be52f9b546b27f8a3b33bdc7d671427a386aa1aa381d908ef
"@typescript-eslint/types@npm:5.29.0":
version: 5.29.0
resolution: "@typescript-eslint/types@npm:5.29.0"
checksum: 982ecdd69103105cabff8deac7f82f6002cf909238702ce902133e9af655cd962f977d5adf650c5ddae80d8c0e46abe1612a9141b25c7ed20ba8d662eb7ab871
languageName: node
linkType: hard
"@typescript-eslint/typescript-estree@npm:5.28.0":
version: 5.28.0
resolution: "@typescript-eslint/typescript-estree@npm:5.28.0"
"@typescript-eslint/typescript-estree@npm:5.29.0":
version: 5.29.0
resolution: "@typescript-eslint/typescript-estree@npm:5.29.0"
dependencies:
"@typescript-eslint/types": 5.28.0
"@typescript-eslint/visitor-keys": 5.28.0
"@typescript-eslint/types": 5.29.0
"@typescript-eslint/visitor-keys": 5.29.0
debug: ^4.3.4
globby: ^11.1.0
is-glob: ^4.0.3
@@ -2106,33 +2103,33 @@ __metadata:
peerDependenciesMeta:
typescript:
optional: true
checksum: e7be6e9ff778ab2728bdc545713f29cd40bbe1282662461453fe46bc18f676f9b33c60e3514347fbc4e5e94d764525c20b8ef3d47baa62fec6bd3ce05fdde6eb
checksum: b91107a9fc31bf511aaa70f1e6d1d832d3acf08cfe999c870169447a7c223abff54c1d604bbb08d7c069dd98b43fb279bc314d1726097704fe8ad4c6e0969b12
languageName: node
linkType: hard
"@typescript-eslint/utils@npm:5.28.0":
version: 5.28.0
resolution: "@typescript-eslint/utils@npm:5.28.0"
"@typescript-eslint/utils@npm:5.29.0":
version: 5.29.0
resolution: "@typescript-eslint/utils@npm:5.29.0"
dependencies:
"@types/json-schema": ^7.0.9
"@typescript-eslint/scope-manager": 5.28.0
"@typescript-eslint/types": 5.28.0
"@typescript-eslint/typescript-estree": 5.28.0
"@typescript-eslint/scope-manager": 5.29.0
"@typescript-eslint/types": 5.29.0
"@typescript-eslint/typescript-estree": 5.29.0
eslint-scope: ^5.1.1
eslint-utils: ^3.0.0
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
checksum: d30958552470c3f46b2183b690fa8c922a375a84ef83ccfda4785148b8dafb7bf428ab01de6608f67cefbcae35c6a2b0c54b5a6a89bba31566ec3b41f098c02e
checksum: 216f51fb9c176437919af55db9ed14db8af7b020611e954c06e69956b9e3248cbfe6a218013d6c17b716116dca6566a4c03710f9b48ce4e94f89312d61c16d07
languageName: node
linkType: hard
"@typescript-eslint/visitor-keys@npm:5.28.0":
version: 5.28.0
resolution: "@typescript-eslint/visitor-keys@npm:5.28.0"
"@typescript-eslint/visitor-keys@npm:5.29.0":
version: 5.29.0
resolution: "@typescript-eslint/visitor-keys@npm:5.29.0"
dependencies:
"@typescript-eslint/types": 5.28.0
"@typescript-eslint/types": 5.29.0
eslint-visitor-keys: ^3.3.0
checksum: e97251968ea273ce33fa0de8a9c04426499b797f6f7800379ff880c4be6e6e02fe023038be0092c595be394a8636f73ee8911974214d5232b3d59492a50771bf
checksum: 15f228ad9ffaf0e42cc6b2ee4e5095c1e89c4c2dc46a65d19ca0e2296d88c08a1192039d942bd9600b1496176749f6322d636dd307602dbab90404a9501b4d6e
languageName: node
linkType: hard
@@ -2384,8 +2381,8 @@ __metadata:
linkType: hard
"aws-sdk@npm:^2.1082.0":
version: 2.1156.0
resolution: "aws-sdk@npm:2.1156.0"
version: 2.1157.0
resolution: "aws-sdk@npm:2.1157.0"
dependencies:
buffer: 4.9.2
events: 1.1.1
@@ -2396,7 +2393,24 @@ __metadata:
url: 0.10.3
uuid: 8.0.0
xml2js: 0.4.19
checksum: e36a3b88c9fee03585baf205ce47bc02f288ce8c8ed441bcc2b1ed819ab12077506cb4dafe56c330a7fb8e12f2d7b1da21028b31627d750bf3d73ae0227bf426
checksum: 4a49853bbe8401c62ecc14baafb35fc3fad9de320753e653d9eb8fae47115f7fd94ed09a5fa903e5b36d685bb733efb095eb00cec82f542237aab9334557f621
languageName: node
linkType: hard
"aws-sdk@npm:^2.1158.0":
version: 2.1158.0
resolution: "aws-sdk@npm:2.1158.0"
dependencies:
buffer: 4.9.2
events: 1.1.1
ieee754: 1.1.13
jmespath: 0.16.0
querystring: 0.2.0
sax: 1.2.1
url: 0.10.3
uuid: 8.0.0
xml2js: 0.4.19
checksum: 4d0c0655f08a2359b34b8111fe64ec7b26658d2404ec404cf23decaaa52c99696371a1f4991faccbee9f96602737bbeabfb7b43cc1e58dc1a84692080933fdc7
languageName: node
linkType: hard
@@ -2725,9 +2739,9 @@ __metadata:
linkType: hard
"caniuse-lite@npm:^1.0.30001349":
version: 1.0.30001355
resolution: "caniuse-lite@npm:1.0.30001355"
checksum: 4154cabab0ae87d804007b1fc9109a532914dcd5dc4beeec8e1d3616f22971a0e96ed7fe0b00996c5104a4fe7ea7935c8e2878e06324c0ccfdcd6c69570e4ae1
version: 1.0.30001357
resolution: "caniuse-lite@npm:1.0.30001357"
checksum: aae79796f95b562fc597d01e2bbc042bc1671567790fab4cae02040414be72d4d6df7bd457930f30a68bbad310514e0ea58a4fc5a686d49662894bd721dfb3c6
languageName: node
linkType: hard
@@ -3205,7 +3219,7 @@ __metadata:
languageName: node
linkType: hard
"dayjs@npm:^1.10.8":
"dayjs@npm:^1.10.8, dayjs@npm:^1.11.3":
version: 1.11.3
resolution: "dayjs@npm:1.11.3"
checksum: c87e06b562a51ae6568cc5b840c7579d82a0f8af7163128c858fe512d3d71d07bd8e8e464b8cc41b8698a9e26b80ab2c082d14a1cd4c33df5692d77ccdfc5a43
@@ -3334,13 +3348,6 @@ __metadata:
languageName: node
linkType: hard
"diff-sequences@npm:^27.5.1":
version: 27.5.1
resolution: "diff-sequences@npm:27.5.1"
checksum: a00db5554c9da7da225db2d2638d85f8e41124eccbd56cbaefb3b276dcbb1c1c2ad851c32defe2055a54a4806f030656cbf6638105fd6ce97bb87b90b32a33ca
languageName: node
linkType: hard
"diff-sequences@npm:^28.1.1":
version: 28.1.1
resolution: "diff-sequences@npm:28.1.1"
@@ -3413,9 +3420,9 @@ __metadata:
linkType: hard
"electron-to-chromium@npm:^1.4.147":
version: 1.4.160
resolution: "electron-to-chromium@npm:1.4.160"
checksum: cd1058ddf8c4d1a38d2826938f9e99945bb45f96ea5eca5af96a2df4a40f23eec19e187cda739b4438174352129bcb733950f366a494d0a923385a46868a0d38
version: 1.4.161
resolution: "electron-to-chromium@npm:1.4.161"
checksum: a14137543f92884c9d55d7e3df3f41ac94cfedcebd114a5a65d91b610d87e3ee71bfcf3649cfb06c3e3705686307c5d47beab7e3f27c3f6a83d549acf2c544cf
languageName: node
linkType: hard
@@ -3581,8 +3588,8 @@ __metadata:
linkType: hard
"eslint@npm:^8.17.0":
version: 8.17.0
resolution: "eslint@npm:8.17.0"
version: 8.18.0
resolution: "eslint@npm:8.18.0"
dependencies:
"@eslint/eslintrc": ^1.3.0
"@humanwhocodes/config-array": ^0.9.2
@@ -3621,7 +3628,7 @@ __metadata:
v8-compile-cache: ^2.0.3
bin:
eslint: bin/eslint.js
checksum: b484c96681c6b19f5b437f664623f1cd310d3ee9be88400d8450e086e664cd968a9dc202f0b0678578fd50e7a445b92586efe8c787de5073ff2f83213b00bb7b
checksum: d9b4b7488a9cee97608343cbb5ac652d3f316436f95ef0800cd9497c1c6f877b655a3275817989c02f1ff0d5dfd1959c5092af9251c7e3fcf60659da37752a10
languageName: node
linkType: hard
@@ -4502,7 +4509,7 @@ __metadata:
languageName: node
linkType: hard
"ioredis@npm:^4.28.3, ioredis@npm:^4.28.5":
"ioredis@npm:^4.28.5":
version: 4.28.5
resolution: "ioredis@npm:4.28.5"
dependencies:
@@ -4521,6 +4528,23 @@ __metadata:
languageName: node
linkType: hard
"ioredis@npm:^5.0.6":
version: 5.0.6
resolution: "ioredis@npm:5.0.6"
dependencies:
"@ioredis/commands": ^1.1.1
cluster-key-slot: ^1.1.0
debug: ^4.3.4
denque: ^2.0.1
lodash.defaults: ^4.2.0
lodash.isarguments: ^3.1.0
redis-errors: ^1.2.0
redis-parser: ^3.0.0
standard-as-callback: ^2.1.0
checksum: 24ae1fecec197e9e5d3e73e81e12134ace56a76b5e972a01cb9fa7f3853940f5a679bbd9f4aea2fd9848be9e035d996229cdadf5c5f997f21cf2a322edf1406e
languageName: node
linkType: hard
"ip@npm:^1.1.5":
version: 1.1.8
resolution: "ip@npm:1.1.8"
@@ -4553,7 +4577,7 @@ __metadata:
languageName: node
linkType: hard
"is-core-module@npm:^2.5.0, is-core-module@npm:^2.8.1":
"is-core-module@npm:^2.5.0, is-core-module@npm:^2.8.1, is-core-module@npm:^2.9.0":
version: 2.9.0
resolution: "is-core-module@npm:2.9.0"
dependencies:
@@ -4871,18 +4895,6 @@ __metadata:
languageName: node
linkType: hard
"jest-diff@npm:^27.5.1":
version: 27.5.1
resolution: "jest-diff@npm:27.5.1"
dependencies:
chalk: ^4.0.0
diff-sequences: ^27.5.1
jest-get-type: ^27.5.1
pretty-format: ^27.5.1
checksum: 8be27c1e1ee57b2bb2bef9c0b233c19621b4c43d53a3c26e2c00a4e805eb4ea11fe1694a06a9fb0e80ffdcfdc0d2b1cb0b85920b3f5c892327ecd1e7bd96b865
languageName: node
linkType: hard
"jest-diff@npm:^28.1.1":
version: 28.1.1
resolution: "jest-diff@npm:28.1.1"
@@ -4931,13 +4943,6 @@ __metadata:
languageName: node
linkType: hard
"jest-get-type@npm:^27.5.1":
version: 27.5.1
resolution: "jest-get-type@npm:27.5.1"
checksum: 63064ab70195c21007d897c1157bf88ff94a790824a10f8c890392e7d17eda9c3900513cb291ca1c8d5722cad79169764e9a1279f7c8a9c4cd6e9109ff04bbc0
languageName: node
linkType: hard
"jest-get-type@npm:^28.0.2":
version: 28.0.2
resolution: "jest-get-type@npm:28.0.2"
@@ -4978,19 +4983,7 @@ __metadata:
languageName: node
linkType: hard
"jest-matcher-utils@npm:^27.0.0":
version: 27.5.1
resolution: "jest-matcher-utils@npm:27.5.1"
dependencies:
chalk: ^4.0.0
jest-diff: ^27.5.1
jest-get-type: ^27.5.1
pretty-format: ^27.5.1
checksum: bb2135fc48889ff3fe73888f6cc7168ddab9de28b51b3148f820c89fdfd2effdcad005f18be67d0b9be80eda208ad47290f62f03d0a33f848db2dd0273c8217a
languageName: node
linkType: hard
"jest-matcher-utils@npm:^28.1.1":
"jest-matcher-utils@npm:^28.0.0, jest-matcher-utils@npm:^28.1.1":
version: 28.1.1
resolution: "jest-matcher-utils@npm:28.1.1"
dependencies:
@@ -5948,16 +5941,7 @@ __metadata:
languageName: node
linkType: hard
"minipass@npm:^3.0.0, minipass@npm:^3.1.1, minipass@npm:^3.1.6":
version: 3.2.1
resolution: "minipass@npm:3.2.1"
dependencies:
yallist: ^4.0.0
checksum: 3a33b74784dda2299d7d16b847247848e8d2f99f026ba4df22321ea09fcf6bacea7fff027046375e9aff60941bc4ddf3e7ca993a50e2f2f8d90cb32bbfa952e0
languageName: node
linkType: hard
"minipass@npm:^3.1.0, minipass@npm:^3.1.3":
"minipass@npm:^3.0.0, minipass@npm:^3.1.0, minipass@npm:^3.1.1, minipass@npm:^3.1.3, minipass@npm:^3.1.6":
version: 3.3.3
resolution: "minipass@npm:3.3.3"
dependencies:
@@ -6846,7 +6830,7 @@ __metadata:
languageName: node
linkType: hard
"prettier@npm:^2.6.2":
"prettier@npm:^2.7.1":
version: 2.7.1
resolution: "prettier@npm:2.7.1"
bin:
@@ -6855,18 +6839,7 @@ __metadata:
languageName: node
linkType: hard
"pretty-format@npm:^27.0.0, pretty-format@npm:^27.5.1":
version: 27.5.1
resolution: "pretty-format@npm:27.5.1"
dependencies:
ansi-regex: ^5.0.1
ansi-styles: ^5.0.0
react-is: ^17.0.1
checksum: cf610cffcb793885d16f184a62162f2dd0df31642d9a18edf4ca298e909a8fe80bdbf556d5c9573992c102ce8bf948691da91bf9739bee0ffb6e79c8a8a6e088
languageName: node
linkType: hard
"pretty-format@npm:^28.1.1":
"pretty-format@npm:^28.0.0, pretty-format@npm:^28.1.1":
version: 28.1.1
resolution: "pretty-format@npm:28.1.1"
dependencies:
@@ -7034,13 +7007,6 @@ __metadata:
languageName: node
linkType: hard
"react-is@npm:^17.0.1":
version: 17.0.2
resolution: "react-is@npm:17.0.2"
checksum: 9d6d111d8990dc98bc5402c1266a808b0459b5d54830bbea24c12d908b536df7883f268a7868cfaedde3dd9d4e0d574db456f84d2e6df9c4526f99bb4b5344d8
languageName: node
linkType: hard
"react-is@npm:^18.0.0":
version: 18.2.0
resolution: "react-is@npm:18.2.0"
@@ -7173,7 +7139,7 @@ __metadata:
languageName: node
linkType: hard
"reflect-metadata@npm:0.1.13, reflect-metadata@npm:^0.1.13":
"reflect-metadata@npm:^0.1.13":
version: 0.1.13
resolution: "reflect-metadata@npm:0.1.13"
checksum: 798d379a7b6f6455501145419505c97dd11cbc23857a386add2b9ef15963ccf15a48d9d15507afe01d4cd74116df8a213247200bac00320bd7c11ddeaa5e8fb4
@@ -7234,28 +7200,28 @@ __metadata:
linkType: hard
"resolve@npm:^1.10.0, resolve@npm:^1.20.0":
version: 1.22.0
resolution: "resolve@npm:1.22.0"
version: 1.22.1
resolution: "resolve@npm:1.22.1"
dependencies:
is-core-module: ^2.8.1
is-core-module: ^2.9.0
path-parse: ^1.0.7
supports-preserve-symlinks-flag: ^1.0.0
bin:
resolve: bin/resolve
checksum: a2d14cc437b3a23996f8c7367eee5c7cf8149c586b07ca2ae00e96581ce59455555a1190be9aa92154785cf9f2042646c200d0e00e0bbd2b8a995a93a0ed3e4e
checksum: 07af5fc1e81aa1d866cbc9e9460fbb67318a10fa3c4deadc35c3ad8a898ee9a71a86a65e4755ac3195e0ea0cfbe201eb323ebe655ce90526fd61917313a34e4e
languageName: node
linkType: hard
"resolve@patch:resolve@^1.10.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.20.0#~builtin<compat/resolve>":
version: 1.22.0
resolution: "resolve@patch:resolve@npm%3A1.22.0#~builtin<compat/resolve>::version=1.22.0&hash=07638b"
version: 1.22.1
resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin<compat/resolve>::version=1.22.1&hash=07638b"
dependencies:
is-core-module: ^2.8.1
is-core-module: ^2.9.0
path-parse: ^1.0.7
supports-preserve-symlinks-flag: ^1.0.0
bin:
resolve: bin/resolve
checksum: c79ecaea36c872ee4a79e3db0d3d4160b593f2ca16e031d8283735acd01715a203607e9ded3f91f68899c2937fa0d49390cddbe0fb2852629212f3cda283f4a7
checksum: 5656f4d0bedcf8eb52685c1abdf8fbe73a1603bb1160a24d716e27a57f6cecbe2432ff9c89c2bd57542c3a7b9d14b1882b73bfe2e9d7849c9a4c0b8b39f02b8b
languageName: node
linkType: hard
@@ -8255,23 +8221,23 @@ __metadata:
languageName: node
linkType: hard
"typescript@npm:^4.6.4, typescript@npm:^4.7.3":
version: 4.7.3
resolution: "typescript@npm:4.7.3"
"typescript@npm:^4.6.4, typescript@npm:^4.7.4":
version: 4.7.4
resolution: "typescript@npm:4.7.4"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: fd13a1ce53790a36bb8350e1f5e5e384b5f6cb9b0635114a6d01d49cb99916abdcfbc13c7521cdae2f2d3f6d8bc4a8ae7625edf645a04ee940588cd5e7597b2f
checksum: 5750181b1cd7e6482c4195825547e70f944114fb47e58e4aa7553e62f11b3f3173766aef9c281783edfd881f7b8299cf35e3ca8caebe73d8464528c907a164df
languageName: node
linkType: hard
"typescript@patch:typescript@^4.6.4#~builtin<compat/typescript>, typescript@patch:typescript@^4.7.3#~builtin<compat/typescript>":
version: 4.7.3
resolution: "typescript@patch:typescript@npm%3A4.7.3#~builtin<compat/typescript>::version=4.7.3&hash=7ad353"
"typescript@patch:typescript@^4.6.4#~builtin<compat/typescript>, typescript@patch:typescript@^4.7.4#~builtin<compat/typescript>":
version: 4.7.4
resolution: "typescript@patch:typescript@npm%3A4.7.4#~builtin<compat/typescript>::version=4.7.4&hash=7ad353"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: 137d18a77f52254a284960b16ab53d0619f57b69b5d585804b8413f798a1175ce3e774fb95e6a101868577aafe357d8fcfc9171f0dc9fc0c210e9ae59d107cc0
checksum: 9096d8f6c16cb80ef3bf96fcbbd055bf1c4a43bd14f3b7be45a9fbe7ada46ec977f604d5feed3263b4f2aa7d4c7477ce5f9cd87de0d6feedec69a983f3a4f93e
languageName: node
linkType: hard