You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2026-04-02 10:51:52 +02:00
Compare commits
21 Commits
logger_fix
...
issue-8566
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c6ff42f374 | ||
|
|
a25117c41a | ||
|
|
6131d1ffd2 | ||
|
|
6dea4b8261 | ||
|
|
94b3de1370 | ||
|
|
cca501d819 | ||
|
|
2329e321ec | ||
|
|
6c2e0d9262 | ||
|
|
887c271853 | ||
|
|
ea7c7f6447 | ||
|
|
29931c05ad | ||
|
|
17c227024e | ||
|
|
6fe33f3435 | ||
|
|
4d05cc7595 | ||
|
|
406a1496db | ||
|
|
30471d591a | ||
|
|
c997a7e480 | ||
|
|
7ed133d960 | ||
|
|
c252937852 | ||
|
|
a9c919fe59 | ||
|
|
772baf1e84 |
@@ -541,6 +541,7 @@ packages/lib/htmlUtils2.test.js
|
||||
packages/lib/import-enex-md-gen.test.js
|
||||
packages/lib/import-enex-md-gen.js
|
||||
packages/lib/import-enex.js
|
||||
packages/lib/initLib.js
|
||||
packages/lib/locale.test.js
|
||||
packages/lib/locale.js
|
||||
packages/lib/markdownUtils.test.js
|
||||
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -526,6 +526,7 @@ packages/lib/htmlUtils2.test.js
|
||||
packages/lib/import-enex-md-gen.test.js
|
||||
packages/lib/import-enex-md-gen.js
|
||||
packages/lib/import-enex.js
|
||||
packages/lib/initLib.js
|
||||
packages/lib/locale.test.js
|
||||
packages/lib/locale.js
|
||||
packages/lib/markdownUtils.test.js
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
}
|
||||
},
|
||||
"devDependencies": {
|
||||
"@joplin/utils": "~2.11",
|
||||
"@joplin/utils": "~2.12",
|
||||
"@seiyab/eslint-plugin-react-hooks": "4.5.1-beta.0",
|
||||
"@typescript-eslint/eslint-plugin": "5.60.0",
|
||||
"@typescript-eslint/parser": "5.60.0",
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
"proper-lockfile": "4.1.2",
|
||||
"read-chunk": "2.1.0",
|
||||
"server-destroy": "1.0.1",
|
||||
"sharp": "0.32.2",
|
||||
"sharp": "0.32.3",
|
||||
"sprintf-js": "1.1.2",
|
||||
"sqlite3": "5.1.6",
|
||||
"string-padding": "1.0.2",
|
||||
|
||||
@@ -174,7 +174,7 @@ export default class ElectronAppWrapper {
|
||||
// so that it can tell us if we can really close the app or not.
|
||||
// Search for "appClose" event for closing logic on renderer side.
|
||||
event.preventDefault();
|
||||
this.win_.webContents.send('appClose');
|
||||
if (this.win_) this.win_.webContents.send('appClose');
|
||||
} else {
|
||||
// If the renderer process has responded, check if we can close or not
|
||||
if (this.rendererProcessQuitReply_.canClose) {
|
||||
|
||||
@@ -26,6 +26,7 @@ interface State {
|
||||
|
||||
interface Props {
|
||||
message?: string;
|
||||
children: any;
|
||||
}
|
||||
|
||||
export default class ErrorBoundary extends React.Component<Props, State> {
|
||||
|
||||
@@ -99,7 +99,7 @@ function CodeMirror(props: NoteBodyEditorProps, ref: any) {
|
||||
}
|
||||
}, []);
|
||||
|
||||
const addListItem = useCallback((string1, defaultText = '') => {
|
||||
const addListItem = useCallback((string1: string, defaultText = '') => {
|
||||
if (editorRef.current) {
|
||||
if (editorRef.current.somethingSelected()) {
|
||||
editorRef.current.wrapSelectionsByLine(string1);
|
||||
|
||||
@@ -141,7 +141,7 @@ export default function useScrollHandler(editorRef: any, webviewRef: any, onScro
|
||||
// eslint-disable-next-line @seiyab/react-hooks/exhaustive-deps -- Old code before rule was applied
|
||||
}, []);
|
||||
|
||||
const editor_resize = useCallback((cm) => {
|
||||
const editor_resize = useCallback((cm: any) => {
|
||||
if (isCodeMirrorReady(cm)) {
|
||||
// This handler is called when resized and refreshed.
|
||||
// Only when resized, the scroll position is restored.
|
||||
|
||||
@@ -324,7 +324,7 @@ function NoteEditor(props: NoteEditorProps) {
|
||||
|
||||
const onMessage = useMessageHandler(scrollWhenReady, setScrollWhenReady, editorRef, setLocalSearchResultCount, props.dispatch, formNote);
|
||||
|
||||
const externalEditWatcher_noteChange = useCallback((event) => {
|
||||
const externalEditWatcher_noteChange = useCallback((event: any) => {
|
||||
if (event.id === formNote.id) {
|
||||
const newFormNote = {
|
||||
...formNote,
|
||||
@@ -337,7 +337,7 @@ function NoteEditor(props: NoteEditorProps) {
|
||||
// eslint-disable-next-line @seiyab/react-hooks/exhaustive-deps -- Old code before rule was applied
|
||||
}, [formNote]);
|
||||
|
||||
const onNotePropertyChange = useCallback((event) => {
|
||||
const onNotePropertyChange = useCallback((event: any) => {
|
||||
setFormNote(formNote => {
|
||||
if (formNote.id !== event.note.id) return formNote;
|
||||
|
||||
|
||||
@@ -78,7 +78,7 @@ export async function commandAttachFileToBody(body: string, filePaths: string[]
|
||||
logger.info(`Attaching ${filePath}`);
|
||||
const newBody = await shim.attachFileToNoteBody(body, filePath, options.position, {
|
||||
createFileURL: options.createFileURL,
|
||||
resizeLargeImages: 'ask',
|
||||
resizeLargeImages: Setting.value('imageResizing'),
|
||||
});
|
||||
|
||||
if (!newBody) {
|
||||
|
||||
@@ -84,11 +84,11 @@ function NoteListItem(props: NoteListItemProps, ref: any) {
|
||||
dragItemPosition = 'bottom';
|
||||
}
|
||||
|
||||
const onTitleClick = useCallback((event) => {
|
||||
const onTitleClick = useCallback((event: any) => {
|
||||
props.onTitleClick(event, props.item);
|
||||
}, [props.onTitleClick, props.item]);
|
||||
|
||||
const onCheckboxClick = useCallback((event) => {
|
||||
const onCheckboxClick = useCallback((event: any) => {
|
||||
props.onCheckboxClick(event, props.item);
|
||||
}, [props.onCheckboxClick, props.item]);
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
|
||||
const { default: Logger, TargetType } = require('@joplin/utils/Logger');
|
||||
const initLib = require('@joplin/lib/initLib').default;
|
||||
|
||||
// TODO: Some libraries required by test-utils.js seem to fail to import with the
|
||||
// jsdom environment.
|
||||
@@ -11,9 +12,16 @@ const logger = new Logger();
|
||||
logger.addTarget(TargetType.Console);
|
||||
logger.setLevel(Logger.LEVEL_WARN);
|
||||
Logger.initializeGlobalLogger(logger);
|
||||
initLib(logger);
|
||||
|
||||
|
||||
// @electron/remote requires electron to be running. Mock it.
|
||||
jest.mock('@electron/remote', () => {
|
||||
return { require };
|
||||
return {
|
||||
require: () => {
|
||||
return {
|
||||
default: {},
|
||||
};
|
||||
},
|
||||
};
|
||||
});
|
||||
|
||||
@@ -29,6 +29,7 @@ const EncryptionService = require('@joplin/lib/services/e2ee/EncryptionService')
|
||||
const { FileApiDriverLocal } = require('@joplin/lib/file-api-driver-local');
|
||||
const React = require('react');
|
||||
const nodeSqlite = require('sqlite3');
|
||||
const initLib = require('@joplin/lib/initLib').default;
|
||||
|
||||
// Security: If we attempt to navigate away from the root HTML page, it's likely because
|
||||
// of an improperly sanitized link. Prevent this by closing the window before we can
|
||||
@@ -132,6 +133,10 @@ document.addEventListener('click', (event) => {
|
||||
event.preventDefault();
|
||||
});
|
||||
|
||||
const logger = new Logger();
|
||||
Logger.initializeGlobalLogger(logger);
|
||||
initLib(logger);
|
||||
|
||||
app().start(bridge().processArgv()).then((result) => {
|
||||
if (!result || !result.action) {
|
||||
require('./gui/Root');
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
"@testing-library/react-hooks": "8.0.1",
|
||||
"@types/jest": "29.5.3",
|
||||
"@types/node": "18.16.18",
|
||||
"@types/react": "16.14.43",
|
||||
"@types/react": "18.0.24",
|
||||
"@types/react-redux": "7.1.25",
|
||||
"@types/styled-components": "5.1.26",
|
||||
"electron": "25.3.1",
|
||||
@@ -163,7 +163,7 @@
|
||||
"react-datetime": "3.2.0",
|
||||
"react-dom": "18.2.0",
|
||||
"react-redux": "8.1.1",
|
||||
"react-select": "5.7.3",
|
||||
"react-select": "5.7.4",
|
||||
"react-toggle-button": "2.2.0",
|
||||
"react-tooltip": "4.5.1",
|
||||
"redux": "4.2.1",
|
||||
|
||||
@@ -572,29 +572,16 @@ class NoteScreenComponent extends BaseScreenComponent {
|
||||
|
||||
public async resizeImage(localFilePath: string, targetPath: string, mimeType: string) {
|
||||
const maxSize = Resource.IMAGE_MAX_DIMENSION;
|
||||
|
||||
const dimensions: any = await this.imageDimensions(localFilePath);
|
||||
|
||||
reg.logger().info('Original dimensions ', dimensions);
|
||||
|
||||
let mustResize = dimensions.width > maxSize || dimensions.height > maxSize;
|
||||
|
||||
if (mustResize) {
|
||||
const buttonId = await dialogs.pop(this, _('You are about to attach a large image (%dx%d pixels). Would you like to resize it down to %d pixels before attaching it?', dimensions.width, dimensions.height, maxSize), [
|
||||
{ text: _('Yes'), id: 'yes' },
|
||||
{ text: _('No'), id: 'no' },
|
||||
{ text: _('Cancel'), id: 'cancel' },
|
||||
]);
|
||||
|
||||
if (buttonId === 'cancel') return false;
|
||||
|
||||
mustResize = buttonId === 'yes';
|
||||
}
|
||||
|
||||
if (mustResize) {
|
||||
const saveOriginalImage = async () => {
|
||||
await shim.fsDriver().copy(localFilePath, targetPath);
|
||||
return true;
|
||||
};
|
||||
const saveResizedImage = async () => {
|
||||
dimensions.width = maxSize;
|
||||
dimensions.height = maxSize;
|
||||
|
||||
reg.logger().info('New dimensions ', dimensions);
|
||||
|
||||
const format = mimeType === 'image/png' ? 'PNG' : 'JPEG';
|
||||
@@ -612,11 +599,27 @@ class NoteScreenComponent extends BaseScreenComponent {
|
||||
} catch (error) {
|
||||
reg.logger().warn('Error when unlinking cached file: ', error);
|
||||
}
|
||||
} else {
|
||||
await shim.fsDriver().copy(localFilePath, targetPath);
|
||||
return true;
|
||||
};
|
||||
|
||||
const canResize = dimensions.width > maxSize || dimensions.height > maxSize;
|
||||
if (canResize) {
|
||||
const resizeLargeImages = Setting.value('imageResizing');
|
||||
if (resizeLargeImages === 'alwaysAsk') {
|
||||
const userAnswer = await dialogs.pop(this, `${_('You are about to attach a large image (%dx%d pixels). Would you like to resize it down to %d pixels before attaching it?', dimensions.width, dimensions.height, maxSize)}\n\n${_('(You may disable this prompt in the options)')}`, [
|
||||
{ text: _('Yes'), id: 'yes' },
|
||||
{ text: _('No'), id: 'no' },
|
||||
{ text: _('Cancel'), id: 'cancel' },
|
||||
]);
|
||||
if (userAnswer === 'yes') return await saveResizedImage();
|
||||
if (userAnswer === 'no') return await saveOriginalImage();
|
||||
if (userAnswer === 'cancel') return false;
|
||||
} else if (resizeLargeImages === 'alwaysResize') {
|
||||
return await saveResizedImage();
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
return await saveOriginalImage();
|
||||
}
|
||||
|
||||
public async attachFile(pickerResponse: any, fileType: string) {
|
||||
|
||||
@@ -85,6 +85,7 @@ const SyncTargetWebDAV = require('@joplin/lib/SyncTargetWebDAV.js');
|
||||
const SyncTargetDropbox = require('@joplin/lib/SyncTargetDropbox.js');
|
||||
const SyncTargetAmazonS3 = require('@joplin/lib/SyncTargetAmazonS3.js');
|
||||
import BiometricPopup from './components/biometrics/BiometricPopup';
|
||||
import initLib from '@joplin/lib/initLib';
|
||||
|
||||
SyncTargetRegistry.addClass(SyncTargetNone);
|
||||
SyncTargetRegistry.addClass(SyncTargetOneDrive);
|
||||
@@ -474,6 +475,7 @@ async function initialize(dispatch: Function) {
|
||||
}
|
||||
|
||||
Logger.initializeGlobalLogger(mainLogger);
|
||||
initLib(mainLogger);
|
||||
|
||||
reg.setLogger(mainLogger);
|
||||
reg.setShowErrorMessageBoxHandler((message: string) => { alert(message); });
|
||||
|
||||
@@ -6,6 +6,6 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"typedoc": "0.17.8",
|
||||
"typescript": "4.9.5"
|
||||
"typescript": "5.0.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,7 +59,6 @@ import Resource from './models/Resource';
|
||||
import { ProfileConfig } from './services/profileConfig/types';
|
||||
import initProfile from './services/profileConfig/initProfile';
|
||||
import { parseShareCache } from './services/share/reducer';
|
||||
|
||||
import RotatingLogs from './RotatingLogs';
|
||||
|
||||
const appLogger: LoggerWrapper = Logger.create('App');
|
||||
@@ -69,6 +68,7 @@ const appLogger: LoggerWrapper = Logger.create('App');
|
||||
|
||||
interface StartOptions {
|
||||
keychainEnabled?: boolean;
|
||||
setupGlobalLogger?: boolean;
|
||||
}
|
||||
|
||||
export default class BaseApplication {
|
||||
@@ -738,6 +738,7 @@ export default class BaseApplication {
|
||||
public async start(argv: string[], options: StartOptions = null): Promise<any> {
|
||||
options = {
|
||||
keychainEnabled: true,
|
||||
setupGlobalLogger: true,
|
||||
...options,
|
||||
};
|
||||
|
||||
@@ -800,18 +801,15 @@ export default class BaseApplication {
|
||||
const extraFlags = await this.readFlagsFromFile(`${profileDir}/flags.txt`);
|
||||
initArgs = { ...initArgs, ...extraFlags };
|
||||
|
||||
const globalLogger = Logger.globalLogger;
|
||||
|
||||
|
||||
|
||||
const globalLogger = new Logger();
|
||||
globalLogger.addTarget(TargetType.File, { path: `${profileDir}/log.txt` });
|
||||
if (Setting.value('appType') === 'desktop') {
|
||||
globalLogger.addTarget(TargetType.Console);
|
||||
if (options.setupGlobalLogger) {
|
||||
globalLogger.addTarget(TargetType.File, { path: `${profileDir}/log.txt` });
|
||||
if (Setting.value('appType') === 'desktop') {
|
||||
globalLogger.addTarget(TargetType.Console);
|
||||
}
|
||||
globalLogger.setLevel(initArgs.logLevel);
|
||||
}
|
||||
globalLogger.setLevel(initArgs.logLevel);
|
||||
Logger.initializeGlobalLogger(globalLogger);
|
||||
|
||||
|
||||
|
||||
reg.setLogger(Logger.create('') as Logger);
|
||||
// reg.dispatch = () => {};
|
||||
|
||||
9
packages/lib/initLib.ts
Normal file
9
packages/lib/initLib.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import Logger from '@joplin/utils/Logger';
|
||||
|
||||
// @joplin/lib has its own copy of the Logger class, however we want it to be
|
||||
// initialised with the same logger instance as the calling application, so that
|
||||
// the lib and app share the same log. This initLib() function is used for this
|
||||
// and must be called by any "app" package that makes use of the lib package.
|
||||
export default (globalLogger: Logger) => {
|
||||
Logger.initializeGlobalLogger(globalLogger);
|
||||
};
|
||||
@@ -1121,7 +1121,25 @@ class Setting extends BaseModel {
|
||||
storage: SettingStorage.File,
|
||||
isGlobal: true,
|
||||
},
|
||||
|
||||
imageResizing: {
|
||||
value: 'alwaysAsk',
|
||||
type: SettingItemType.String,
|
||||
section: 'note',
|
||||
isEnum: true,
|
||||
public: true,
|
||||
appTypes: [AppType.Mobile, AppType.Desktop],
|
||||
label: () => _('Resize large images:'),
|
||||
description: () => _('Shrink large images before adding them to notes to save storage space.'),
|
||||
options: () => {
|
||||
return {
|
||||
alwaysAsk: _('Always ask'),
|
||||
alwaysResize: _('Always resize'),
|
||||
neverResize: _('Never resize'),
|
||||
};
|
||||
},
|
||||
storage: SettingStorage.File,
|
||||
isGlobal: true,
|
||||
},
|
||||
'plugins.states': {
|
||||
value: '',
|
||||
type: SettingItemType.Object,
|
||||
|
||||
@@ -21,11 +21,11 @@
|
||||
"@types/js-yaml": "4.0.5",
|
||||
"@types/node": "18.16.18",
|
||||
"@types/node-rsa": "1.1.1",
|
||||
"@types/react": "17.0.62",
|
||||
"@types/uuid": "^9.0.0",
|
||||
"@types/react": "18.0.24",
|
||||
"@types/uuid": "9.0.2",
|
||||
"clean-html": "1.5.0",
|
||||
"jest": "29.5.0",
|
||||
"sharp": "0.32.2",
|
||||
"sharp": "0.32.3",
|
||||
"typescript": "5.1.3"
|
||||
},
|
||||
"dependencies": {
|
||||
|
||||
@@ -184,38 +184,42 @@ function shimInit(options = null) {
|
||||
if (shim.isElectron()) {
|
||||
// For Electron
|
||||
const nativeImage = require('electron').nativeImage;
|
||||
let image = nativeImage.createFromPath(filePath);
|
||||
const image = nativeImage.createFromPath(filePath);
|
||||
if (image.isEmpty()) throw new Error(`Image is invalid or does not exist: ${filePath}`);
|
||||
|
||||
const size = image.getSize();
|
||||
|
||||
let mustResize = size.width > maxDim || size.height > maxDim;
|
||||
|
||||
if (mustResize && resizeLargeImages === 'ask') {
|
||||
const answer = shim.showMessageBox(_('You are about to attach a large image (%dx%d pixels). Would you like to resize it down to %d pixels before attaching it?', size.width, size.height, maxDim), {
|
||||
buttons: [_('Yes'), _('No'), _('Cancel')],
|
||||
});
|
||||
|
||||
if (answer === 2) return false;
|
||||
|
||||
mustResize = answer === 0;
|
||||
}
|
||||
|
||||
if (!mustResize) {
|
||||
const saveOriginalImage = async () => {
|
||||
await shim.fsDriver().copy(filePath, targetPath);
|
||||
return true;
|
||||
};
|
||||
const saveResizedImage = async () => {
|
||||
const options = {};
|
||||
if (size.width > size.height) {
|
||||
options.width = maxDim;
|
||||
} else {
|
||||
options.height = maxDim;
|
||||
}
|
||||
const resizedImage = image.resize(options);
|
||||
await shim.writeImageToFile(resizedImage, mime, targetPath);
|
||||
return true;
|
||||
};
|
||||
|
||||
const canResize = size.width > maxDim || size.height > maxDim;
|
||||
if (canResize) {
|
||||
if (resizeLargeImages === 'alwaysAsk') {
|
||||
const Yes = 0, No = 1, Cancel = 2;
|
||||
const userAnswer = shim.showMessageBox(`${_('You are about to attach a large image (%dx%d pixels). Would you like to resize it down to %d pixels before attaching it?', size.width, size.height, maxDim)}\n\n${_('(You may disable this prompt in the options)')}`, {
|
||||
buttons: [_('Yes'), _('No'), _('Cancel')],
|
||||
});
|
||||
if (userAnswer === Yes) return await saveResizedImage();
|
||||
if (userAnswer === No) return await saveOriginalImage();
|
||||
if (userAnswer === Cancel) return false;
|
||||
} else if (resizeLargeImages === 'alwaysResize') {
|
||||
return await saveResizedImage();
|
||||
}
|
||||
}
|
||||
|
||||
const options = {};
|
||||
if (size.width > size.height) {
|
||||
options.width = maxDim;
|
||||
} else {
|
||||
options.height = maxDim;
|
||||
}
|
||||
|
||||
image = image.resize(options);
|
||||
|
||||
await shim.writeImageToFile(image, mime, targetPath);
|
||||
return await saveOriginalImage();
|
||||
} else {
|
||||
// For the CLI tool
|
||||
const image = sharp(filePath);
|
||||
@@ -241,8 +245,6 @@ function shimInit(options = null) {
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
// This is a bit of an ugly method that's used to both create a new resource
|
||||
|
||||
@@ -63,6 +63,7 @@ const { S3Client } = require('@aws-sdk/client-s3');
|
||||
const { Dirnames } = require('../services/synchronizer/utils/types');
|
||||
import RSA from '../services/e2ee/RSA.node';
|
||||
import { State as ShareState } from '../services/share/reducer';
|
||||
import initLib from '../initLib';
|
||||
|
||||
// Each suite has its own separate data and temp directory so that multiple
|
||||
// suites can be run at the same time. suiteName is what is used to
|
||||
@@ -173,6 +174,7 @@ logger.addTarget(TargetType.Console);
|
||||
logger.setLevel(LogLevel.Warn); // Set to DEBUG to display sync process in console
|
||||
|
||||
Logger.initializeGlobalLogger(logger);
|
||||
initLib(logger);
|
||||
|
||||
BaseItem.loadClass('Note', Note);
|
||||
BaseItem.loadClass('Folder', Folder);
|
||||
@@ -916,7 +918,7 @@ class TestApp extends BaseApplication {
|
||||
if (!argv.includes('--profile')) {
|
||||
argv = argv.concat(['--profile', `tests-build/profile/${uuid.create()}`]);
|
||||
}
|
||||
argv = await super.start(['', ''].concat(argv));
|
||||
argv = await super.start(['', ''].concat(argv), { setupGlobalLogger: false });
|
||||
|
||||
// For now, disable sync and encryption to avoid spurious intermittent failures
|
||||
// caused by them interupting processing and causing delays.
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"devDependencies": {
|
||||
"@types/jest": "29.5.3",
|
||||
"@types/pdfjs-dist": "2.10.378",
|
||||
"@types/react": "16.14.43",
|
||||
"@types/react": "18.2.6",
|
||||
"@types/react-dom": "18.2.6",
|
||||
"@types/styled-components": "5.1.26",
|
||||
"babel-jest": "29.5.0",
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@joplin/tools": "~2.12",
|
||||
"@rmp135/sql-ts": "1.17.0",
|
||||
"@rmp135/sql-ts": "1.18.0",
|
||||
"@types/formidable": "2.0.6",
|
||||
"@types/fs-extra": "11.0.1",
|
||||
"@types/jest": "29.5.3",
|
||||
|
||||
@@ -24,6 +24,7 @@ import { RouteResponseFormat, routeResponseFormat } from './utils/routeUtils';
|
||||
import { parseEnv } from './env';
|
||||
import storageConnectionCheck from './utils/storageConnectionCheck';
|
||||
import { setLocale } from '@joplin/lib/locale';
|
||||
import initLib from '@joplin/lib/initLib';
|
||||
import checkAdminHandler from './middleware/checkAdminHandler';
|
||||
|
||||
interface Argv {
|
||||
@@ -215,6 +216,7 @@ async function main() {
|
||||
formatInfo: `%(date_time)s: ${instancePrefix}%(prefix)s: %(message)s`,
|
||||
});
|
||||
Logger.initializeGlobalLogger(globalLogger);
|
||||
initLib(globalLogger);
|
||||
|
||||
if (envFilePath) appLogger().info(`Env variables were loaded from: ${envFilePath}`);
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@ import { createCsrfToken } from '../csrf';
|
||||
import { cookieSet } from '../cookies';
|
||||
import { parseEnv } from '../../env';
|
||||
import { URL } from 'url';
|
||||
import initLib from '@joplin/lib/initLib';
|
||||
|
||||
// Takes into account the fact that this file will be inside the /dist directory
|
||||
// when it runs.
|
||||
@@ -64,6 +65,7 @@ export async function makeTempFileWithContent(content: string | Buffer): Promise
|
||||
function initGlobalLogger() {
|
||||
const globalLogger = new Logger();
|
||||
Logger.initializeGlobalLogger(globalLogger);
|
||||
initLib(globalLogger);
|
||||
}
|
||||
|
||||
let createdDbPath_: string = null;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# Copyright (C) 2001 Laurent Cozic
|
||||
# This file is distributed under the same license as the Joplin-CLI package.
|
||||
# Hrvoje Mandić <trbuhom@net.hr>
|
||||
# Milo Ivir <mail@milotype.de>, 2021., 2022.
|
||||
# Milo Ivir <mail@milotype.de>, 2021., 2022., 2023.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -15,8 +15,10 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 3.0\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: \n"
|
||||
|
||||
#: packages/app-mobile/components/screens/ConfigScreen.tsx:687
|
||||
msgid "- Camera: to allow taking a picture and attaching it to a note."
|
||||
@@ -359,8 +361,8 @@ msgstr ""
|
||||
#: packages/app-cli/app/command-mkbook.ts:33
|
||||
#: packages/app-cli/app/command-mv.js:29
|
||||
msgid ""
|
||||
"Ambiguous notebook \"%s\". Please use short notebook id instead - press "
|
||||
"\"ti\" to see the short notebook id"
|
||||
"Ambiguous notebook \"%s\". Please use short notebook id instead - press \"ti"
|
||||
"\" to see the short notebook id"
|
||||
msgstr ""
|
||||
"Nejednoznačna bilježnica „%s”. Umjesto toga koristi kratki ID bilježnice – "
|
||||
"pritisni „ti” za prikaz kratkog ID-a bilježnice"
|
||||
@@ -1424,9 +1426,8 @@ msgid "Downloading"
|
||||
msgstr "Preuzimanje"
|
||||
|
||||
#: packages/app-mobile/components/voiceTyping/VoiceTypingDialog.tsx:89
|
||||
#, fuzzy
|
||||
msgid "Downloading %s language files..."
|
||||
msgstr "Preuzimanje resursa …"
|
||||
msgstr "Preuzimanje jezičnih datoteka za %s …"
|
||||
|
||||
#: packages/app-cli/app/command-sync.ts:218
|
||||
msgid "Downloading resources..."
|
||||
@@ -2021,9 +2022,8 @@ msgid "Help"
|
||||
msgstr "Pomoć"
|
||||
|
||||
#: packages/app-mobile/components/screens/ConfigScreen.tsx:759
|
||||
#, fuzzy
|
||||
msgid "Hermes enabled: %d"
|
||||
msgstr "Pretraživanje cijelog teksta je aktivirano: %d"
|
||||
msgstr "Hermes aktiviran: %d"
|
||||
|
||||
#: packages/app-desktop/gui/MenuBar.tsx:567
|
||||
msgid "Hide %s"
|
||||
@@ -2445,6 +2445,7 @@ msgstr "Slijed gumbova rasporeda"
|
||||
#: packages/lib/models/Setting.ts:1704
|
||||
msgid "Leave it blank to download the language files from the default website"
|
||||
msgstr ""
|
||||
"Ostavi prazno za preuzimanje jezičnih datoteka sa standardne web stranice"
|
||||
|
||||
#: packages/app-desktop/gui/MainScreen/commands/leaveSharedFolder.ts:10
|
||||
msgid "Leave notebook..."
|
||||
@@ -3460,7 +3461,7 @@ msgstr "Zamijeni sa …"
|
||||
|
||||
#: packages/app-mobile/components/NoteEditor/SearchPanel.tsx:257
|
||||
msgid "Replace: "
|
||||
msgstr "Zamijeni:"
|
||||
msgstr "Zamijeni: "
|
||||
|
||||
#: packages/app-desktop/gui/MainScreen/commands/resetLayout.ts:7
|
||||
msgid "Reset application layout"
|
||||
@@ -3649,9 +3650,8 @@ msgid "Select file..."
|
||||
msgstr "Odaberi datoteku …"
|
||||
|
||||
#: packages/app-mobile/components/screens/folder.js:109
|
||||
#, fuzzy
|
||||
msgid "Select parent notebook"
|
||||
msgstr "Obriši bilježnicu"
|
||||
msgstr "Obriši nadređenu bilježnicu"
|
||||
|
||||
#: packages/app-cli/app/command-server.js:38
|
||||
msgid "Server is already running on port %d"
|
||||
@@ -4940,12 +4940,12 @@ msgstr "Vim"
|
||||
|
||||
#: packages/lib/models/Setting.ts:1705
|
||||
msgid "Voice typing language files (URL)"
|
||||
msgstr ""
|
||||
msgstr "Jezične datoteke za tipkanje glasom (URL)"
|
||||
|
||||
#: packages/app-mobile/components/screens/Note.tsx:994
|
||||
#: packages/app-mobile/components/voiceTyping/VoiceTypingDialog.tsx:119
|
||||
msgid "Voice typing..."
|
||||
msgstr "Tipkanje glasa …"
|
||||
msgstr "Tipkanje glasom …"
|
||||
|
||||
#: packages/app-mobile/components/screens/ConfigScreen.tsx:83
|
||||
msgid "Warning"
|
||||
@@ -4999,9 +4999,8 @@ msgstr ""
|
||||
"pritisni `mn`."
|
||||
|
||||
#: packages/lib/WelcomeUtils.ts:63
|
||||
#, fuzzy
|
||||
msgid "Welcome!"
|
||||
msgstr "Dobro došli"
|
||||
msgstr "Dobro došao, dobro došla!"
|
||||
|
||||
#: packages/lib/models/Setting.ts:1105
|
||||
msgid "When creating a new note:"
|
||||
|
||||
@@ -36,14 +36,14 @@
|
||||
"node-fetch": "2.6.7",
|
||||
"relative": "3.0.2",
|
||||
"request": "2.88.2",
|
||||
"sharp": "0.32.2",
|
||||
"sharp": "0.32.3",
|
||||
"source-map-support": "0.5.21",
|
||||
"uri-template": "2.0.0",
|
||||
"yargs": "17.7.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@joplin/fork-htmlparser2": "^4.1.44",
|
||||
"@rmp135/sql-ts": "1.17.0",
|
||||
"@rmp135/sql-ts": "1.18.0",
|
||||
"@types/fs-extra": "11.0.1",
|
||||
"@types/jest": "29.5.3",
|
||||
"@types/mustache": "4.2.2",
|
||||
|
||||
143
yarn.lock
143
yarn.lock
@@ -4436,7 +4436,7 @@ __metadata:
|
||||
"@testing-library/react-hooks": 8.0.1
|
||||
"@types/jest": 29.5.3
|
||||
"@types/node": 18.16.18
|
||||
"@types/react": 16.14.43
|
||||
"@types/react": 18.0.24
|
||||
"@types/react-redux": 7.1.25
|
||||
"@types/styled-components": 5.1.26
|
||||
async-mutex: 0.4.0
|
||||
@@ -4471,7 +4471,7 @@ __metadata:
|
||||
react-datetime: 3.2.0
|
||||
react-dom: 18.2.0
|
||||
react-redux: 8.1.1
|
||||
react-select: 5.7.3
|
||||
react-select: 5.7.4
|
||||
react-test-renderer: 18.2.0
|
||||
react-toggle-button: 2.2.0
|
||||
react-tooltip: 4.5.1
|
||||
@@ -4688,8 +4688,8 @@ __metadata:
|
||||
"@types/nanoid": 3.0.0
|
||||
"@types/node": 18.16.18
|
||||
"@types/node-rsa": 1.1.1
|
||||
"@types/react": 17.0.62
|
||||
"@types/uuid": ^9.0.0
|
||||
"@types/react": 18.0.24
|
||||
"@types/uuid": 9.0.2
|
||||
async-mutex: 0.4.0
|
||||
base-64: 1.0.0
|
||||
base64-stream: 1.0.0
|
||||
@@ -4734,7 +4734,7 @@ __metadata:
|
||||
relative: 3.0.2
|
||||
reselect: 4.1.8
|
||||
server-destroy: 1.0.1
|
||||
sharp: 0.32.2
|
||||
sharp: 0.32.3
|
||||
sprintf-js: 1.1.2
|
||||
sqlite3: 5.1.6
|
||||
string-padding: 1.0.2
|
||||
@@ -4760,7 +4760,7 @@ __metadata:
|
||||
"@joplin/lib": ~2.12
|
||||
"@types/jest": 29.5.3
|
||||
"@types/pdfjs-dist": 2.10.378
|
||||
"@types/react": 16.14.43
|
||||
"@types/react": 18.2.6
|
||||
"@types/react-dom": 18.2.6
|
||||
"@types/styled-components": 5.1.26
|
||||
async-mutex: 0.4.0
|
||||
@@ -4883,7 +4883,7 @@ __metadata:
|
||||
"@joplin/tools": ~2.12
|
||||
"@joplin/utils": ~2.12
|
||||
"@koa/cors": 3.4.3
|
||||
"@rmp135/sql-ts": 1.17.0
|
||||
"@rmp135/sql-ts": 1.18.0
|
||||
"@types/formidable": 2.0.6
|
||||
"@types/fs-extra": 11.0.1
|
||||
"@types/jest": 29.5.3
|
||||
@@ -4943,7 +4943,7 @@ __metadata:
|
||||
"@joplin/lib": ~2.12
|
||||
"@joplin/renderer": ~2.12
|
||||
"@joplin/utils": ~2.12
|
||||
"@rmp135/sql-ts": 1.17.0
|
||||
"@rmp135/sql-ts": 1.18.0
|
||||
"@types/fs-extra": 11.0.1
|
||||
"@types/jest": 29.5.3
|
||||
"@types/mustache": 4.2.2
|
||||
@@ -4969,7 +4969,7 @@ __metadata:
|
||||
request: 2.88.2
|
||||
rss: 1.2.2
|
||||
sass: 1.63.6
|
||||
sharp: 0.32.2
|
||||
sharp: 0.32.3
|
||||
source-map-support: 0.5.21
|
||||
sqlite3: 5.1.6
|
||||
typescript: 5.1.3
|
||||
@@ -5007,17 +5007,6 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@joplin/utils@npm:~2.11":
|
||||
version: 2.11.2
|
||||
resolution: "@joplin/utils@npm:2.11.2"
|
||||
dependencies:
|
||||
execa: 5.1.1
|
||||
fs-extra: 11.1.1
|
||||
node-fetch: 2.6.7
|
||||
checksum: 95ba577e6e5f7fb2c10e6bdb2694fdaaef31d6f650b5917b70ec35cb720b1357e182458cce894395f7109298847c21ad78932df6d3394fdbc315ecb5fde28630
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@joplin/utils@workspace:packages/utils, @joplin/utils@~2.12":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@joplin/utils@workspace:packages/utils"
|
||||
@@ -6949,9 +6938,9 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@rmp135/sql-ts@npm:1.17.0":
|
||||
version: 1.17.0
|
||||
resolution: "@rmp135/sql-ts@npm:1.17.0"
|
||||
"@rmp135/sql-ts@npm:1.18.0":
|
||||
version: 1.18.0
|
||||
resolution: "@rmp135/sql-ts@npm:1.18.0"
|
||||
dependencies:
|
||||
change-case: ^4.1.2
|
||||
handlebars: ^4.7.7
|
||||
@@ -6979,7 +6968,7 @@ __metadata:
|
||||
optional: true
|
||||
bin:
|
||||
sql-ts: bin/sql-ts
|
||||
checksum: 88bdd92138a592d900755a73f132af5d1214f644a4f1051959faa59ac693e6c2111a27a89bc39ee45bebe1feadcf82022da59a3f8dbabfa2b9d5b3790ea0d5b2
|
||||
checksum: c1a9bf4a4447fab0823e5200ed9c879900c9c744a5f0ff2f49a96b1e072035e37cb58e7be5e19cc6e0ab4e4446bdaeebe25acb7c2b551221b26b9a88e3542f00
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -8010,28 +7999,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/react@npm:16.14.43":
|
||||
version: 16.14.43
|
||||
resolution: "@types/react@npm:16.14.43"
|
||||
dependencies:
|
||||
"@types/prop-types": "*"
|
||||
"@types/scheduler": "*"
|
||||
csstype: ^3.0.2
|
||||
checksum: 10ce3f8b80eadd66178a53845bddf264fa109fcfe0a615a0dce7e027dc426768573e87aee3eba7c53a2a867e159bba928bd86cac92ba93c5bd0152a63a49ccad
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/react@npm:17.0.62":
|
||||
version: 17.0.62
|
||||
resolution: "@types/react@npm:17.0.62"
|
||||
dependencies:
|
||||
"@types/prop-types": "*"
|
||||
"@types/scheduler": "*"
|
||||
csstype: ^3.0.2
|
||||
checksum: 428a5aff44824ef504e9a9259b5894fe44a5db1c344b536990f07e132900ff5b34cbef0be77a84f30f37be1f88fc8b56dce328f568de8d65de3bfe414c05b2e1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/react@npm:18.0.24":
|
||||
version: 18.0.24
|
||||
resolution: "@types/react@npm:18.0.24"
|
||||
@@ -8043,6 +8010,17 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/react@npm:18.2.6":
|
||||
version: 18.2.6
|
||||
resolution: "@types/react@npm:18.2.6"
|
||||
dependencies:
|
||||
"@types/prop-types": "*"
|
||||
"@types/scheduler": "*"
|
||||
csstype: ^3.0.2
|
||||
checksum: dea9d232d8df7ac357367a69dcb557711ab3d5501807ffa77cebeee73d49ee94d095f298e36853c63ed47cce097eee4c7eae2aaa8c02fac3f0171ec1b523a819
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/react@npm:^17.0.52":
|
||||
version: 17.0.52
|
||||
resolution: "@types/react@npm:17.0.52"
|
||||
@@ -8142,13 +8120,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/uuid@npm:^9.0.0":
|
||||
version: 9.0.0
|
||||
resolution: "@types/uuid@npm:9.0.0"
|
||||
checksum: 59ae56d9547c8758588659da2a2b4c97cce79c2aae1798c892bb29452ef08e87859dea2ec3a66bfa88d0d2153147520be2b1893be920f9f0bc9c53a3207ea6aa
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/verror@npm:^1.10.3":
|
||||
version: 1.10.6
|
||||
resolution: "@types/verror@npm:1.10.6"
|
||||
@@ -17404,7 +17375,7 @@ __metadata:
|
||||
resolution: "generate-plugin-doc@workspace:packages/generate-plugin-doc"
|
||||
dependencies:
|
||||
typedoc: 0.17.8
|
||||
typescript: 4.9.5
|
||||
typescript: 5.0.4
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
@@ -21049,7 +21020,7 @@ __metadata:
|
||||
proper-lockfile: 4.1.2
|
||||
read-chunk: 2.1.0
|
||||
server-destroy: 1.0.1
|
||||
sharp: 0.32.2
|
||||
sharp: 0.32.3
|
||||
sprintf-js: 1.1.2
|
||||
sqlite3: 5.1.6
|
||||
string-padding: 1.0.2
|
||||
@@ -28303,9 +28274,9 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"react-select@npm:5.7.3":
|
||||
version: 5.7.3
|
||||
resolution: "react-select@npm:5.7.3"
|
||||
"react-select@npm:5.7.4":
|
||||
version: 5.7.4
|
||||
resolution: "react-select@npm:5.7.4"
|
||||
dependencies:
|
||||
"@babel/runtime": ^7.12.0
|
||||
"@emotion/cache": ^11.4.0
|
||||
@@ -28319,7 +28290,7 @@ __metadata:
|
||||
peerDependencies:
|
||||
react: ^16.8.0 || ^17.0.0 || ^18.0.0
|
||||
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
|
||||
checksum: 9ffa75afb395e7077076521c529611494164ace0c6b1ceb249406991ac668947cfd0424812c15c2a45c792bb2794b22f2df93c4c2f2515962b7dfc7c91b029ec
|
||||
checksum: ca72941ad1d2c578ec04c09ed3deb7e373f987e589f403fadedc6fcc3e29935b5425ec4d2628f0fe58c21319bcaf153c0d0172432e09fc6423da869d848de757
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -29473,7 +29444,7 @@ __metadata:
|
||||
version: 0.0.0-use.local
|
||||
resolution: "root@workspace:."
|
||||
dependencies:
|
||||
"@joplin/utils": ~2.11
|
||||
"@joplin/utils": ~2.12
|
||||
"@seiyab/eslint-plugin-react-hooks": 4.5.1-beta.0
|
||||
"@types/fs-extra": 11.0.1
|
||||
"@typescript-eslint/eslint-plugin": 5.60.0
|
||||
@@ -29990,9 +29961,9 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"sharp@npm:0.32.2":
|
||||
version: 0.32.2
|
||||
resolution: "sharp@npm:0.32.2"
|
||||
"sharp@npm:0.32.3":
|
||||
version: 0.32.3
|
||||
resolution: "sharp@npm:0.32.3"
|
||||
dependencies:
|
||||
color: ^4.2.3
|
||||
detect-libc: ^2.0.1
|
||||
@@ -30003,7 +29974,7 @@ __metadata:
|
||||
simple-get: ^4.0.1
|
||||
tar-fs: ^3.0.4
|
||||
tunnel-agent: ^0.6.0
|
||||
checksum: 2d6b9bcada4c4cc6f606003213d866f975254da011a30972d422086e69ae280973dbedbdb91aa636d98de874fd0eb7af42f0aaff044c22e7e65da28e25c7d63a
|
||||
checksum: 8a6ed0d00bd4d3d6ba92c392fe1f00a4a207f138257a4d903ce5afe5c6d7f684b5218c5b4e8df1097aac960ac10e0114c823f6a8a7e18255bf4a8ec364087051
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -32869,7 +32840,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"typescript@npm:4 - 5":
|
||||
"typescript@npm:4 - 5, typescript@npm:5.0.4":
|
||||
version: 5.0.4
|
||||
resolution: "typescript@npm:5.0.4"
|
||||
bin:
|
||||
@@ -32879,16 +32850,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"typescript@npm:4.9.5, typescript@npm:^4.0.0, typescript@npm:^4.0.2, typescript@npm:^4.5.5":
|
||||
version: 4.9.5
|
||||
resolution: "typescript@npm:4.9.5"
|
||||
bin:
|
||||
tsc: bin/tsc
|
||||
tsserver: bin/tsserver
|
||||
checksum: ee000bc26848147ad423b581bd250075662a354d84f0e06eb76d3b892328d8d4440b7487b5a83e851b12b255f55d71835b008a66cbf8f255a11e4400159237db
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"typescript@npm:5.1.3":
|
||||
version: 5.1.3
|
||||
resolution: "typescript@npm:5.1.3"
|
||||
@@ -32909,7 +32870,17 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"typescript@patch:typescript@4 - 5#~builtin<compat/typescript>":
|
||||
"typescript@npm:^4.0.0, typescript@npm:^4.0.2, typescript@npm:^4.5.5":
|
||||
version: 4.9.5
|
||||
resolution: "typescript@npm:4.9.5"
|
||||
bin:
|
||||
tsc: bin/tsc
|
||||
tsserver: bin/tsserver
|
||||
checksum: ee000bc26848147ad423b581bd250075662a354d84f0e06eb76d3b892328d8d4440b7487b5a83e851b12b255f55d71835b008a66cbf8f255a11e4400159237db
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"typescript@patch:typescript@4 - 5#~builtin<compat/typescript>, typescript@patch:typescript@5.0.4#~builtin<compat/typescript>":
|
||||
version: 5.0.4
|
||||
resolution: "typescript@patch:typescript@npm%3A5.0.4#~builtin<compat/typescript>::version=5.0.4&hash=ad5954"
|
||||
bin:
|
||||
@@ -32919,16 +32890,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"typescript@patch:typescript@4.9.5#~builtin<compat/typescript>, typescript@patch:typescript@^4.0.0#~builtin<compat/typescript>, typescript@patch:typescript@^4.0.2#~builtin<compat/typescript>, typescript@patch:typescript@^4.5.5#~builtin<compat/typescript>":
|
||||
version: 4.9.5
|
||||
resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin<compat/typescript>::version=4.9.5&hash=ad5954"
|
||||
bin:
|
||||
tsc: bin/tsc
|
||||
tsserver: bin/tsserver
|
||||
checksum: 8f6260acc86b56bfdda6004bc53f32ea548f543e8baef7071c8e34d29d292f3e375c8416556c8de10b24deef6933cd1c16a8233dc84a3dd43a13a13265d0faab
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"typescript@patch:typescript@5.1.3#~builtin<compat/typescript>":
|
||||
version: 5.1.3
|
||||
resolution: "typescript@patch:typescript@npm%3A5.1.3#~builtin<compat/typescript>::version=5.1.3&hash=ad5954"
|
||||
@@ -32949,6 +32910,16 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"typescript@patch:typescript@^4.0.0#~builtin<compat/typescript>, typescript@patch:typescript@^4.0.2#~builtin<compat/typescript>, typescript@patch:typescript@^4.5.5#~builtin<compat/typescript>":
|
||||
version: 4.9.5
|
||||
resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin<compat/typescript>::version=4.9.5&hash=ad5954"
|
||||
bin:
|
||||
tsc: bin/tsc
|
||||
tsserver: bin/tsserver
|
||||
checksum: 8f6260acc86b56bfdda6004bc53f32ea548f543e8baef7071c8e34d29d292f3e375c8416556c8de10b24deef6933cd1c16a8233dc84a3dd43a13a13265d0faab
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"typical@npm:^2.6.1":
|
||||
version: 2.6.1
|
||||
resolution: "typical@npm:2.6.1"
|
||||
|
||||
Reference in New Issue
Block a user