diff --git a/.editorconfig b/.editorconfig index 9a922b74d..22620cfbf 100644 --- a/.editorconfig +++ b/.editorconfig @@ -10,3 +10,6 @@ insert_final_newline = true [{*.js,*.ts(x)}] insert_final_newline = true + +[*.tex] +insert_final_newline = false diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c05a6ce2a..e74f42127 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,10 +4,9 @@ on: [ pull_request ] jobs: ChangedCodePathsFilter: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 outputs: rcOutput: ${{ steps.filter.outputs.rcImportsHaveChanged }} - texOutput: ${{ steps.filter.outputs.texFilesHaveChanged }} steps: - name: Clone repository uses: actions/checkout@v3 @@ -22,11 +21,10 @@ jobs: - 'temp-runners/rc_authors_to_process.txt' - 'temp-runners/rc_ids_to_ignore.txt' - 'temp-runners/rc_ids_to_process.txt' - texFilesHaveChanged: 'LaTeX/**/*.tex' Build: needs: ChangedCodePathsFilter - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - name: Clone repository uses: actions/checkout@v3 @@ -49,7 +47,7 @@ jobs: ImportFromRCBasedOnAuthorsOrIds: needs: [ ChangedCodePathsFilter, Build ] - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 if: needs.ChangedCodePathsFilter.outputs.rcOutput == 'true' steps: - name: Clone repository @@ -90,7 +88,7 @@ jobs: AutoUpdateMeta: needs: [ Build ] - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - name: Clone repository uses: actions/checkout@v3 @@ -119,20 +117,3 @@ jobs: env: CI: true FORCE_COLOR: 2 - - CompileLaTeX: - needs: [ ChangedCodePathsFilter, Build ] - runs-on: ubuntu-latest - if: needs.ChangedCodePathsFilter.outputs.texOutput == 'true' - steps: - - name: Clone repository - uses: actions/checkout@v3 - with: - ref: ${{ github.event.pull_request.head.ref }} - - - name: Compile BES Conduct LaTeX doc - uses: xu-cheng/latex-action@v3 - with: - root_file: BES_Conduct_Afisaj.tex - working_directory: LaTeX/conduct/ - latexmk_shell_escape: true diff --git a/.github/workflows/deploy_to_gdrive.yml b/.github/workflows/deploy_to_gdrive.yml index f9ce55963..0220f783d 100644 --- a/.github/workflows/deploy_to_gdrive.yml +++ b/.github/workflows/deploy_to_gdrive.yml @@ -16,7 +16,7 @@ on: jobs: DeployToGDrive: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - name: Checkout bes-lyrics repo uses: actions/checkout@v3 diff --git a/.github/workflows/latex_conduct_release.yml b/.github/workflows/latex_conduct_release.yml index f62b908f6..0b3f30f11 100644 --- a/.github/workflows/latex_conduct_release.yml +++ b/.github/workflows/latex_conduct_release.yml @@ -10,7 +10,7 @@ on: jobs: LaTeXConductRelease: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - name: Clone repository uses: actions/checkout@v3 @@ -34,6 +34,6 @@ jobs: files: 'LaTeX/conduct/BES_Conduct_Afisaj.pdf' tag_name: ${{ steps.tag.outputs.release_tag }} fail_on_unmatched_files: true - draft: true + draft: false env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/latex_songbook_release.yml b/.github/workflows/latex_songbook_release.yml new file mode 100644 index 000000000..bbdced5aa --- /dev/null +++ b/.github/workflows/latex_songbook_release.yml @@ -0,0 +1,58 @@ +name: 'LaTeX Songbook (no chords))' + +on: + push: + branches: + - leadsheets-without-chords + # paths: + # - 'verified/trupe_lauda_si_inchinare/**' + workflow_dispatch: + +jobs: + LaTeXSongbookRelease: + runs-on: ubuntu-24.04 + steps: + - name: Clone repository + uses: actions/checkout@v3 + with: + ref: ${{ github.event.pull_request.head.ref }} + + - name: Install Fonts + run: | + sudo apt-get update + echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | sudo debconf-set-selections + sudo apt-get install --reinstall ttf-mscorefonts-installer + sudo fc-cache -fv # Refresh the font cache + + - name: Use Node.js 20.x + uses: actions/setup-node@v3 + with: + node-version: 20.x + + - name: Run Build songbook TEX + run: | + npm i && npm run songbook:convert + env: + CI: true + + - name: Compile BES Songbook LaTeX doc + uses: xu-cheng/latex-action@v3 + with: + root_file: bes-songbook.tex + working_directory: LaTeX/songbook/ + latexmk_shell_escape: true + latexmk_use_xelatex: true + + - name: Generate Release Tag + id: tag + run: echo "{name}={release_tag::BES_Songbook_$(date +"%Y-%B-%d-%H%M")}" >> $GITHUB_OUTPUT + + - name: Release + uses: softprops/action-gh-release@v1 + with: + files: 'LaTeX/songbook/bes-songbook.pdf' + tag_name: ${{ steps.tag.outputs.release_tag }} + fail_on_unmatched_files: true + draft: false + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index 40fa11c6b..910eb098c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,9 @@ +/.idea/aws.xml +/.idea/cssdialects.xml +/.idea/nx-console.xml +/.idea/git_toolbox_blame.xml +/.idea/git_toolbox_prj.xml +/.idea/webResources.xml node_modules/ **/*.aux **/*.fdb_latexmk @@ -9,8 +15,6 @@ node_modules/ **/*.out **/*.thm **/*.xdv -**/*.bes-songbook.tex -target-tex-common-songbook -/.idea/aws.xml -/.idea/cssdialects.xml -/.idea/nx-console.xml +bes-songbook.tex +bes-songbook.pdf +target-tex diff --git a/.idea/bes-lyrics.iml b/.idea/bes-lyrics.iml index f40ddf713..e80e39b20 100644 --- a/.idea/bes-lyrics.iml +++ b/.idea/bes-lyrics.iml @@ -2,6 +2,7 @@ + @@ -9,7 +10,4 @@ - - \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 000000000..b5af900ec --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/git_toolbox_blame.xml b/.idea/git_toolbox_blame.xml new file mode 100644 index 000000000..7dc124965 --- /dev/null +++ b/.idea/git_toolbox_blame.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/git_toolbox_prj.xml b/.idea/git_toolbox_prj.xml new file mode 100644 index 000000000..02b915b85 --- /dev/null +++ b/.idea/git_toolbox_prj.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations/Compile_Leadsheet_Songs_Once__Latexmk___xelatex_.xml b/.idea/runConfigurations/Compile_Leadsheet_Songs_Once__Latexmk___xelatex_.xml new file mode 100644 index 000000000..78a09dfc3 --- /dev/null +++ b/.idea/runConfigurations/Compile_Leadsheet_Songs_Once__Latexmk___xelatex_.xml @@ -0,0 +1,24 @@ + + + + LATEXMK + + + BUILT-IN-PDF-VIEWER + + -pdf -xelatex -f -gg -interaction=nonstopmode + + + $PROJECT_DIR$/LaTeX/songbook/bes-songbook.tex + $PROJECT_DIR$/LaTeX/songbook + {projectDir}/auxil + false + PDF + TEXLIVE + true + [] + [] + + + + \ No newline at end of file diff --git a/.idea/runConfigurations/Compile_Leadsheet_Songs_Once___Stop_On_Error__Latexmk___xelatex_.xml b/.idea/runConfigurations/Compile_Leadsheet_Songs_Once___Stop_On_Error__Latexmk___xelatex_.xml new file mode 100644 index 000000000..5c2d9c3c4 --- /dev/null +++ b/.idea/runConfigurations/Compile_Leadsheet_Songs_Once___Stop_On_Error__Latexmk___xelatex_.xml @@ -0,0 +1,24 @@ + + + + LATEXMK + + + BUILT-IN-PDF-VIEWER + + -pdf -xelatex -f -gg -interaction=nonstopmode -halt-on-error + + + $PROJECT_DIR$/LaTeX/songbook/bes-songbook.tex + $PROJECT_DIR$/leadsheet + {projectDir}/auxil + false + PDF + TEXLIVE + true + [] + [] + + + + \ No newline at end of file diff --git a/.idea/runConfigurations/Run___Temp__add_songs_from_rc_by_ids.xml b/.idea/runConfigurations/Run___Temp__add_songs_from_rc_by_ids.xml index c67bc6733..64e307364 100644 --- a/.idea/runConfigurations/Run___Temp__add_songs_from_rc_by_ids.xml +++ b/.idea/runConfigurations/Run___Temp__add_songs_from_rc_by_ids.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/.idea/watcherTasks.xml b/.idea/watcherTasks.xml index 6ae48b5f8..23a0ffc2f 100644 --- a/.idea/watcherTasks.xml +++ b/.idea/watcherTasks.xml @@ -1,7 +1,7 @@ - + - + + + + \ No newline at end of file diff --git a/.idea/webResources.xml b/.idea/webResources.xml index 259ad7de2..89bb66600 100644 --- a/.idea/webResources.xml +++ b/.idea/webResources.xml @@ -12,6 +12,9 @@ + + + diff --git a/.run/Run_ [Temp] add songs from rc by authors.run.xml b/.run/Run_ [Temp] add songs from rc by authors.run.xml index fffd99be5..17c7dd630 100644 --- a/.run/Run_ [Temp] add songs from rc by authors.run.xml +++ b/.run/Run_ [Temp] add songs from rc by authors.run.xml @@ -1,5 +1,5 @@ - + - \ No newline at end of file + diff --git a/.run/Run_ [Temp] cherry pick songs we have in church.run.xml b/.run/Run_ [Temp] cherry pick songs we have in church.run.xml index 1407b4e8d..22170a391 100644 --- a/.run/Run_ [Temp] cherry pick songs we have in church.run.xml +++ b/.run/Run_ [Temp] cherry pick songs we have in church.run.xml @@ -1,5 +1,5 @@ - + - \ No newline at end of file + diff --git a/LaTeX/conduct/BES_Conduct_Afisaj.pdf b/LaTeX/conduct/BES_Conduct_Afisaj.pdf new file mode 100644 index 000000000..c081785c4 Binary files /dev/null and b/LaTeX/conduct/BES_Conduct_Afisaj.pdf differ diff --git a/LaTeX/songbook/bes-songbook-config.tex b/LaTeX/songbook/bes-songbook-config.tex new file mode 100644 index 000000000..819c0fb5a --- /dev/null +++ b/LaTeX/songbook/bes-songbook-config.tex @@ -0,0 +1,128 @@ +%See https://tex.stackexchange.com/questions/718798/leadsheets-package-for-songs-height-prop-undefined +\ExplSyntaxOn +\UseName{prop_new:c}{l__leadsheets_songs_height_prop} +\ExplSyntaxOff + +\usepackage{tocloft} % For customizing ToC +% TOC customize +\setlength{\cftsecnumwidth}{2em} % Adjust width for section numbers in ToC + +% Adjust the font size of section entries in the ToC +\renewcommand{\cftsecfont}{\normalsize} % Normal size for sections +\renewcommand{\cftsecpagefont}{\normalsize} % Normal size for page numbers +\renewcommand{\cftsecleader}{\cftdotfill{\cftdotsep}} % Use dotted leaders + +% Adjust vertical spacing between section entries in the ToC +\setlength{\cftbeforesecskip}{0.3em} % Space before each section +\setlength{\cftbeforesubsecskip}{0.15em} % Space before each subsection + +% Translations +\newversetype{prechorus} + +\DeclareTranslation{English}{leadsheets/major}{Major} +\DeclareTranslation{English}{leadsheets/minor}{Minor} +\DeclareTranslation{English}{leadsheets/composer}{Compozitor} +\DeclareTranslation{English}{leadsheets/lyrics}{Versuri} +\DeclareTranslation{English}{leadsheets/key}{Gama} +\DeclareTranslation{English}{leadsheets/capo}{Capo} +\DeclareTranslation{English}{leadsheets/fret}{Fret} +\DeclareTranslation{English}{leadsheets/interpret}{Interpret} + +\DeclareTranslation{English}{leadsheets/intro}{Intro} +\DeclareTranslation{English}{leadsheets/interlude}{Interludiu} +\DeclareTranslation{English}{leadsheets/bridge}{Bridge} +\DeclareTranslation{English}{leadsheets/chorus}{Refren} +% Hack - We use it for the ending +\DeclareTranslation{English}{leadsheets/outro}{End} +\DeclareTranslation{English}{leadsheets/prechorus}{Prerefren} +\DeclareTranslation{English}{leadsheets/solo}{Solo} +\DeclareTranslation{English}{leadsheets/verse}{Vers} + +\defineversetypetemplate{framed} +{% + \expandcode{% + \noexpand\mdframed[ + \ifversestarred{}{% + frametitle={% + \noexpand\tikz[baseline=(current bounding box.east),outer sep=0pt] + \noexpand\node[anchor=east,rectangle,fill=gray!20,rounded corners=2pt] + {\noexpand\strut\noexpand\verselabel}; + }% + }, + roundcorner = 5pt , + linecolor = gray!20 , + linewidth = 2pt, + topline = true, + frametitleaboveskip = \dimexpr-\ht\strutbox\relax , + ]% + }% + \setlength\parindent{0pt} + \setlength\parskip{\parsep} + \ifobeylines + {\setleadsheets{ obey-lines-parskip=\parskip }\setlength\parskip{0pt}} + {\vspace*{-\parskip}}% +} +{% + \endmdframed + \addvspace{\baselineskip}% +} + +% Redefine section titles +\usepackage{titlesec} +% Section with custom fonts for number and title +\titleformat{\section} + {\large\bfseries\color{darkgray}} % Custom font, bold, dark gray + {Nr. \thesection} % Include the number + {1.5em} + {} % Convert title to uppercase + +\definesongtitletemplate{bes-title-template}{ + \ifsongmeasuring + {\section*} + {\section}% + {\songproperty{title}} + \begingroup\footnotesize + \begin{tabular}{ + @{} + >{\raggedright\arraybackslash}p{.5\linewidth} + @{} + >{\raggedleft\arraybackslash}p{.5\linewidth} + @{} + } + \ifsongproperty{interpret} + {\GetTranslation{leadsheets/interpret}} + {}% + \ifsongproperty{composer} + {% + & + \GetTranslation{leadsheets/composer}: % + \printsongpropertylist{composer}{ \& }{, }{ \& } + \ifsongproperty{lyrics} + { + \\ & + \GetTranslation{leadsheets/lyrics}: % + \printsongpropertylist{lyrics}{ \& }{, }{ \& } + } + {}% + } + {}% + \ifsongproperty{interpret}{\\}{\ifsongproperty{composer}{\\}{}}% + \ifsongproperty{genre} + {& Genre: \songproperty{genre} \\} + {}% + \ifsongproperty{tempo} + {& Tempo: \songproperty{tempo} \\} + {}% + \ifsongproperty{key} + {% + & \setchords{ + major = -\GetTranslation{leadsheets/major} , + minor = -\GetTranslation{leadsheets/minor} + }% + \GetTranslation{leadsheets/key}: % + \expandcode{\writechord{\songproperty{key}}} \\% + } + {}% + \end{tabular} + \par\endgroup +} \ No newline at end of file diff --git a/LaTeX/songbook/bes-songbook.template.txt b/LaTeX/songbook/bes-songbook.template.txt new file mode 100644 index 000000000..7fc0b346a --- /dev/null +++ b/LaTeX/songbook/bes-songbook.template.txt @@ -0,0 +1,145 @@ +% ===================================================================== +% This file is auto-generated. +% +% Copyright (c) 2024 BES (ioan.lucut88@gmail.com) +% +% Do not edit this file directly. Do it only in the template (.template.txt). +% Any changes made will be overwritten the next time the file is generated. +% ===================================================================== + +\documentclass{scrartcl} + +\usepackage{scrextend} % Compatibility layer +\usepackage[full]{leadsheets} + +\usepackage{array} + +% For adding color +\usepackage{xcolor} + +% For frame in chorus +\usepackage{mdframed} +\usepackage{tikz} + +% https://mirrors.nxthost.com/ctan/macros/latex/contrib/leadsheets/leadsheets_en.pdf +% Page 50 +% Loading the external library allows to include complete leadsheet documents (i. e., with preamble) into a main document. +\useleadsheetslibraries{external} + +% https://tex.stackexchange.com/questions/352804/setmainfont-vs-fontspec +\usepackage{fontspec} +\usepackage[12pt]{extsizes} +%\usepackage{librecaslon} +%\usepackage{librecaslon} +%\setmainfont{Fira Sans} +%\setmainfont{Lato} +%\setmainfont{Roboto} +%\setmainfont{Crimson Pro} + +%\usepackage[T1]{fontenc} +%\setmainfont{Georgia} % A pleasant serif font for lyrics +%\newfontfamily\chordfont{Arial} % A clear sans-serif font for chords + +% https://tex.stackexchange.com/questions/664/why-should-i-use-usepackaget1fontenc +% Diacriticile nu functioneaza cu fontenc +%\usepackage[T1]{fontenc} + +% Use copyright, see https://tex.stackexchange.com/questions/1676/how-to-get-good-looking-copyright-and-registered-symbols +\usepackage{textcomp} + +% https://tex.stackexchange.com/questions/641189/what-is-the-function-usepackageutf8inputenc-used-for-and-why-we-should-add +\usepackage[utf8]{inputenc} + +% For links +%\usepackage{hyperref} +\usepackage[colorlinks=true, linkcolor=darkgray, urlcolor=darkgray, citecolor=darkgray]{hyperref} + +% Global configs for the leadhseets class +\setleadsheets{ + title-template = bes-title-template, + bar-shortcuts, + verse/numbered, + verse/named = false, + verses-format =, + verses-label-format = \bfseries, + info/format = \itshape, +% chorus/format = \itshape, + bar-shortcuts = true, + obey-lines = false, + smash-chords = false, +% after-song = AS, +% after-title = AT, +} + +% Setup for headers and footers +\usepackage[automark]{scrlayer-scrpage} + +% Clear existing headers and footers +\clearpairofpagestyles + +% Define headers with underline +\ihead{\textit{Caiet de cântece BES.}\par\noindent\rule{\textwidth}{0.4pt}} % Inner (left) header with underline +\ohead{\textbf{Pagina \thepage}\par\noindent\rule{\textwidth}{0.4pt}} % Outer (right) header with underline +\cfoot{\textit{\textcopyright\ 2025 BES. Toate drepturile rezervate.}} % Centered footer + +\input{bes-songbook-config.tex} + +\begin{document} + + \begin{titlepage} + \begin{center} + % Add some vertical space at the top + \vspace*{2cm} + + % Title + {\Huge \textbf{Caiet de Cântece}} \\ + \vspace{0.5cm} + {\LARGE \textbf{BES - 2025}} \\ + + % Add a decorative horizontal line + \vspace{1cm} + \rule{\textwidth}{0.5mm} + \vspace{0.5cm} + + % Subtitle or description + {\Large Compilat cu dragoste pentru comunitate} \\ + + % Spacer to align elements nicely + \vspace{\fill} + + % Footer with credits + {\small Creat cu Leadsheets} \\ + {\footnotesize\url{https://github.com/ioanlucut/bes-lyrics}} + + % Spacer to push content upwards + \vspace{2cm} + \end{center} + \end{titlepage} + + % Table of content + % Set a custom title for the Table of Contents in another language + \renewcommand{\contentsname}{\textbf{Cuprins}} + + % Set a custom title for the Table of Contents + \renewcommand{\contentsname}{Conținut} % Suppress the default "Contents" title + + % Add the title to the Table of Contents without numbering + \addcontentsline{toc}{section}{\contentsname} + + % Display the Table of Contents + \begin{center} + \vspace*{1cm} + {\Huge \textbf{Cuprins}} % Center the title + \vspace*{0.5cm} + \end{center} + + \tableofcontents + + \vspace{1cm} % Add spacing after the Table of Contents + \noindent\rule{\textwidth}{0.5mm} % Add a decorative horizontal rule + \vspace{1cm} + % End - Table of content + + % Leadsheets + {{REPLACE_ME}} +\end{document} diff --git a/LaTeX/songbook/convertToSongbookTex.ts b/LaTeX/songbook/convertToSongbookTex.ts new file mode 100644 index 000000000..8885bff9e --- /dev/null +++ b/LaTeX/songbook/convertToSongbookTex.ts @@ -0,0 +1,118 @@ +import chalk from 'chalk'; +import dotenv from 'dotenv'; +import fs from 'fs'; +import fsExtra from 'fs-extra'; +import { flatten } from 'lodash-es'; +import pMap from 'p-map'; +import path from 'path'; +import * as process from 'process'; +import { fileURLToPath } from 'url'; +import { + EMPTY_STRING, + logFileWithLinkInConsole, + logProcessingFile, + NEW_LINE, + padForTex, + parse, + readTxtFilesRecursively, + TEX_EXTENSION, + TEX_MUSICAL_NOTATIONS, + TXT_EXTENSION, +} from '../../src/index.js'; +import { convertSongToLeadsheet } from '../../src/songToLeadsheetConverter.js'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +dotenv.config(); + +const TEMPLATE_FILE = 'bes-songbook.template.txt'; +const BES_SONGBOOK_FILE = 'bes-songbook.tex'; +const TEX_OUTPUT = 'target-tex'; + +const escapeRequiredChars = (songMetaContent: string) => + songMetaContent.replaceAll(/&/g, '\\&'); + +const readFiles = async (dir: string) => + (await readTxtFilesRecursively(dir)).map((filePath) => { + const contentAsString = fs.readFileSync(filePath).toString(); + + return { + fileName: path.basename(filePath), + filePath, + songAST: parse(contentAsString, { rejoinSubsections: true }), + contentAsString, + }; + }); + +const runForDirs = async (songsDirs: string[]) => { + const generatedFiles = await pMap( + flatten(await Promise.all(songsDirs.map(readFiles))).sort( + ({ songAST: songASTa }, { songAST: songASTb }) => + [ + songASTa.title, + songASTa.alternative, + songASTa.composer, + songASTa.arranger, + songASTa.band, + songASTa.genre, + songASTa.version, + ] + .join(EMPTY_STRING) + .localeCompare( + [ + songASTb.title, + songASTb.alternative, + songASTb.composer, + songASTb.arranger, + songASTb.band, + songASTb.genre, + songASTb.version, + ].join(EMPTY_STRING), + ), + ), + async ({ contentAsString, fileName, filePath, songAST }) => { + logProcessingFile( + fileName, + `Converting to TEX the song with title: ${songAST.title}.`, + ); + logFileWithLinkInConsole(filePath); + + if (!contentAsString.includes(TEX_MUSICAL_NOTATIONS)) { + console.warn( + `The song does not have musical notations present: "${chalk.yellow( + filePath, + )}"`, + ); + } + + const contentAsTex = convertSongToLeadsheet(songAST); + + // Use absolute path here + const absoluteFilePath = path.join( + __dirname, + TEX_OUTPUT, + fileName.replace(TXT_EXTENSION, TEX_EXTENSION), + ); + fs.writeFileSync(absoluteFilePath, contentAsTex); + + return absoluteFilePath; + }, + ); + + const dynamicLeadsheetSongs = generatedFiles + .filter(Boolean) + .map((relativeFilePath) => + padForTex(2)(`\\includeleadsheet{${relativeFilePath}}`), + ) + .join(NEW_LINE); + + const compiledTemplate = fs + .readFileSync(path.join(__dirname, TEMPLATE_FILE)) + .toString() + .replace('{{REPLACE_ME}}', dynamicLeadsheetSongs); + + fs.writeFileSync(path.join(__dirname, BES_SONGBOOK_FILE), compiledTemplate); +}; + +fsExtra.ensureDirSync(path.join(__dirname, TEX_OUTPUT)); +await runForDirs([`${process.env.VERIFIED_DIR}/trupe_lauda_si_inchinare`]); diff --git a/bin/lyricsIdUniquenessValidator.ts b/bin/lyricsIdUniquenessValidator.ts index 0c8ce6739..953056fe2 100644 --- a/bin/lyricsIdUniquenessValidator.ts +++ b/bin/lyricsIdUniquenessValidator.ts @@ -15,7 +15,7 @@ import * as process from 'process'; import { COMMA, EMPTY_STRING, - NEW_LINE_TUPLE, + NEW_LINE, parse, readTxtFilesRecursively, } from '../src/index.js'; @@ -47,7 +47,7 @@ const runValidator = async (dir: string) => { isEmpty(maybeSongsWithoutId), `There are missing IDS: ${maybeSongsWithoutId .map(({ id, fileName }) => `${fileName} with wrong/missing id: "${id}"`) - .join(NEW_LINE_TUPLE)}`, + .join(NEW_LINE)}`, ); assert.equal( diff --git a/bin/lyricsRomanianDictionaryAnalyzer.ts b/bin/lyricsRomanianDictionaryAnalyzer.ts index f046f277f..b204a23e1 100644 --- a/bin/lyricsRomanianDictionaryAnalyzer.ts +++ b/bin/lyricsRomanianDictionaryAnalyzer.ts @@ -25,7 +25,6 @@ import { CHARS_SEPARATORS, ERROR_CODE, NEW_LINE, - NEW_LINE_TUPLE, SongSection, TEST_FILE, TXT_EXTENSION, @@ -126,7 +125,7 @@ const speller = nspell(romanianDictionary).personal( ); const rawWords = await analyzeAndGet(process.env.VERIFIED_DIR, speller); -const unknownOrIncorrectWords = without(uniq(rawWords).sort(), NEW_LINE_TUPLE); +const unknownOrIncorrectWords = without(uniq(rawWords).sort(), NEW_LINE); if (!isEmpty(unknownOrIncorrectWords)) { console.log( diff --git a/candidates/Agape/Agape - Aici te astept azi.txt b/candidates/Agape/Agape - Aici te astept azi.txt deleted file mode 100644 index 36fbcd556..000000000 --- a/candidates/Agape/Agape - Aici te astept azi.txt +++ /dev/null @@ -1,19 +0,0 @@ -[title] -Aici te astept azi {alternative: {*}, composer: {Agape}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {1013}, id: {pgzbysuo7F9LH8PusFSVV6}, contentHash: {3bbd8f}} - -[sequence] -v1,c - -[v1] -Aici Te aștept azi, -Locuiește-n min’, Te rog. -Tânjesc după Tine din nou, -M-ascunzi în iubirea-Ți, -Du-mă pe genunchi, -Să Te cunosc vreau tot mai mult. - -[c] -Trăiește-n min’, -Viața mea inund-o, -Respiri în min’, -Să mă-nalț pe aripi spre Tin’. diff --git a/candidates/Agape/Agape - Si pe mine si pe tine.txt b/candidates/Agape/Agape - Si pe mine si pe tine.txt deleted file mode 100644 index 1c258470a..000000000 --- a/candidates/Agape/Agape - Si pe mine si pe tine.txt +++ /dev/null @@ -1,18 +0,0 @@ -[title] -Si pe mine si pe tine {alternative: {*}, composer: {Agape}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {5066}, id: {e7XfxjREiZGnzsuaH61whW}, contentHash: {9e1c78}} - -[sequence] -c,v1,c - -[c] -/: Și pe mine, și pe tine -Ne-a salvat Isus, -Și ne-a pregătit un loc, -’ -Colo-n ceruri, sus. :/ - -[v1] -Haină albă ca zăpada -Domnul Isus ne-a promis -Că ne duce-n veșnicie, -În cerescul paradis. diff --git a/candidates/Agape/Agape - Stam uniti in adorare.txt b/candidates/Agape/Agape - Stam uniti in adorare.txt deleted file mode 100644 index 4a10cdcbb..000000000 --- a/candidates/Agape/Agape - Stam uniti in adorare.txt +++ /dev/null @@ -1,27 +0,0 @@ -[title] -Stam uniti in adorare {alternative: {*}, composer: {Agape}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {6879}, id: {hpcb7tCLPe8hU3kvz8Ed5G}, contentHash: {6171e9}} - -[sequence] -v1,c,v2,c2 - -[v1] -Estamos todos unidos adorandote señor, -Alabanza se les damos en tu presencia hoy. - -[c] -Le cantamos eres digno de suprema exaltación -Las canciones cantaran digno eres, -O, digno del gloria, digno eres Tu. - -[v2] -Stăm uniți în adorare -În prezența Domnului -Înălțăm laudele noastre -Dându-I glorie numai Lui - -[c2] -Îți cântăm: vrednic de laudă -Ești deasupra tuturor -Azi Biserica îți cântă -Tu ești vrednic, Mielul lui Dumnezeu. -Vrednic ești doar Tu. diff --git a/candidates/BBSO/BBSO - Inainte sa-ntelegem harul tau (doar prin crucea ta ).txt b/candidates/BBSO/BBSO - Inainte sa-ntelegem harul tau (doar prin crucea ta ).txt deleted file mode 100644 index 65df49c38..000000000 --- a/candidates/BBSO/BBSO - Inainte sa-ntelegem harul tau (doar prin crucea ta ).txt +++ /dev/null @@ -1,35 +0,0 @@ -[title] -Inainte sa-ntelegem harul tau (doar prin crucea ta ) {alternative: {*}, composer: {BBSO}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {234970}, id: {aecVsNWxsx52dwz8CvivEU}, contentHash: {f4440d}} - -[sequence] -v1,b,c,v2,b,c,e - -[v1] -Inainte sa-ntelegem harul Tau bogat -Tu cuvantul viu din Tatal sfant si adorat -Ne-ai deschis cararea vietii -Sa pasim spre cer -Ne-ai zdrobit din suflet moartea -Te-ai jertfit ca Miel - -[b] -Tu esti primul, inceputul, esti Dumnezeu -Tu esti chipul Celui Vesnic esti Domnul Meu -Tu esti primul, inceputul, esti Dumnezeu -Tu esti chipul Celui Vesnic esti Domnul Meu - -[c] -Doar prin crucea Ta mareata sunt nascut din nou, -Ai murit sa-mi dai viata, m-ai facut al Tau X2 -Doar prin crucea Ta mareata sunt nascut din nou -Ai murit sa-mi dai viata, m-ai facut al Tau X2 -Doar prin crucea Ta mareata sunt nascut din nou -Ai murit sa-mi dai viata, m-ai facut al Tau X2 - -[v2] -Noaptea lumii se destrama, esti lumina mea -Viata noua azi renaste prin iubirea Ta - -[e] -Te iubesc Isus, Te iubesc Isus, Te iubesc Isus -Sunt al Tau pe veci! X2 diff --git a/candidates/Elim Harmony Band/Elim Harmony Band - Isus m-ai binecuvantat.txt b/candidates/Elim Harmony Band/Elim Harmony Band - Isus m-ai binecuvantat.txt deleted file mode 100644 index b1bf7d4ff..000000000 --- a/candidates/Elim Harmony Band/Elim Harmony Band - Isus m-ai binecuvantat.txt +++ /dev/null @@ -1,60 +0,0 @@ -[title] -Isus m-ai binecuvantat {alternative: {*}, composer: {Elim Harmony Band}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {232705}, id: {ssbGDd4Zm4wnudUYZs1R8W}, contentHash: {95a531}} - -[sequence] -v1,v2,b,c,v3,b,c,b2,e - -[v1] -Mi-Ești lumină în noapte -Când sunt trist îmi dai pace -Când sunt apăsat de povara -Ești cu mine, aproape. - -[v2] -Doar Tu ești Adevărul -Mă îmbraci cu credință -Când simt că totul s-a prăbușit -Tu îmi dai biruință! - -[b] -Tu ești pacea mea, Te voi urma, Vreau să-mi vorbești. - -[c] -Doar la Tine eu alerg, -În Tine mă încred -Tu viața mi-ai schimbat! -Când Prin lumina Ta privesc -Orice umbră-ndepărtezi, Tu m-ai binecuvântat! -/: Isus, oh :/ Isus, Tu m-ai binecuvântat - /: Isus, oh :/ Isus... - -[v3] -Mă îmbraci cu putere -Când cei răi mă-nconjoară -Tu mă asculți când strig spre Tine -Îmi iei orice povară! - -[b2] -Inima Tu-mi poți vindeca -Mă-nchin liber în prezența Ta -Nu-i prea târziu sa fiu salvat -Mă chemi pe nume! -Dragostea Ta m-a cucerit -În brațul Tău eu mă simt iubit -Cu tot ce sunt mă dăruiesc -Trăiesc prin Tine! -Inima Tu-mi poți vindeca -Mă-nchin liber în prezența Ta -Nu-i prea târziu să fiu salvat -Mă chemi pe nume! -Dragostea Ta m-a cucerit -În brațul Tău eu mă simt iubit -Cu tot ce sunt mă dăruiesc -Mă dăruiesc! - -[e] -/: Isus, oh :/ x3 -Când prin lumina Ta privesc -Orice umbră-ndepărtezi -Tu m-ai binecuvântat! -/: Isus, Isus, Isus.. Tu m-ai binecuvântat :/ x2 diff --git a/candidates/Elim Harmony Band/Elim Harmony Band - Promisiuni.txt b/candidates/Elim Harmony Band/Elim Harmony Band - Promisiuni.txt deleted file mode 100644 index 060e958ab..000000000 --- a/candidates/Elim Harmony Band/Elim Harmony Band - Promisiuni.txt +++ /dev/null @@ -1,43 +0,0 @@ -[title] -Promisiuni {alternative: {*}, composer: {Elim Harmony Band}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {158412}, id: {9dJLLzxMHEz3TRTT7ckPLB}, contentHash: {4f9dd2}} - -[sequence] -v1,c,v2,c2,e - -[v1] -Eu nu ți-am spus vreodată, că-ți voi da bogății, -Nici că frigul nopții sau văpaia, nu le vei simți. -Am promis că prin toate, Eu lângă tine sunt! -Și să nu uiți, viața e doar un drum! -Eu n-am promis, că tu, fără teamă vei trăi, -Sau că niciodată, singur, tu nu te vei simți, -Dar să nu uiți, mereu te voi însoți! -Totdeauna, Eu te voi sprijini! - -[c] -Căci voi împlini întocmai, așa cum ți-am promis, -Al Meu har te-nsoțește și îți va fi de ajuns. -Îți dau a Mea iubire, ca ancoră și scut, -Voi fi cu tine, voi fi cu tine, Eu îți promit! - -[v2] -Nicicând nu ți-am promis, că prieteni falși nu vei avea, -Și nici că-ntotdeauna lumea te va admira, -Dar ți-am spus, că ades, vei fi disprețuit! -Doar cei vrednici, calea o vor sfârși! -Eu nu ți-am spus că n-ai să simți al morții trist sărut, -Și nici că poți intra-n odihnă, Iordanul ocolind, -Dar ți-am spus, că te întâmpin’, pe malul celălalt. -Și-ți voi șterge cu dragoste lacrima! - -[c2] -Căci voi împlini întocmai, așa cum ți-am promis, -Și în curând, când voi veni, în ochi Mă vei privi, -Cu îngerii alături, vei cânta în veșnicii, -Vei fi cu Mine, vei fi cu Mine: Eu îți promit! - -[e] -Deci, mergi înainte, niciun pas nu ezita, -În ceața nopții densă, ai lumina Mea! -Nimic din lumea aceasta, nu ne va despărți, -/: Voi fi cu tine, voi fi cu tine, Eu îți promit! :/ diff --git a/candidates/Elim Harmony Band/Elim Harmony Band - Psalmul.txt b/candidates/Elim Harmony Band/Elim Harmony Band - Psalmul.txt deleted file mode 100644 index 326a33560..000000000 --- a/candidates/Elim Harmony Band/Elim Harmony Band - Psalmul.txt +++ /dev/null @@ -1,34 +0,0 @@ -[title] -Psalmul {alternative: {*}, composer: {Elim Harmony Band}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {220850}, id: {nF391wU7tyJBXfntH3SAak}, contentHash: {9ea1d1}} - -[sequence] -v1,c,v2,b,c - -[v1] -Ia aminte Doamne la rugăciunea mea -Ascultă-mi șoaptă inimii -Prin cuvinte Tată nu pot exprima -Cât de mult doresc prezența Ta -Da eu știu, ajutor doar la Tine eu găsesc -Ești un turn de adăpost -de vrăjmași mă ocrotești - -[c] -Du-mă pe stânca, ce n-o pot ajunge -Neclintit să fiu mereu pe calea Ta -Voi rămâne în Tine, ancorat pe vecie -Voi cântă neîncetat numele Tău - -[v2] -Tu îmi ești răsplata, și moștenirea mea -Credincios în veci Doamne Tu ești -Mă incred în Tine, Tu nu mă vei lăsa -Chiar de îmi e mâhnită inima -Da eu știu, ajutor doar la Tine eu găsesc -Ești un turn de adăpost -de vrăjmași mă ocrotești - -[b] -Eu în Tin’ mă odihnesc -Pace și adăpost eu găsesc -Bunătatea Ta umple viața mea diff --git a/candidates/Eliza Pirosca/Eliza Pirosca - Aleluia.txt b/candidates/Eliza Pirosca/Eliza Pirosca - Aleluia.txt deleted file mode 100644 index 58d5ca415..000000000 --- a/candidates/Eliza Pirosca/Eliza Pirosca - Aleluia.txt +++ /dev/null @@ -1,33 +0,0 @@ -[title] -Aleluia {alternative: {*}, composer: {Eliza Pirosca}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {85669}, id: {qvyebbYozvxz6gN86DaTnu}, contentHash: {634116}} - -[sequence] -c,v1,c,v2,c,v3,c - -[c] -/: Aleluia! :/ x4 -Domnul slavei, -Regele meu, -Îți cânt : -/: Aleluia! :/ x4 - -[v1] -Într-un cor de îngeri -Vreau să-ți cânt, -Pentru veșnicii! -Fața Ta luminoasă -Să-mi încălzească sufletul! - -[v2] -Ca un vultur -Mă vei înălța -Spre cerul Tău! -În sfârșit, voi fi liber -Și voi sta la tronul Tău! - -[v3] -Ce minunat va fi -Când nu va mai trebui -Să plâng! -Cerul Tău va vindeca -Sufletul meu! diff --git a/candidates/Eliza Pirosca/Eliza Pirosca - Atat de mic.txt b/candidates/Eliza Pirosca/Eliza Pirosca - Atat de mic.txt deleted file mode 100644 index 35cc6eddb..000000000 --- a/candidates/Eliza Pirosca/Eliza Pirosca - Atat de mic.txt +++ /dev/null @@ -1,28 +0,0 @@ -[title] -Atat de mic {alternative: {*}, composer: {Eliza Pirosca}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {94107}, id: {a4RkbFuQEWSxFc5t1UVtRj}, contentHash: {f801bb}} - -[sequence] -v1,c,e - -[v1] -/: O, Doamne, sunt atât de mic, -Atât de mic pe când încerc -În raze să-mi ridic -O lacrimă din umăr de privire -Peste așa pustiire. -Și nu pot decât până la poale -Să văd muntele din raza de soare, -Să regăsesc poteca și urmele de pași -Din Tine rămași. :/ - -[c] -/: Nu-s decât o gândire singură și ciudată, -Cu ecou uneori, cu ecou altădată, -Ca o înghițire de sentiment rătăcit -În intestine de chit. :/ - -[e] -/: Alerg și întreb :/ -Poate cândva aripa ce mă ține va dispărea -Și va rămâne doar pomul din care, dulce, -Ți-ai făcut o cruce. diff --git a/candidates/Eliza Pirosca/Eliza Pirosca - Cred in tine.txt b/candidates/Eliza Pirosca/Eliza Pirosca - Cred in tine.txt deleted file mode 100644 index fc01d307d..000000000 --- a/candidates/Eliza Pirosca/Eliza Pirosca - Cred in tine.txt +++ /dev/null @@ -1,62 +0,0 @@ -[title] -Cred in tine {alternative: {*}, composer: {Eliza Pirosca}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {58945}, id: {cf4fzymYpLYWeJiNT3Erwy}, contentHash: {361a6f}} - -[sequence] -v1,v2,c,v3,c,v4,c,e - -[v1] -Credința mea -Nu este pe nisip -Eu am crezut -Și Domnul a-mplinit -Eu cred în El -Chiar dacă drumul este greu -Pot să am în fața mea uși închise: nu îmi pasă -Eu cred în Dumnezeu. - -[v2] -Credința mea -M-ajută-n încercări -Eu cred în El -Și El îmi dă puteri -Când am trecut -Prin valea umbrei morții -El a fost Păstorul meu și m-a păzit, m-a ajutat -Și eu am biruit - -[c] -Cred în Tine -Cred în Tine -O, Domnul meu -Turnul meu de scăpare -Cred în Tine -Cred în Tine -Căci ești Dumnezeu, -Ești ajutorul meu -Eu cred în Tine. - -[v3] -Credința mea -Mereu m-a ajutat -Eu am crezut -Și El m-a binecuvântat -Chiar dacă uneori am fost descurajat -Domnul meu mi-a arătat că-i lângă mine -Chiar de nu-L văd -E lângă mine. - -[v4] -Credința mea -M-a apropiat de cer -Peste munți și peste văi -Într-o zi eu sper -Că voi putea să zbor mai repede că gândul -Domnul meu, eu am încredere în Tine -Și-ți mulțumesc că Te-ai jertfit pentru mine. - -[e] -Chiar și când întunericul e greu -Chiar și când păcatul m-apăsă -Tu ești mereu adăpostul meu -Și nu îmi pasă de cel rău -Căci eu cred.. diff --git a/candidates/Eliza Pirosca/Eliza Pirosca - Gara vietii.txt b/candidates/Eliza Pirosca/Eliza Pirosca - Gara vietii.txt deleted file mode 100644 index 175577254..000000000 --- a/candidates/Eliza Pirosca/Eliza Pirosca - Gara vietii.txt +++ /dev/null @@ -1,44 +0,0 @@ -[title] -Gara vietii {alternative: {*}, composer: {Eliza Pirosca}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {113287}, id: {hTUtFdazzX3hg4Yj2AJkx7}, contentHash: {82b7b6}} - -[sequence] -v1,c,v2,b,c - -[v1] -Sunt în Gara Vieții și aștept cam de mult -Au trecut ani peste mine și-am pierdut vreo două trenuri -Anotimpuri nu se mai perindă de mult timp pe aici -Nu știu dacă am îmbătrânit, dar nici nu-mi pasă. -Aștept, aștept să vină Cineva și să-mi spună -Ce tren să iau, ce bilet să-mi cumpăr... -Aștept, aștept, poate-or veni vara, toamna si iarna -Ca să știu dacă mai sunt sau nu in viață. - -[c] -Tatăl meu, știu că privești de sus -Chiar nu ai nimic de spus? -Dă-mi te rog un semn că mă mai iubești -Chiar dacă greșesc... -Mai trimite-mi un tren și pentru mine. -Tatăl meu, știu ca El e trimis de sus -Mi-a spus că se numește ISUS! -Mi-a arătat drumul spre Tine -N-a mai trebuit sa aștept -M-a facut atât de fericit. - -[v2] -Încep să nu mai am răbdare, răceala m-a cuprins -Mi-e dor de viață și de soare, mi-e dor de infinit... -Trenuri nu mai opresc, oare ce trebuie să fac? -Mi-e teamă că voi rămâne singur pentru totdeauna. -Aștept, aștept, iată Cineva se ivește -Îl recunosc, are o privire atât de blândă! -Mă strânge la piept și-apoi mă ia de mâna -Nu-mi mai este frig și nici teamă. - -[b] -Tatăl meu, știu că El e trimis de sus -Mi-a spus că se numește ISUS! -M-am dus cu El într-un Loc -Atât de liniștit și de frumos -M-a învățat să fiu fericit! diff --git a/candidates/Eliza Pirosca/Eliza Pirosca - Orice lacrima.txt b/candidates/Eliza Pirosca/Eliza Pirosca - Orice lacrima.txt deleted file mode 100644 index 356eb78b1..000000000 --- a/candidates/Eliza Pirosca/Eliza Pirosca - Orice lacrima.txt +++ /dev/null @@ -1,31 +0,0 @@ -[title] -Orice lacrima {alternative: {*}, composer: {Eliza Pirosca}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {114747}, id: {goQ3vSRmvQnvXtKCEYeFqa}, contentHash: {4bcd65}} - -[sequence] -v1,v2,c - -[v1] -Orice lacrimă de pe-obrazul tău va fi ștearsă -Nu vor mai fi regrete, nici dureri -Nu te voi lăsa singur să pășești pe cale -Mâna ta va fi mereu în Mâna Mea -Vino la tronul Meu de slavă -Și pace vei primi -Sufletul tău va fi binecuvântat -Și orice păcat va fi spălat prin Sângele lui Isus - -[v2] -Știu că drumu-i greu, știu că tu ai obosit -Știu că cerul este iar întunecat -Dar copilul Meu, să nu-ți fie niciodată teamă -Eu te voi purta pe aripa ? -Vino pe genunchi să te-odihnești -Și îngrijorarea ta va trece -Sufletul tău va fi binecuvântat -Inima ta se va umple de bucurii eterne - -[c] -Vino la Mine, vino să îți așezi -Capul obosit pe Pieptul Meu -Vino la Mine, vino să te încrezi -În Tatăl Tău diff --git a/candidates/Grup Eldad/Eldad - A frant temeliile mortii.txt b/candidates/Grup Eldad/Eldad - A frant temeliile mortii.txt deleted file mode 100644 index a87a7c237..000000000 --- a/candidates/Grup Eldad/Eldad - A frant temeliile mortii.txt +++ /dev/null @@ -1,35 +0,0 @@ -[title] -A frânt temeliile morții {alternative: {*}, composer: {Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {191607}, id: {wxKJfgNZw8bGwiTmw6HXpt}, contentHash: {747843}} - -[sequence] -v1,c,v2,c,v3,c,e,c - -[v1] -Ascultă porunca cea mai mare: -„Să iubești pe Domnul Dumnezeul tău!” -Dar nu oricum, pune valoare, -Cu toată inima și cugetul tău! - -[c] -Lasă-L să pătrundă în inima ta! -S-a stins ca să-ți spele păcatul, -Tu știi cine-ai fost, ce alegi să fii mâine, -A frânt temeliile morții chiar pentru tine. - -[v2] -El știa c-aveai nevoie de iubire, -Pe când singur te loveai cu-atât amar, -Ne-a iertat pe toți, deși în mulțime -Eram noi și totuși ne-a dat har. - -[v3] -Avem și pâine și tot ce ne dorim, -Chiar Isus ne-a învățat cum să cerem, -Ne-a izbăvit de cel rău, noi Îi dăm prea puțin, -Isus ne este Domn și cu El vrem să mergem. - -[e] -/: A frânt temeliile morții, -El a frânt temeliile morții, -Isus a frânt temeliile morții -Chiar pentru tine. :/ diff --git a/candidates/Grup Eldad/Eldad - Al cui esti.txt b/candidates/Grup Eldad/Eldad - Al cui esti.txt deleted file mode 100644 index 8ab76c0ed..000000000 --- a/candidates/Grup Eldad/Eldad - Al cui esti.txt +++ /dev/null @@ -1,30 +0,0 @@ -[title] -Al cui ești? {alternative: {*}, composer: {Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {174125}, id: {5GQmBUD5KfbtrdNx82zBJt}, contentHash: {701fa1}} - -[sequence] -v1,c,v2,c - -[v1] -Spune-mi de unde vii? -Spune-mi unde te duci? -Cărui stăpân îi slujești? -Spune-mi pe ce drum pășești? -Ești sigur că e drumul bun? -Ești sigur că nu rătăcești? -Știi sigur spre ce veșnicie alergi? - -[c] -/: Al cui ești când ai să pleci? -Cine te va lua de mână? -Spre cine ochii îți vei îndrepta? -Primește-odihna în Hristos, -Sau veșnica osândă! :/ - -[v2] -Mergi înspre lume grăbit, -Crezi că plăcerea e locul finit, -Tu spui că păcatu-ai lăsat, -Dar te simți și mai murdărit. -Ești sigur că ești împlinit? -Știai tu că Tatăl te-așteaptă? -Trezește-te omule-acum la viață! diff --git a/candidates/Grup Eldad/Eldad - Ce este viata fara El.txt b/candidates/Grup Eldad/Eldad - Ce este viata fara El.txt deleted file mode 100644 index c37dae7ef..000000000 --- a/candidates/Grup Eldad/Eldad - Ce este viata fara El.txt +++ /dev/null @@ -1,23 +0,0 @@ -[title] -Ce este viața fără El? {alternative: {*}, composer: {Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {197729}, id: {jT2VhKfv5KfWsKoSa1DeBb}, contentHash: {d1cdeb}} - -[sequence] -v1,c - -[v1] -Ce este viața fără El? E disperare. -Un șir de zile fără sens, cu nopți amare. -Fericit nu ești, chiar dacă tu zâmbești -Și soare nu-i, chiar dacă vrei să-mi spui. -Ce este viața fără El? O căutare, -Un vis pe care îl plătești cu-n preț prea mare. -Plânsul tău ascuns, îți poate fi răspuns. -Dar viață fără Isus este de nepătruns: -Dacă nu respiri prin El, degeaba tu trăiești, -Dacă nu e bucuria ta, degeaba tu zâmbești. - -[c] -/: Fără El nu ai viață, bucurie și speranță, -Fără El nu cunoști ce-nseamnă a iubi, -Fără El nu ai soare, nu ai zâmbet, nici culoare, -Fără El e imposibil, mă întreb cum poți trăi :/ diff --git a/candidates/Grup Eldad/Eldad - Curgi ca un rau.txt b/candidates/Grup Eldad/Eldad - Curgi ca un rau.txt deleted file mode 100644 index ec3a0d5ef..000000000 --- a/candidates/Grup Eldad/Eldad - Curgi ca un rau.txt +++ /dev/null @@ -1,25 +0,0 @@ -[title] -Curgi ca un râu {alternative: {*}, composer: {Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {240802}, id: {kLcfs4UKK9srG1dvxPXFUJ}, contentHash: {923b94}} - -[sequence] -v1,c,v2,c - -[v1] -Curgi ca un râu de slavă, curgi printre noi, -Dai viață, dai lumină și speranță, fiindcă ești Dumnezeu. -Te așteptăm să vii, să vii ca să mângâi a noastre inimi ce-s zdrobite, -Mai lasă sfântul nor, balsam vindecător, prezintă-Te, o, scump Părinte! - -[c] -/: Stăm ‘naintea Ta, :/ -/: În prezența Ta, :/ -Privește Isus spre adunare! -/: Vrem prin Duhul Tău :/ -/: să ne-atingi din nou :/ -O, Doamne, vrem să faci o cercetare! - -[v2] -Sunt atâția ce strigă, ce trec prin greutăți, -Oprește-te și-n dreptul lor o clipă, izbăvire strigă toți. -Sunt suflete rănite, sunt inimi împărțite, ce nu cunosc a Ta cărare, -Prin valurile vieții, te așteptăm cu toții, dă un răspuns la fiecare! diff --git a/candidates/Grup Eldad/Eldad - Doamne bun.txt b/candidates/Grup Eldad/Eldad - Doamne bun.txt deleted file mode 100644 index 60068cc34..000000000 --- a/candidates/Grup Eldad/Eldad - Doamne bun.txt +++ /dev/null @@ -1,31 +0,0 @@ -[title] -Doamne bun {alternative: {*}, composer: {Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {230300}, id: {9RxMXToh69yvtBSKqmm1aF}, contentHash: {7df1c9}} - -[sequence] -v1,v2,e - -[v1] -Cum pot să bat cu pumnu-n piept -Să spun ca sunt creștin -Când țin departe legământul -Ce mă leagă de Țin’. -De încercat aș fii ca Iov -De-aș ține în picioare -Nădejdea, dragostea, credința -La fel până la moarte. - -[v2] -Doar prin Hristos, puternic sunt -Și crucea am s-o port -Aici jos lacrimile-a șters -Și m-a-nvățat să lupt. -Înțelepciune îmi va da, -Căci Dumnezeul ce mă ține -Iubește ai Săi copii. - -[e] -Doar Domnul îmi da puteri -Si-n necaz eu voi biruii -Minunat e Cel cea fost -Și este din veșnicii -Din veșnicii diff --git a/candidates/Grup Eldad/Eldad - El este Mielul.txt b/candidates/Grup Eldad/Eldad - El este Mielul.txt deleted file mode 100644 index ceedc02f0..000000000 --- a/candidates/Grup Eldad/Eldad - El este Mielul.txt +++ /dev/null @@ -1,29 +0,0 @@ -[title] -El este Mielul {alternative: {*}, composer: {Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {238290}, id: {hdHFThBPLKktDdWSJcq9VS}, contentHash: {52f266}} - -[sequence] -c,v1,c,v2,c - -[c] -El este Mielul ce va lua -Păcatul lumii asupra Sa -El este Cel ce va îndruma -Lumea întreagă cerul să aleagă, -Va porunci bolii să plece, -Va fi curat, fără păcat, -Se va pleca la cel ce-i singur -Și va da robilor libertatea. - -[v1] -Un plan ceresc, divin, se împlinea -În trup sfios de om se întrupa, -De ceruri s-a desprins, un Fiu iubit, -Privirea Tatălui L-a ocrotit. -Fiul era Isus! - -[v2] -Gândește-te doar la Emanuel, -Chiar tu ai fost ceea ce a ales El. -Să-și de-a viața Lui pentru a ta -Era motivul pentru care se năștea. -Tu ești motivul Lui! diff --git a/candidates/Grup Eldad/Eldad - Mielule.txt b/candidates/Grup Eldad/Eldad - Mielule.txt deleted file mode 100644 index 7ebaa5e54..000000000 --- a/candidates/Grup Eldad/Eldad - Mielule.txt +++ /dev/null @@ -1,33 +0,0 @@ -[title] -Mielule {alternative: {*}, composer: {Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {188101}, id: {85h9J9DhH7yVUyR8Ajwh5m}, contentHash: {cbc6cf}} - -[sequence] -v1,c,v2,c,e - -[v1] -Dragostea pentru noi pân’ la moarte -L-a condus pentru-a noastre păcate -Ai murit răstignit. -Cuie-n mâini i-au batut pentru mine -Ai murit în prea mare suspine -Dar a treia zi ai inviat. - -[c] -/: Mielule, oare cum să-Ți mulțumesc? -Caci prin jertfa de pe cruce astazi eu traiesc. -Eliberat, al Tău sânge m-a spălat -Speranța mântuirii Tu mi-ai dat. :/ - -[v2] -Chinuit pe un lemn pentru mine -Pentru noi, pentru toți, pentru tine -Ai murit răstignit -Dezbrăcat de-a Sa slava cerească -S-a smerit lumea să mântuiască -Să fie-a Lui în veci de veci. - -[e] -Prin trăirea mea astazi vreau să-Ți mulțumesc -Și zi de zi spre ceruri să înaintez, -Pășind frumos vreau să merg pe calea Ta -Făcând doar voia Ta, nu voia mea. diff --git a/candidates/Grup Eldad/Eldad - Se duce timpul de chemare.txt b/candidates/Grup Eldad/Eldad - Se duce timpul de chemare.txt deleted file mode 100644 index e72682b1e..000000000 --- a/candidates/Grup Eldad/Eldad - Se duce timpul de chemare.txt +++ /dev/null @@ -1,29 +0,0 @@ -[title] -Se duce timpul de chemare {alternative: {*}, composer: {Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {174961}, id: {1ih3kifMZJKfavvrofrbrH}, contentHash: {b7e2db}} - -[sequence] -v1,c,v2,c,v3,c - -[v1] -Se duce timpul de chemare, -Iar tu rămâi în stare grea. -Vin zile când în plâns și jale -‘Naintea Domnului vei sta. - -[c] -/: Că totul trece-n astă lume -Și omu-i, omu-i trecător -Dumnezeu mereu rămâne -Ca Domn atotstăpânitor. :/ - -[v2] -Răpi-va Domnul pe ai săi -În bucurii și fericiri. -Cei ce lasă fără teamă -Vor plănge-n lacrimi și suspine. - -[v3] -Vei plânge viața ta trăită -Trecutul tău îngrez -Târzie îți va fi căința -Vei rămâne pe pământ jos. diff --git a/candidates/Grup Eldad/Eldad - Vino vino Doamne.txt b/candidates/Grup Eldad/Eldad - Vino vino Doamne.txt deleted file mode 100644 index ca61256c7..000000000 --- a/candidates/Grup Eldad/Eldad - Vino vino Doamne.txt +++ /dev/null @@ -1,42 +0,0 @@ -[title] -Vino, vino, Doamne {alternative: {*}, composer: {Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {174960}, id: {hVgtqQV1DcsEYrxikU527R}, contentHash: {789f1e}} - -[sequence] -v1,c,v2,c,v3,c - -[v1] -Tu vezi lacrimi ce ne brăzdează fața -Pe-acest pământ cu-atâtea încercări. -Noi te rugăm, o, adă dimineața, -Urmând întregile noastre dureri. -La Cortul Întâlnirii azi Isuse, -Noi te-așteptăm să vii ca și-nvechime -Te cheamă sufletele de durere, -O, vino să le dai azi mângâiere. - -[c] -Vino, vino Doamne -Vino, vino Doamne. -La strigătele atâtor mii de vii, -Ridicăne la toți astăzi durerea -Și-n brațul minunat să ne mângâi. - -[v2] -Se-apropie ziua măreață, sfântă -Și-n dragoste-ntărește-ne Isus -Cu toți cei ce aleși au fost de Tine -La Tine să ne ei când ai să vii. -Mai dă-ne azi prin Duhul de credință -Putere din iubirea cea dintâi -Ridică-ne din starea de pierință -De partea noastră veșnic să rămâi. - -[v3] -Așa dorim prin toate să rămânem -Statornici în credință și-n cuvânt -Ca veșnicul în clipele din urmă -Să ne găsești pe-ogorul Tău lucrând -Să ne găsești cu rugăciuni prea tare -Și bucuroși cu toți să arătăm -Că dragostea Ta e nespus de mare -Cu lacrimi pe față să-ți cântăm. diff --git a/candidates/Grup Eldad/Grupul Eldad - Aleg sa cred.txt b/candidates/Grup Eldad/Grupul Eldad - Aleg sa cred.txt deleted file mode 100644 index 78365daa2..000000000 --- a/candidates/Grup Eldad/Grupul Eldad - Aleg sa cred.txt +++ /dev/null @@ -1,35 +0,0 @@ -[title] -Aleg sa cred {alternative: {*}, composer: {Grupul Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {233596}, id: {iWEMHB2hEYp81wRMiNZQQ7}, contentHash: {0ffb29}} - -[sequence] -v1,c,v2,c - -[v1] -Chiar de am, în fața mea, uși închise -Și zadarnic bat sperând la un răspuns, -Gândul că m-ai părăsit se-ntipărise -În sufletul meu și Doamne m-am ascuns. -Sunt zdrobit din luptele ce le-am avut -Nu mai văd, ’naintea mea, a Tale urme -Când acei din jur îmi spun că Te-am pierdut -Și zadarnic vor nădejdea să mi-o curme. - -[c] -/: Eu aleg să cred în Tine -Chiar de munții s-ar muta. -Pacea ce o am în mine -Nimeni nu mi-o va lua. -Zborul meu nimic nu-l frânge, -lar când drumul este greu, -Capul mi-l aplec în taină, -Liniștit, la pieptul Tău. :/ - -[v2] -Chiar de zorile îmi par îndepărtate -Bucuria mea în noapte a dispărut, -Ochii-mi umezi de lacrimi necurmate -Din atâtea răni ce-adesea au durut. -Nu pot fi învins chiar dacă-s frânt ades, -Prăbușit, de-aș fi, să zac neputincios, -Vine-o zi când rodul meu va fi cules, -Pân-atunci alerg, aștept și spun voios. diff --git a/candidates/Grup Eldad/Grupul Eldad - Astazi Duhul Domnului.txt b/candidates/Grup Eldad/Grupul Eldad - Astazi Duhul Domnului.txt deleted file mode 100644 index d64b98827..000000000 --- a/candidates/Grup Eldad/Grupul Eldad - Astazi Duhul Domnului.txt +++ /dev/null @@ -1,37 +0,0 @@ -[title] -Astazi Duhul Domnului {alternative: {*}, composer: {Grupul Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {203943}, id: {ttmR5RYptaYKRNhqubHLaE}, contentHash: {9259ee}} - -[sequence] -v1,c,v2,c,v3,c,v4,c,v5,c - -[v1] -/: Astăzi Duhul Domnului este prezent aici :/ -E aici în fața Ta, hai deschideți inima -Astăzi Duhul Domnului este prezent aici. - -[c] -Mai toarnă și astăzi undelemn -De pe pământ noi te chemăm -Și fă din nou, o viorare să simtă astăzi fiecare -Astăzi Duhul Domnului este prezent aici. - -[v2] -/: Astăzi Duhul Domnului este prezent aici :/ -Hai deschideți inima, ca să simți prezența Sa -Astăzi Duhul Domnului este prezent aici. - -[v3] -Mare este Dumnezeu, mare este Dumnezeu -Simt în a mea viață, Isus îmi e sperantă -Mare este Dumnezeu, îl simt în a mea viață -Isus îmi e speranță, mare este Dumnezeu. - -[v4] -/: El e și azi vindecător :/ -/: El vindecă ori ce boală, pune balsam pe rană -El e Domnul Domnilor. :/ - -[v5] -/: Isus din nou va veni :/ -/: Să și ducă, a Sa mireasă -Celui Sfânt acasă, de pe pământ, o va răpii. :/ diff --git a/candidates/Grup Eldad/Grupul Eldad - Cand domnul porunceste.txt b/candidates/Grup Eldad/Grupul Eldad - Cand domnul porunceste.txt deleted file mode 100644 index 45da49bb7..000000000 --- a/candidates/Grup Eldad/Grupul Eldad - Cand domnul porunceste.txt +++ /dev/null @@ -1,32 +0,0 @@ -[title] -Cand Domnul porunceste {alternative: {*}, composer: {Grupul Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {225280}, id: {c2tJUY4wvNKoPerSY4V95U}, contentHash: {735c0b}} - -[sequence] -v1,c,v2,c - -[v1] -Atâta timp cât zorii se arată -Și poți să vezi lumina zi de zi -Iar pacea-n suflet încă ți-este dată -E-un har măreț, e-un dar ceresc, să știi -Atâta timp cât încă ai speranță -Chiar dacă-n viața ta nu-i cer senin, -Dar drumul ce de Domnu-i pus e-n față, -Să mergi pe el, să mergi pe el senin - -[c] -Când Domnul poruncește, ia ființă -Și când vorbeste El, ascultă tot -/: Chiar munte-nalt sau vale-adâncă de-ar fi -Tu să n-ai frică -Căci El e Domnul Savaot :/ - -[v2] -De stai și-aștepți în taină o mângâiere -Sau un răspuns la tot ce nu-nțelegi -Și simți că-n suflet crește-a ta durere -Să nu oprești, continuă să mergi -Pe cale-aceasta e multă luptă crudă -De multe ori ești singur, părăsit -Dar să nu uiți: Isus este la cârmă -Și orice-ar fi, tu ești de El păzit. diff --git a/candidates/Grup Eldad/Grupul Eldad - Cine e oare cel mai sfant sub soare.txt b/candidates/Grup Eldad/Grupul Eldad - Cine e oare cel mai sfant sub soare.txt deleted file mode 100644 index 9e12610d6..000000000 --- a/candidates/Grup Eldad/Grupul Eldad - Cine e oare cel mai sfant sub soare.txt +++ /dev/null @@ -1,42 +0,0 @@ -[title] -Cine e oare cel mai sfant sub soare? {alternative: {*}, composer: {Grupul Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {168119}, id: {uuiiqXSzecepd79DW83srY}, contentHash: {f98234}} - -[sequence] -v1,c,v2,c,v3,c - -[v1] -Cine e oare, cel mai sfânt sub soare? -Se strigă astazi în Sion. -Cine e-n stare să vindece boala, -Cine e singurul Domn? -E Dumnezeu, e Dumnezeu! -Să-L laude pământul, să-L laude și marea, -El este Domn și în ceruri domnește in veci! - -[c] -Veniți să lăudăm pe cel Atotputernic! -Veniți să ridicăm mâinile spre cer, -Osana să se-audă în zările albastre, -Și cântul nostru azi să ajungă pân’ la cer! - -[v2] -Haideți cu toții s-aducem mărire, -Și glorie Sfântului Miel, -El pentru mine ca și pentru tine, -A murit răstignit pe un lemn. -El Dumnezeu, El Dumnezeu, -Suferind ocara lumii -Ca dar să putem avea, -Viață eternă și mântuire în dar! - -[v3] -Tu drag prieten -Ce asculți azi chemarea, -Te-ntreb astăzi de Îl cunoști -Pe Cel ce-i Sfânt, -Ce aduce salvarea, -Oare-L cunoști pe Hristos? -Pe Dumnezeu, pe Dumnezeu! -Azi predă-ți viața Lui, -Bucurie vei avea -Și viață eterna primi-vei în dar! diff --git a/candidates/Grup Eldad/Grupul Eldad - Din dragoste.txt b/candidates/Grup Eldad/Grupul Eldad - Din dragoste.txt deleted file mode 100644 index 8533b2c4f..000000000 --- a/candidates/Grup Eldad/Grupul Eldad - Din dragoste.txt +++ /dev/null @@ -1,40 +0,0 @@ -[title] -Din dragoste {alternative: {*}, composer: {Grupul Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {176814}, id: {tk4h1oh6SXCBFcScdP8det}, contentHash: {0c61f9}} - -[sequence] -v1,c,v2,b,c,e - -[v1] -Viața cu Dumnezeu e-un dar venit de sus, -Din dragoste, din dragoste. -Fiindcă ne-a iubit, trimis-a pe Isus să se jertfească -Din dragoste... - -[c] -Să ne iubim, cât timp trăim, -În dragoste frați toți să fim. -Să ne iubim, cât timp trăim, -Ca viața veșnică s-o moștenim. -Să ne iubim, cât timp trăim, -În dragoste, frați toți să fim. -Să ne iubim, cât timp trăim, -Ca viața veșnică s-o moștenim. - -[v2] -Pe cruce la Calvar, Domnul a dovedit -Doar dragoste, doar dragoste. -Și chiar dacă nu înțeleg, prin harul Său azi eu trăiesc, -Prin dragoste, prin dragoste... - -[b] -Poți să dai orice, chiar trupul ca să-ți fie ars, -De n-ai dragoste, toate-s în zadar... -Poți fi-nvățător, ades’ pe alții să-i înveți, -Dar ne-mplinitor, în ură să trăiești... - -[e] -Căci dragostea Sa, e nesfârșită, -El e Domnul Vieții pe pământ. -În dragostea Sa nemărginită, -El ne iubește pe toți la fel, -El ne iubește pe toți la fel! diff --git a/candidates/Grup Eldad/Grupul Eldad - E noapte-n Betleem.txt b/candidates/Grup Eldad/Grupul Eldad - E noapte-n Betleem.txt deleted file mode 100644 index bcb861969..000000000 --- a/candidates/Grup Eldad/Grupul Eldad - E noapte-n Betleem.txt +++ /dev/null @@ -1,45 +0,0 @@ -[title] -E noapte-n Betleem {alternative: {*}, composer: {Grupul Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {183289}, id: {jxTNAeEm1oMtDCNpN8f95v}, contentHash: {097f92}} - -[sequence] -v1,v1,c,v2,c,b,c - -[v1] -E noapte-n Betleem -Iosif și Maria -Alergând grăbiți -Caută găzduire -Că timpul a sosit -Pruncul cel vestit -Va veni in lume -Cum a fost profețit -b Dar numai este loc în casă pentru ei -Doar un staul și-o iesle săracă -Așa veni în lume Fiu de Dumnezeu -S-aducă lumii speranță - -[c] -Haideți să-i cântăm -Pruncului de Sus -Sfetnic Împărat -Minunat Isus -Ceru-ntreg îi cântă -Haideți și noi să ne unim -Inimile și să îl slăvim -Inimile și să-l preamărim - -[v2] -Magii din răsărit -La Betleem au sosit -Pe Irod au intrebat -Unde-i al vostru Împărat -Căci steaua cea de sus -Aici ne-a călăuzit -Pruncului să ne-nchinăm -Daruri multe să îi dăm - -[b] -Dar preoții cei mai de seamă și Irod -S-au sfătuit pe Prunc să-L omoare -Dar Dumnezeu știa ’nainte planul lor -Și-n vis pe magi, i-a înștiințat diff --git a/candidates/Grup Eldad/Grupul Eldad - Esti minunat.txt b/candidates/Grup Eldad/Grupul Eldad - Esti minunat.txt deleted file mode 100644 index 30f312cdf..000000000 --- a/candidates/Grup Eldad/Grupul Eldad - Esti minunat.txt +++ /dev/null @@ -1,34 +0,0 @@ -[title] -Esti minunat {alternative: {*}, composer: {Grupul Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {176805}, id: {xxixjAynWsYjKJtXecA6hP}, contentHash: {0a7b02}} - -[sequence] -v1,c,b,c - -[v1] -Laudă, cinste, mărire -Astăzi, cu toții-ți cântăm -Vrem să-Ți aducem onoare -Numele Tău inălțăm! -Ești cunoscut de popoare -Domnul oștirilor -Biruitor peste moarte -Adonai e Numele Tău! - -[c] -Ești minunat, adevărat -Vrednic de laudă și vrednic de cinste -Domn Preainalt! -Ești minunat, adevărat -Domnul Domnilor și Rege-al Regilor -In veci al Tău Nume rămâne Biruitor! -Ești minunat, adevărat -Vrednic de laudă și vrednic de cinste -Domn Preainalt! -Ești minunat, adevărat -Domnul Domnilor și Rege-al Regilor -In veci al Tău Nume rămâne Biruitor! - -[b] -Te voi lăuda toată viața mea -Și in numele Tău mâinile ridicăm -In prezența Ta! diff --git a/candidates/Grup Eldad/Grupul Eldad - Fara dumnezeu.txt b/candidates/Grup Eldad/Grupul Eldad - Fara dumnezeu.txt deleted file mode 100644 index 5adb36423..000000000 --- a/candidates/Grup Eldad/Grupul Eldad - Fara dumnezeu.txt +++ /dev/null @@ -1,28 +0,0 @@ -[title] -Fara Dumnezeu {alternative: {*}, composer: {Grupul Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {195915}, id: {wDJSBBAQEM59yz43gR7Vgy}, contentHash: {17f1c7}} - -[sequence] -v1,c,v2,c - -[v1] -/: Fără Dumnezeu viața ar fi un gol -Deșert și arșiță în inimă aș avea -Aș fi o floare uscată -Un cântec fără dor -Aș fi un nor, atât de departe de cer :/ - -[c] -/: Eu n-aș putea răzbi furtuna ce mă înconjoară -Singur nu pot să-nving tot greul ce mă împresoară -Dar știu că este Dumnezeu ce-a despărțit și marea -Și stie El ce-mi stă-nainte drumul tot și calea :/ -/: Eu n-aș putea răzbi furtuna ce mă înconjoară -Singur nu pot să-nving tot greul ce mă împresoară -Dar știu că este Dumnezeu ce-a despărțit și marea -Și stie El ce-mi stă-nainte drumul tot și calea :/ x3 - -[v2] -/: Ce liniște ar fi în univers -Și taine n-ar mai fi de înțeles -Nici stelele n-ar mai luci fără de El -Tot cerul ar fi tăcut în lipsa Lui :/ diff --git a/candidates/Grup Eldad/Grupul Eldad - Fiindca atat de mult.txt b/candidates/Grup Eldad/Grupul Eldad - Fiindca atat de mult.txt deleted file mode 100644 index 73068a1de..000000000 --- a/candidates/Grup Eldad/Grupul Eldad - Fiindca atat de mult.txt +++ /dev/null @@ -1,29 +0,0 @@ -[title] -Fiindca atat de mult {alternative: {*}, composer: {Grupul Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {176808}, id: {r1aNDg37wxxfPxYx2Z6SMN}, contentHash: {14430d}} - -[sequence] -v1,c,v2,c,v3,c - -[v1] -Tâlharul de pe cruce, de tot ce-a făcut rău -S-a pocăit îndată, și-a fost născut din nou. -Și eu tâlhar odată, la moarte osândit, -Am fost adus la viață, de-al meu Isus iubit. - -[c] -Fiindc-atât de mult, Tatăl ne-a iubit -Că a dat la moarte pe Singurul Său Fiu, -Ca oricine crede în El și-n jertfa Sa, -Să primească viața și mântuirea-n dar! - -[v2] -Oricine ești în viață, și oriunde te-ai afla, -Prietene degrabă, crede, nu amâna! -Fiindcă ziua de mâine, nu ști dacă-i a ta, -Acum este momentul să-ți schimbi viața ta. - -[v3] -De ești căzut în patimi, și-n grele făr’delegi -Și osândit de ele te lupți ca să trăiești, -Tu nu uita că încă mai e belșug de har, -Cum a fost sus pe cruce pentru acel tâlhar... diff --git a/candidates/Grup Eldad/Grupul Eldad - Framantat de pacat.txt b/candidates/Grup Eldad/Grupul Eldad - Framantat de pacat.txt deleted file mode 100644 index 822149e95..000000000 --- a/candidates/Grup Eldad/Grupul Eldad - Framantat de pacat.txt +++ /dev/null @@ -1,27 +0,0 @@ -[title] -Framantat de pacat {alternative: {*}, composer: {Grupul Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {176809}, id: {ky9dTGB3Zk6urK9XfYh7X4}, contentHash: {1ccd75}} - -[sequence] -v1,v2,e - -[v1] -Frământat de păcat pământul, ne oprește jos privirea, -Nu mai știm s-ascultăm vântul, să privim în ochi Iubirea. -Ne mulțumim cu deșertăciunea unei vieți fără de rost -Și-alergăm în felul lumii, depărtați tot mai mult de Hristos... -R: Trăiești în lumină, te lupți să fii mai sfânt? -Sau calci legământul prin fapte și cuvânt? -Trăiești pentru alții, iubind ca Hristos? -O viață-n biruință, trăiești tu cu folos? - -[v2] -Nimic nu e nou sub soare, tot ce-a fost iarăși va fi, -Cu deșertăciuni amare viața nu-ți vei mulțumi. -Sufletul tău e valoarea ce-ai primit-o aici jos, -Și prin el tu vei decide, vei trăi-n veșnicii cu Hristos? - -[e] -Tot ce-ai trăit, cum ai umblat, cum ai gândit și ai îndrumat, -Sunt fapte în lumină? -Spune-I azi Lui trecutul tău, El îl va șterge de tot ce-i rău -Și destinația ta va fi cea bună! diff --git a/candidates/Grup Eldad/Grupul Eldad - Glorie.txt b/candidates/Grup Eldad/Grupul Eldad - Glorie.txt deleted file mode 100644 index 536770cf7..000000000 --- a/candidates/Grup Eldad/Grupul Eldad - Glorie.txt +++ /dev/null @@ -1,29 +0,0 @@ -[title] -Glorie {alternative: {*}, composer: {Grupul Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {249920}, id: {rV8gQoGVg4btY3N5FjFaWq}, contentHash: {9bfd23}} - -[sequence] -c,v1,c,v2,c,e - -[c] -/: Glorie, glorie, mărire -Cinste, onoare doar Ție -Ești viu și în veci de veci domnești -Regele nostru etern :/ - -[v1] -/: A înviat, nu este-aici -Boldul morții El l-a învins -Viața și har noi am primit -Prin Isus cel răstignit :/ - -[v2] -/: Să-L preamărim, să-L proslăvim -Să-I dăm slavă căci mult ne-a iubit -Și-a dat viața pentru mine și tin’ -Ca să fim iertați și mântuiți :/ - -[e] -/: A înviat, a înviat -Isus este cel mai minunat :/ -A înviat, a înviat -El nu e mort, trăiește cu-adevărat! diff --git a/candidates/Grup Eldad/Grupul Eldad - Imparte-ti painea.txt b/candidates/Grup Eldad/Grupul Eldad - Imparte-ti painea.txt deleted file mode 100644 index b6c5e7246..000000000 --- a/candidates/Grup Eldad/Grupul Eldad - Imparte-ti painea.txt +++ /dev/null @@ -1,31 +0,0 @@ -[title] -Imparte-ti painea {alternative: {*}, composer: {Grupul Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {225478}, id: {rxLeT7Qe3QJnbXK5XN3kZh}, contentHash: {a6be04}} - -[sequence] -v1,c,v2,c,v3,c - -[v1] -Iubind voia Tatălui mai presus de voia firii -E-un drum așa sigur spre cerul neatins -/: Dacă în palme strâng prețul iubirii -Voi căpăta cununa acolo sus :/ - -[c] -/: Împarte-ți pâinea azi -Mergi înainte știind -Că Domnul va rasplăti, -El vede totul și puținu-ți va-nmulți :/ - -[v2] -Ulei adunat cu greu -E greu să dai și la alții -Si ție-ți va împlini la timp ce n-ai avut -/: Domnul iubirii, care are toți talanții -Va fi cu tine oriunde vei păși :/ - -[v3] -Împarte-ti pâinea -El vede totul și îți va-nmulți -Imparte-ți pâinea -Domnul te va răsplati! -Imparte-ți pâinea diff --git a/candidates/Grup Eldad/Grupul Eldad - Invesmantat in glorie.txt b/candidates/Grup Eldad/Grupul Eldad - Invesmantat in glorie.txt deleted file mode 100644 index 1b4bebdf6..000000000 --- a/candidates/Grup Eldad/Grupul Eldad - Invesmantat in glorie.txt +++ /dev/null @@ -1,31 +0,0 @@ -[title] -Invesmantat in glorie {alternative: {*}, composer: {Grupul Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {176810}, id: {pRDnYwRguN18sGHEcawsEh}, contentHash: {fa15d4}} - -[sequence] -v1,c,v2,c - -[v1] -Înveșmântat în glorie, domnești pe tron -Îți cântă heruvimii, căci Tu ești Domn. -Bătrânii se pleacă cu adorare, -Aruncă cununi pentru-a Ta splendoare, -Căci mare ești! - -[c] -Sfânt e, sfânt e, în veci e sfânt, -Lauda Lui cuprinde-ntreg pământ. -Uniți cu cerul, în duh ne închinăm -Și-n adevăr un cânt nou Îi cântăm, /x2 -Prin Duhul Sfânt! -/ Sfânt e, sfânt e, în veci e sfânt, -Lauda Lui cuprinde-ntreg pământ. -Uniți cu cerul, în duh ne închinăm -Și-n adevăr un cânt nou Îi cântăm, /x3 -Prin Duhul Sfânt! - -[v2] -Tu meriți toată lauda, Miel înjunghiat, -Creația-ntregă-Ți cânta, ești Împărat. -Prin al meu vers nu pot să exprim -Puterea Ta și-al Tău har divin, -Ești necuprins! diff --git a/candidates/Grup Eldad/Grupul Eldad - Israele.txt b/candidates/Grup Eldad/Grupul Eldad - Israele.txt deleted file mode 100644 index 492d61a65..000000000 --- a/candidates/Grup Eldad/Grupul Eldad - Israele.txt +++ /dev/null @@ -1,24 +0,0 @@ -[title] -Israele {alternative: {*}, composer: {Grupul Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {196502}, id: {pEnEQpoXetavYKVsLV9i51}, contentHash: {265a83}} - -[sequence] -v1,c,v2,c - -[v1] -/: De ești departe și ești de lume copleșit, -Nu ai nădejde, te simți pierdut și părăsit, -Ești pasărea ce-a pierdut stolul -Și-a venit frigul, te-a înghețat -Dar ai un Tată, ce-n a Lui inimă te-a luat! :/ - -[c] -/: Israele, pune-ți credința în Dumnezeu, -Nu te lăsa de valul lumii dus -Nu ești pierdut! Pe Golgota ai fost găsit! -Ești în casa Tatălui ce te-a iubit :/ - -[v2] -/: De ai nevoie să te audă cineva, -Cauți lumina prin bezna nopții undeva, -Ești floarea ce n-a răsărit sau frunza care s-a uscat, -Dar ai un Tată, ce-n a Lui inimă te-a luat! :/ diff --git a/candidates/Grup Eldad/Grupul Eldad - Luptam.txt b/candidates/Grup Eldad/Grupul Eldad - Luptam.txt deleted file mode 100644 index 1917ba152..000000000 --- a/candidates/Grup Eldad/Grupul Eldad - Luptam.txt +++ /dev/null @@ -1,44 +0,0 @@ -[title] -Luptam {alternative: {*}, composer: {Grupul Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {232879}, id: {eHeNewuHiSu5hy3fKpcLEL}, contentHash: {1953bc}} - -[sequence] -v1,b,c,v2,b,c,e,c - -[v1] -Într-o luptă în care ne-am înrolat -Când Isus destinul la toți ne-a schimbat -Luptăm! Luptăm! -Chiar de valuri vin și e înnorat -Și furtuna peste lume s-a lăsat -Luptăm! Luptăm! - -[b] -Privim ’nainte, nu dăm ’napoi -Isus e ținta și e cu noi -Ne întărește prin Duhul cel Sfânt -În rugăciune stăruitori -Și laude închinători -Ne dă puteri mereu să biruim. - -[c] -Suntem biruitori, prin Isus învingători -Prin jertfa de la Calvar, am primit iertarea în dar -Și astăzi suntem liberi prin al Său har -Suntem biruitori, prin Isus învingători -Prin jertfa de la Calvar, a schimbat istoria -Și azi e Domnul Domnilor și e suveran - -[v2] -Într-o luptă în care ne-am înrolat -Când Isus destinul la toți ne-a schimbat -Luptăm! Luptăm! -Biruință mereu vom primi -Chiar de tot în jur se va nărui -Prin El, biruim! - -[e] -/: Voi înălța, voi proclama, -Voi lăuda al Tău Nume măreț -Și în veci, cu gura mea, -Cu inima, voi preamări, -Doamne, puterea Ta! :/ ×3 diff --git a/candidates/Grup Eldad/Grupul Eldad - M-ating de tine dar nu oricum.txt b/candidates/Grup Eldad/Grupul Eldad - M-ating de tine dar nu oricum.txt deleted file mode 100644 index e43527320..000000000 --- a/candidates/Grup Eldad/Grupul Eldad - M-ating de tine dar nu oricum.txt +++ /dev/null @@ -1,33 +0,0 @@ -[title] -M-ating de Tine dar nu oricum {alternative: {*}, composer: {Grupul Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {228227}, id: {gbJvjwbpfeNyAEq9nNnLkW}, contentHash: {fad1de}} - -[sequence] -v1,c,v2,c,e,c - -[v1] -Trecand prin fata mea Isus -Fața Lui curata ma cheama -Sa cred ca poate sa dea vindecare -Trupului meu slabit si pacatos - -[c] -/: M-ating de Tine dar nu oricum -M-ating sa primesc har -Sa curga din Tine putere -Privirea Ta mi-e dar :/ - -[v2] -Pe genunchi cu mana intinsa -Astept sa ajungi in dreptul meu -Sa apuc sa-Ti vad fata senina -Sa-mi dea vindecare chipul Tau - -[e] -/: O ce vrednic E Isus -De laudele noastre -Viata Lui in viata noastra -Astazi sa se arate -Cand atingem haina Lui -Cu credinta mare -Cu putere negresit -Primim vindecare :/ diff --git a/candidates/Grup Eldad/Grupul Eldad - Ma uit in jur.txt b/candidates/Grup Eldad/Grupul Eldad - Ma uit in jur.txt deleted file mode 100644 index aa59a1518..000000000 --- a/candidates/Grup Eldad/Grupul Eldad - Ma uit in jur.txt +++ /dev/null @@ -1,41 +0,0 @@ -[title] -Ma uit in jur {alternative: {*}, composer: {Grupul Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {176812}, id: {jEwayir6fzsDoW2vF3AwFm}, contentHash: {2d56bd}} - -[sequence] -v1,c,v2,c,v3,c,e - -[v1] -Mă uit in jur și mă gândesc la mine -Oh Doamne, sunt nemulțumitor -Atâția oameni in lacrimi și suspine, -Trăiesc fără nici-un ajutor. - -[c] -Nu au ce mânca, nu au ce bea -Trăiesc de azi pe maine -Nu au ce mânca, nu au ce bea -Și-au pus nădejdea-n Tine! - -[v2] -Mă uit in jur și mă gândesc la mine -Ades eu ma compar cu cei bogați -Și vreau mai mult să strâng in astă lume -Uitând ades de ai mei frați - -[v3] -Mă uit in jur și mă gândesc la Tine -Cum ai venit intr-un loc sarac -O Doamne suferit-ai pentru mine -Și astăzi oare eu ce fac? - -[e] -Sunt mântuit și a mea viață -De multe ori n-o prețuiesc -Am uitat că Tu imi ești speranță -Pe toți la fel Tu ne iubești! -Ajută-ne să ne trezim -De lume să ne despărțim -Căci tot ce-am strâns aicea jos -Vom lăsa, -Vom lăsa, -Vom lăsa. diff --git a/candidates/Grup Eldad/Grupul Eldad - Pacea lui.txt b/candidates/Grup Eldad/Grupul Eldad - Pacea lui.txt deleted file mode 100644 index 723a10a1a..000000000 --- a/candidates/Grup Eldad/Grupul Eldad - Pacea lui.txt +++ /dev/null @@ -1,28 +0,0 @@ -[title] -Pacea Lui {alternative: {*}, composer: {Grupul Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {232880}, id: {pAsP4vwkf9qfwKiCkRi5Ec}, contentHash: {678dce}} - -[sequence] -v1,c,v2,c - -[v1] -Deseori, ai văzut doar norii negri de tristețe -Ce-au ascuns a cerului frumusețe -Și, plângând, ai căzut descurajat. -Apăsat de povara tot mai grea a îngrijorării, -Ce-ți răpește bucuria închinării, -Te simți singur, obosit, abandonat. - -[c] -/: Pacea Lui liniștește valul și orice furtună -Și la pieptul Său pe cei răniți adună. -Pacea Lui îți înviorează sufletul și viața -Și aduce după noapte dimineața :/ -Care-ți risipește teama prin credință. - -[v2] -Ai curaj să ridici privirea tristă din țărână, -Înspre tine e întinsă azi o mână -Care rupe orice lanț ce te-a legat. -Tu să știi, e putere în sângele jertfei Sale, -Pentru cei pierduți care doresc salvare. -Ești sub ocrotirea Celui Preaînalt. diff --git a/candidates/Grup Eldad/Grupul Eldad - Sa fiu neprihanit.txt b/candidates/Grup Eldad/Grupul Eldad - Sa fiu neprihanit.txt deleted file mode 100644 index 0a093fe80..000000000 --- a/candidates/Grup Eldad/Grupul Eldad - Sa fiu neprihanit.txt +++ /dev/null @@ -1,29 +0,0 @@ -[title] -Sa fiu neprihanit {alternative: {*}, composer: {Grupul Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {216500}, id: {2VPa3M9htAL42xb69CgBfy}, contentHash: {dcdb0e}} - -[sequence] -v1,c,v2,c,v3,c - -[v1] -Plăcute-Ti sunt, o Doamne, faptele curate -În cer vor locui doar cei neprihaniti -Curate ne vor fi a noastre haine-atuncea -În ziua cea măreață când Tu vei veni. - -[c] -Tu mă ajuți să fiu neprihanit, o Doamne -Căci doar curat pot înspre cer să-naintez -Firav eu sunt, dar Tu îmi ești Puterea -Și nu mă lași, și nu mă părăsești. - -[v2] -Plăcute-Ti sunt, o Tată, faptele curate -De îmi arăt iubirea chiar când sunt rănit -Ajută-mă să-ntind o mână caldă celui -Ce slab fiind, tristețe mi-a pricinuit. - -[v3] -Iubit Îți este omul ce are blândețe -Ce vrea să fie drept și-n văz și în ascuns -Să fiu și eu, ajută-mă, Părinte! -Tot ce promit să împlinesc, Isus diff --git a/candidates/Grup Eldad/Grupul Eldad - Se clatina lumea.txt b/candidates/Grup Eldad/Grupul Eldad - Se clatina lumea.txt deleted file mode 100644 index faace0ecf..000000000 --- a/candidates/Grup Eldad/Grupul Eldad - Se clatina lumea.txt +++ /dev/null @@ -1,25 +0,0 @@ -[title] -Se clatina lumea {alternative: {*}, composer: {Grupul Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {198906}, id: {bE7WfjQ4AzzfQzmNJm2cKq}, contentHash: {48d540}} - -[sequence] -v1,c,v2,c - -[v1] -/: Se clatină lumea și se înspăimântă -De valul și groaza ce i-a învăluit -Dar noi vrem să spunem a noastră speranță -E în mâna Celui ce ne-a mântuit :/ - -[c] -/: Noi nu, nu ne temem -Privirea noastră o ridicăm în sus -Nimic nu ne poate opri așteptarea -Să ne ia din suflet dorul și cântarea -Prin care Îți spunem: ” -Revino Isus!” :/ - -[v2] -/: Prin tot ce se întâmplă Scriptura vestește -Ca totul se-ndreaptă spre-un grabnic final -Dorim o Părinte să fii tu la cârmă -Să duci barca noastră prin valuri spre mal :/ diff --git a/candidates/Grup Eldad/Grupul Eldad - Te asteptam sa vii din nou isuse.txt b/candidates/Grup Eldad/Grupul Eldad - Te asteptam sa vii din nou isuse.txt deleted file mode 100644 index 1c9790154..000000000 --- a/candidates/Grup Eldad/Grupul Eldad - Te asteptam sa vii din nou isuse.txt +++ /dev/null @@ -1,35 +0,0 @@ -[title] -Te asteptam sa vii din nou Isuse {alternative: {*}, composer: {Grupul Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {154102}, id: {bnp7VJAYkGpqbFWLGT5LXd}, contentHash: {e109cf}} - -[sequence] -v1,c,v2,c2,v3,c2 - -[v1] -Te așteptăm să vii din nou, Isuse, -Prin Duhul Sfânt să Te cobori! -A noastre inimi spre Tine sunt deschise, -Revarsă-Ți, Doamne, harul Tău azi peste noi! - -[c] -Să ne atingi prin Duhul Sfânt, -Cobori în cercetare! -Să Te lăudăm și-al nostru cânt -Să străpungă zarea! - -[v2] -Te așteptăm să cercetezi și azi mulțimea -Cu-al Tău Cuvânt să îi pătrunzi. -Te așteptăm să le arăți iubirea, -Iubirea Ta ce schimbă și-astăzi vieți! - -[c2] -Să se coboare slava Ta, -Puterea Ta cea mare! -Și vrem ca azi, și pururea -Să Îți aducem Osanale! - -[v3] -Ne închinăm, smeriți venim la Tine, -La altarul sfânt să ne primești; -Și Te chemăm din inimă, Stăpâne, -Rămâi în viața noastră să domnești! diff --git a/candidates/Grup Eldad/Grupul Eldad - Tie iti cantam.txt b/candidates/Grup Eldad/Grupul Eldad - Tie iti cantam.txt deleted file mode 100644 index 4f3e83ade..000000000 --- a/candidates/Grup Eldad/Grupul Eldad - Tie iti cantam.txt +++ /dev/null @@ -1,29 +0,0 @@ -[title] -Tie iti cantam {alternative: {*}, composer: {Grupul Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {204289}, id: {xkqbhyJ3ocxC6ZQZaSR6Gx}, contentHash: {6a32bd}} - -[sequence] -c,s,c,s2,c,s3,c - -[c] -Ție Îți cântăm, pe Tine Te-adorăm -Tu ești Domn, în veci de veci -Ne-ai răscumpărat, viață Tu ne-ai dat -Doamne-n veci fii lăudat - -[s] -Bucuroși la Tine, Doamne, noi venim -Noi venim și-Ți mulțumim -Pentru harul Tău ceresc și minunat -Tu să fii glorificat - -[s2] -În prezența Ta, Isus, noi astăzi stăm -Astăzi stăm și ne-nchinăm -Te glorificăm, al nostru Împărat -Tu ești cel mai minunat - -[s3] -Aleluia, slavă, glorie-Ți cântăm -Noi Îți cântăm, Te lăudăm -Pentru bunătatea Ta, Isus iubit -Tu, pe noi ne-ai mântuit diff --git a/candidates/Grup Eldad/Grupul Eldad - Vas de lut.txt b/candidates/Grup Eldad/Grupul Eldad - Vas de lut.txt deleted file mode 100644 index 49101df38..000000000 --- a/candidates/Grup Eldad/Grupul Eldad - Vas de lut.txt +++ /dev/null @@ -1,35 +0,0 @@ -[title] -Vas de lut {alternative: {*}, composer: {Grupul Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {196668}, id: {nagsNhg4wpjM3PAXhrbhFg}, contentHash: {096ded}} - -[sequence] -v1,c,v2,c,v3,c - -[v1] -/: Vas de lut sunt doar un slujnic -Azi umplut, mâine vărsat -De Stăpânul meu puternic -Ce cu drag m-a modelat :/ - -[c] -Voi striga în gloată mare -Că Isus e domn măreț -Să nu tacă robii Lui, pe care El i-a ales -Voi cânta cu glas puternic, de războinic neînfricat -Cred în Tatăl ce promite biruință neîncetat -/: Voi striga în gloată mare -Că Isus e domn măreț -Să nu tacă robii Lui, pe care El i-a ales -Voi cânta cu glas puternic, de războinic neînfricat -Cred în Tatăl ce promite biruință neîncetat :/ - -[v2] -Boabe de muștar credința semanată prin Isus -El e Fiul ce pe cruce, mai multă credință a pus -Sună-n cântec o putere, revărsată prin Duh Sfânt -Se coboară peste mine și mă scoate din mormânt - -[v3] -Vas de lut sunt doar un slujnic -Azi umplut, mâine vărsat -De Stăpânul meu puternic -Ce cu drag m-a modelat diff --git a/candidates/Grup Eldad/Grupul Eldad - Vin inaintea Ta.txt b/candidates/Grup Eldad/Grupul Eldad - Vin inaintea Ta.txt deleted file mode 100644 index 393b33152..000000000 --- a/candidates/Grup Eldad/Grupul Eldad - Vin inaintea Ta.txt +++ /dev/null @@ -1,57 +0,0 @@ -[title] -Vin inaintea Ta {alternative: {*}, composer: {Grupul Eldad}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {176813}, id: {rAs3t9HKUosfxKG6uYDahs}, contentHash: {ef6b70}} - -[sequence] -v1,c,v2,c,v3,c,e - -[v1] -Vin inaintea Ta Isus -Și cad iarăși pe genunchi -Aduc aceleași rugăciuni -Căci vreau să vii să te induri - -[c] -De ce mă lași ades să cred -Să simt că Tu m-ai părăsit -Mă rog dar parcă nu mă asculți -Totuși continui să te chem. -Cuvinte multe am de spus -Nici nu mai știu cu ce să incep -Ajung mereu Doamne să spun: -” -Indură-te atât aștept!” -Cu mintea incerc să-ndepărtez -Atâtea indoieli și temeri -Ce s-au născut in ființa mea -Dar iarăși simt că n-am putere -Cuvinte caut, să Te-nduplec -Imi plâng din nou starea grea -Mă lupt cu gândurile mele -Și parcă incep să simt ceva. -Iți mulțumesc acum Părinte -Că Tu veghezi asupra mea -Chiar și atunci când mi se pare -Că m-ai lăsat din mâna Ta -Promisiunea Ta rămane -Că ești alăturea mereu -De cel ce strigă după Tine -Și-l scapi din ce-I pare mai greu. - -[v2] -Incep in ruga mea acum -Prin a-Ți cere iar iertare -Cuvintele greu se aud -Dar sufletul meu strigă tare. - -[v3] -Din plânsul de amărăciune -Incepe-al bucuriei plâns -Dispare orice-ngrijorare -Și cu iubire sunt cuprins - -[e] -Tu credincios rămai in toate -Chiar de multe eu nu sunt -Cuvintele le simt sarace -Sa-Ți mulțumesc că al Tău sunt, -Iți mulțumesc că al Tău sunt. diff --git a/candidates/Iovan Miclea/Iovan Miclea - Hai veniti la betleem.txt b/candidates/Iovan Miclea/Iovan Miclea - Hai veniti la betleem.txt deleted file mode 100644 index fdf409797..000000000 --- a/candidates/Iovan Miclea/Iovan Miclea - Hai veniti la betleem.txt +++ /dev/null @@ -1,40 +0,0 @@ -[title] -Hai veniti la betleem {alternative: {*}, composer: {Iovan Miclea}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {1460}, id: {uAApTk7ib3BCxB9vX3bEs8}, contentHash: {0840f3}} - -[sequence] -v1,c,v2,c,v3,c - -[v1] -Hai, veniți la Betleem -La Betleem -Lui Isus să ne închinăm -La Betleem. -Pruncului din cer venit -La Betleem -Ca să fie preamărit. - -[c] -Într-o iesle S-a născut -Fiul cel făr´ de început. -Mântuire-n El s-avem -La Betleem. - -[v2] -Pruncu-n scutece înfășat -La Betleem -Este Fiul de Împărat -La Betleem. -El ne-așteaptă cu iubire -La Betleem -Să-I aducem mulțumire -La Betleem. - -[v3] -Să-I cântăm cu bucurie -La Betleem -De acum până-n vecie -La Betleem -Lui Mesia, Pruncul sfânt -La Betleem -Domnul nostru pe pământ. -La Betleem. diff --git a/candidates/Iovan Miclea/Iovan Miclea - Slava ta o cant isuse.txt b/candidates/Iovan Miclea/Iovan Miclea - Slava ta o cant isuse.txt deleted file mode 100644 index c1cb6b036..000000000 --- a/candidates/Iovan Miclea/Iovan Miclea - Slava ta o cant isuse.txt +++ /dev/null @@ -1,35 +0,0 @@ -[title] -Slava ta o cant Isuse {alternative: {*}, composer: {Iovan Miclea}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {1265}, id: {kfMaJE63JYnSLfnRV97MGn}, contentHash: {c2b20f}} - -[sequence] -v1,c,v2,c,v3,c,v4,c - -[v1] -Slava Ta o cânt, Isuse, -Pentru că m--ai mântuit, -Prin jertfirea Ta pe cruce -M--ai iertat, m--ai curățit. - -[c] -Slăvit Miel divin, -Slăvit Miel divin, -Slăvit Miel divin, -Aici și--n veșnicii. - -[v2] -Tu povara de păcate -Mi--ai luat-o, m--ai scăpat, -Și în schimbul remușcării, -Pace sfântă Tu mi--ai dat. - -[v3] -Și de ce să nu cânt oare -Când Tu viață--mi dăruiești? -N--am pe nimenea sub soare -Mai măreț decât Tu ești! - -[v4] -Sunt al Tău în întregime, -Bunule Păstor divin! -Cu ce am și sunt, de--a pururi, -Ție, Doamne, mă închin! diff --git a/candidates/Iovan Miclea/Iovan Miclea - Un nume mai presus de toate.txt b/candidates/Iovan Miclea/Iovan Miclea - Un nume mai presus de toate.txt deleted file mode 100644 index 70791f656..000000000 --- a/candidates/Iovan Miclea/Iovan Miclea - Un nume mai presus de toate.txt +++ /dev/null @@ -1,29 +0,0 @@ -[title] -Un nume mai presus de toate {alternative: {*}, composer: {Iovan Miclea}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {208668}, id: {tj1c1DD1WQ8cBsreBLFnHL}, contentHash: {4a697c}} - -[sequence] -v1,c,v2,c,v3,c - -[v1] -Pentru mine, pentru tine, -Pentru tot ce-i păcătos, -A venit din cer anume -Domnul sfânt, Isus Hristos. - -[c] -/: Un nume mai presus de toate -E numele ce-l poartă El. -Cu inimi și sfințiri curate -Lăudați-L pe Emanuel! :/ - -[v2] -Să ne scape de pierzare -El pe cruce a murit. -În iubirea Lui cea mare -Pace-n veci ne-a dăruit. - -[v3] -Fericită ne e viața, -Însorită de Isus. -El ne-a întărit credința -Că vom merge-n ceruri sus. diff --git a/candidates/Iovan Miclea/Iovan Miclea - Viata tinereasca.txt b/candidates/Iovan Miclea/Iovan Miclea - Viata tinereasca.txt deleted file mode 100644 index e61ca1205..000000000 --- a/candidates/Iovan Miclea/Iovan Miclea - Viata tinereasca.txt +++ /dev/null @@ -1,29 +0,0 @@ -[title] -Viata tinereasca {alternative: {*}, composer: {Iovan Miclea}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {4826}, id: {ma2VeviKwhs5XAhSDgBQgX}, contentHash: {5574ed}} - -[sequence] -v1,c,v2,c,v3,c - -[v1] -Viață tinerească plină de elan. -Frumusețe, daruri, toate câte am -Le închin de-a-ntregul pentru Dumnezeu. -De viața mea dispune Domnul meu. - -[c] -Învățător este Isus -Conducător este Isus -Eu nu cunosc niciun altul -Decât Isus Hristos. - -[v2] -Să nu mă-ntristeze duhul celui rău -Să nu mă atragă jos din brațul Său -Inima și gândul să le umple dar -Pe deplin Isus slăvitul cu-al Său har. - -[v3] -Cât de fericit viața mi-o trăiesc -În Isus aflat-am tot ce eu doresc. -El mi-a dat iertare, mântuirea Sa. -Sunt salvat prin jertfa de pe Golgota. diff --git a/candidates/Kari Jobe/Kari Jobe - In veci El e glorificat - forever.txt b/candidates/Kari Jobe/Kari Jobe - In veci El e glorificat - forever.txt deleted file mode 100644 index a96cc0d5a..000000000 --- a/candidates/Kari Jobe/Kari Jobe - In veci El e glorificat - forever.txt +++ /dev/null @@ -1,37 +0,0 @@ -[title] -In veci El e glorificat {alternative: {Forever}, composer: {Kari Jobe}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {130377}, id: {bUcCtBd46ojEkjqfXqD69a}, contentHash: {b9a442}} - -[sequence] -v1,v2,c,b,c - -[v1] -Intreg pamant a plans -Chiar soarele s-a stins -El, Salvator Divin, lovit e -Pe cruce e strapuns -Tot sangele i-a curs -Blestemul lumii-ntregi purtand - -[v2] -Un ultim suflu greu -Chiar parasit de cer -Mielul e lasat sa moara -O lupta in mormant -Pe moarte El calcand -Puterea iadului e-nvinsa -Pamanul tremura -Mormantul s-a deschis -Nimic nu i-a tinut iubirea Sa -O, Moarte unde esti? -C-al nostru Imparat -Puterea in veci ti-a luat - -[c] -In veci El e Glorificat -In veci El este Inaltat -In veci El e glorificat -El este viu, Isus este viu - -[b] -Eu cant Aleluia, Eu cant Aleluia, -Eu cant Aleluia, Mielul a invins diff --git a/candidates/Marius Pop/Marius Pop - Da-i inima ta lui isus.txt b/candidates/Marius Pop/Marius Pop - Da-i inima ta lui isus.txt deleted file mode 100644 index 5d884a7fe..000000000 --- a/candidates/Marius Pop/Marius Pop - Da-i inima ta lui isus.txt +++ /dev/null @@ -1,32 +0,0 @@ -[title] -Da-i inima ta lui Isus {alternative: {*}, composer: {Marius Pop}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {157187}, id: {82K3WAWyMJtb3p7tt5AgUw}, contentHash: {b1b384}} - -[sequence] -v1,c,e - -[v1] -Dumnezeu atât ne-a iubit -Că a dat pe Fiul Său, -Ca oricine, crede în El -Să nu piară, ci să aibă viață veșnică! -Prin profeți a fost vestit -Mesia a fost numit, -S-a dezbrăcat de slava cerească -Să ne mântuiască -Azi te chem să vii să-I dai... - -[c] -Inima ta lui Isus -Primește viață, e darul nespus, -Pace la oameni a dat -Să-I cântăm, ne închinăm, Regelui, Domnului! - Dă-I inima ta lui Isus -Primește viață, e darul nespus, -Pace la oameni a dat -Să-I cântăm, ne închinăm, Regelui, Domnului! x3. - -[e] -/: A venit, S-a născut Salvatorul -A adus o speranță în El, -A împăcat omenirea cu Tatăl -S-a născut Isus! :/ diff --git a/candidates/Marius Pop/Marius Pop - Dragostea lui.txt b/candidates/Marius Pop/Marius Pop - Dragostea lui.txt deleted file mode 100644 index 8e5a63c67..000000000 --- a/candidates/Marius Pop/Marius Pop - Dragostea lui.txt +++ /dev/null @@ -1,33 +0,0 @@ -[title] -Dragostea lui {alternative: {*}, composer: {Marius Pop}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {90961}, id: {o8vzF64iz3Rkgu6MNUekg4}, contentHash: {0f8ea2}} - -[sequence] -v1,c,v2,c,e - -[v1] -Privesc spre jertfa de pe cruce la Calvar -Și mă gândesc la tot ce El mi-a dat în dar -El vina a purtat în locul meu și-al tău -Mielul lui Dumnezeu s-a dăruit - -[c] -Dragostea Lui e fără de margini -Întinderea Lui e fără apus -Iubirea Lui e asemănată -Cu infinit -Îmbrăcat în putere și-n slavă și-n glorie -Domnește în veci El e fără sfârșit -Cer și pământ îi vestesc pe vecie -Ești necuprins - -[v2] -Privesc spre jertfa de pe cruce la Calvar -Vreau să-nțeleg iubirea-ți fără de hotar -În palma Ta străpunsă Tu ne-ai mântuit -Ce har nemeritat să fiu iertat - -[e] -Neștiute suferinți lacrimi tainice fierbinți -Dăruite pentru mine la Calvar -Dumnezeu crucificat, pentru om sacrificat -Boldul morții ai învins la Golgota diff --git a/candidates/Marius Pop/Marius Pop - In fata regelui.txt b/candidates/Marius Pop/Marius Pop - In fata regelui.txt deleted file mode 100644 index a8acba605..000000000 --- a/candidates/Marius Pop/Marius Pop - In fata regelui.txt +++ /dev/null @@ -1,31 +0,0 @@ -[title] -In fata regelui {alternative: {*}, composer: {Marius Pop}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {158876}, id: {jJmdWbsGdQ38QDL72sXUa9}, contentHash: {e92b71}} - -[sequence] -v1,v2,c,v2,c,e,c - -[v1] -În fața Regelui ne smerim, -Aducem jertfele, ne sfințim! -Toarnă din Duhul Tău, peste popor, -Lasă să curgă-acum al Tău izvor! - -[v2] -Vrem revărsarea Ta, cu untdelemn, -Vrem bucuria Ta, să o vedem! -Vino și umple-ne, cu slava Ta, -Să lumineze-n noi iubirea Ta! - -[c] -/: Glorie, Îți cântăm, -Doar pe Tine Te onorăm! -Ne-aducem inima-n dar, -Jertfă vie pe altar! :/ - -[e] -/: -/: Sfânt ești, Tu, Isus! :/ -Vrem să Te lăudăm pe Tine, tot mai mult! -/: Sfânt ești, Tu, Isus! :/ -Vrem să Te onorăm pe Tine, tot mai mult! : -/:/ diff --git a/candidates/Marius Pop/Marius Pop - Psalmul.txt b/candidates/Marius Pop/Marius Pop - Psalmul.txt deleted file mode 100644 index d719ea0c3..000000000 --- a/candidates/Marius Pop/Marius Pop - Psalmul.txt +++ /dev/null @@ -1,22 +0,0 @@ -[title] -Psalmul {alternative: {*}, composer: {Marius Pop}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {146293}, id: {rhDaxGQDXGFJPkkrcNP6Pi}, contentHash: {4c2ea5}} - -[sequence] -v1,b,c - -[v1] -/: Domnul e Păstorul meu, -Eu lipsă n-am să duc. -El mă paște-n verzi pășuni -Și odihnă-mi dă. :/ - -[b] -/: Tu mă înviorezi, -Mereu mă cercetezi, -Toiagul și nuiaua Ta mă mângâie. :/ - -[c] -Fericirea și-ndurarea mă vor însoți, -Bunătatea ți iertarea mă vor acoperi. -Untdelemn sfânt, Isuse, în inimă-mi reverși, -/: Paharul meu e plin și dă peste el. :/ diff --git a/candidates/Messis/Messis - Cantec din iubire.txt b/candidates/Messis/Messis - Cantec din iubire.txt deleted file mode 100644 index 64ff9e6e4..000000000 --- a/candidates/Messis/Messis - Cantec din iubire.txt +++ /dev/null @@ -1,31 +0,0 @@ -[title] -Cantec din iubire {alternative: {*}, composer: {Messis}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {114825}, id: {3XUfHKzWH8KyeBzcLcxRo5}, contentHash: {f6530a}} - -[sequence] -v1,c,v2,c,e - -[v1] -E un cântec ce-a fost scris doar din iubire -E o taină ce ne poartă în zbor semeț -Și un cântec ce ne-nvață că iubirea -/: Pe pământ dar și în ceruri e de preț. :/ -Sunt atâția care caută fericirea -Și voi știți care e calea s-o aveți -Voi în dragoste-ați aflat că viața-aceasta -/: E frumoasă dacă în Domnul vă-ncredeți. :/ - -[c] -/: Dar voi nu, nu vă îngrijorați -Voi în Domnul viața voastr-o ancorați -Prin furtună și prin ploi veți vedea că e cu voi -Veți fi tari în mâna-I tare amândoi. :/ - -[v2] -Veți afla că-n viață totul e credința -Și că dragostea-i al slavei dar măreț -Și-mpreună veți afla că biruința -/: E atunci când unul pe-altul vă aveți. :/ - -[e] -Prin furtună și prin ploi veți vedea că e cu voi -Veți fi tari în mâna-I tare amândoi. diff --git a/candidates/Messis/Messis - Iata s-a nascut.txt b/candidates/Messis/Messis - Iata s-a nascut.txt deleted file mode 100644 index c60235678..000000000 --- a/candidates/Messis/Messis - Iata s-a nascut.txt +++ /dev/null @@ -1,51 +0,0 @@ -[title] -Iata s-a nascut {alternative: {*}, composer: {Messis}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {237516}, id: {8FbjV5S6JTdRP6FanaYAYS}, contentHash: {a998f9}} - -[sequence] -v1,c,v2,c,e - -[v1] -Auziți ce veste, -Despre-un Prunc în iesle, -Despre mântuire, -Despre pace dată-n dar. -Îngerul ne spune, -Despre o minune, -Câtă bucurie, -Viață-n dar El ne-a adus, -Mantuire ne-a adus. -Să cântăm toți: - -[c] -Cerul iată s-a deschis, -S-a împlinit ce Domnul ne-a promis. -Să ne-nchinăm cu toți la ieslea Sa -Și viata-ntreagă ne-o va lumina. -Iată S-a născut! -Iată S-a născut! -Cerul iată s-a deschis, -S-a împlinit ce Domnul ne-a promis. -Să ne-nchinăm cu toți la ieslea Sa -Și viata-ntreagă ne-o va lumina. -Iată S-a născut! -Iată S-a născut! -Iată S-a născut! -Iată S-a născut! - -[v2] -Stai acum și-ascultă -Pentru cine cântă -Îngerii din ceruri, -Poate e colinda ta. -O, ce veste mare, -O, ce sărbătoare, -N-o lăsa să treacă, -Vino-acum și vei vedea -Viața îți va lumina. -Pe vecie: - -[e] -Pentru cine vine, -Pentru cei ca tine, -Pentru orișicine, -E venirea Sa. diff --git a/candidates/Messis/Messis - In prezenta ta sunt frant.txt b/candidates/Messis/Messis - In prezenta ta sunt frant.txt deleted file mode 100644 index 29d8a5845..000000000 --- a/candidates/Messis/Messis - In prezenta ta sunt frant.txt +++ /dev/null @@ -1,24 +0,0 @@ -[title] -In prezenta ta sunt frant {alternative: {*}, composer: {Messis}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {160699}, id: {dnUkE9iuCAd2GcjMLuSoYZ}, contentHash: {fd3ace}} - -[sequence] -v1,c,v2,c - -[v1] -În prezența Ta sunt frânt, -Ca un vas cu mir turnat, -Tot ce am, cu tot ce sunt, -Frânt mă plec-naintea Ta! - -[c] -Eu pun viața mea -În mâna Ta, -În mâna Ta, -Cuvinte n-am s-aduc, -Dar voia mea e voia Ta! - -[v2] -Doamne măreția Ta, -Mă aduce pe genunchi, -Nu voi fi nicicând la fel, -În Hristos nădejdea-mi pun! diff --git a/candidates/Messis/Messis - Inconjurat de slava.txt b/candidates/Messis/Messis - Inconjurat de slava.txt deleted file mode 100644 index 756ff5be0..000000000 --- a/candidates/Messis/Messis - Inconjurat de slava.txt +++ /dev/null @@ -1,28 +0,0 @@ -[title] -Inconjurat de slava {alternative: {*}, composer: {Messis}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {158386}, id: {aUHeGdpq5XVWqjwNVj2stq}, contentHash: {dd0549}} - -[sequence] -v1,c,v2,c - -[v1] -Înconjurat de slavă, -Te laudă bolta-ntreagă, -Și îngerii Îți cântă, Doamne! -Te laudă-a Ta creație, -Cu Cerul întreg dă glorie, -Cu inima deschisă, m-alătur lor. - -[c] -/: Și Îți cânt glorie, Doamne, -Eu Îți cânt glorie, în veci! -Tu Te cobori și-mi umpli sufletul, de pace! -Și Îți cânt glorie, Doamne, -Eu Îți cânt glorie, în veci! -Tu mă-nconjori și mă păstrezi mereu în brațe, Doamne! :/ - -[v2] -Ți-ai arătat puterea, -Mi-ai dat și mângâierea, -În veci de veci, Tu, Doamne, domnești! -Bătrâni cu bucurie, în cer se-nchină Ție, -Cu inima deschisă, mă-nchin și eu! diff --git a/candidates/Messis/Messis - Nu pot uita.txt b/candidates/Messis/Messis - Nu pot uita.txt deleted file mode 100644 index 6e3bcfe4c..000000000 --- a/candidates/Messis/Messis - Nu pot uita.txt +++ /dev/null @@ -1,25 +0,0 @@ -[title] -Nu pot uita {alternative: {*}, composer: {Messis}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {240061}, id: {n2BKUiV1D6wmCjQwXu1gBt}, contentHash: {66c496}} - -[sequence] -v1,c,v2,c - -[v1] -Gândul meu sus la cruce se îndreaptă, -Spre-acel loc, unde sânge a curs. -Îmi înalț azi privirea spre cruce, -Ca să văd pe-al meu Domn răstignit. -Văd și azi cum Acel fără vină e lovit! - -[c] -Nu pot uita cum pe crucea grea, -Mureai pentru mine! Dureri și suspine -Adânc sufereai! Și-atunci mă iubeai -Tu pe mine! - -[v2] -Ostenit duce crucea spre Golgota. -Al meu Domn varsă lacrimi, părăsit. -Ca un Miel poartă a mea povară, -Fără glas, chiar și când e lovit. -În smerenie deschis-a El calea. Fii slăvit! diff --git a/candidates/Messis/Messis - Spui ca tu cauti viata.txt b/candidates/Messis/Messis - Spui ca tu cauti viata.txt deleted file mode 100644 index 5e9619b66..000000000 --- a/candidates/Messis/Messis - Spui ca tu cauti viata.txt +++ /dev/null @@ -1,29 +0,0 @@ -[title] -Spui ca tu cauti viata {alternative: {*}, composer: {Messis}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {225313}, id: {ksCKVyCFF5a6VCFZWjmfmg}, contentHash: {32d472}} - -[sequence] -v1,c,v2,c - -[v1] -Te-ai oprit doar o clipă -Să te-ntrebi unde te duci -Poate n-ai nicio țintă dar alergi -Te-ai pornit cu așa grabă -Insa oare unde ajungi -E acesta sfârșitul ce-l alegi? - -[c] -/: Spui că tu cauți viața -În schimb ți-ai pierdut speranța -Tot ce credeai etern acum e-un abur risipit -Azi vreau să-ți dau de știre -E vie a Lui iubire -Încă te-așteaptă ca să vii. :/ - -[v2] -A plătit pentru tine -Cu al său sânge curat -Ca să ai azi viață s-a jertfit -Poți să ai mântuire -Să fii liber de păcat -Poți să fii cu Isus pân’ la sfârșit. diff --git a/candidates/Messis/Messis - Voi chema numele tau.txt b/candidates/Messis/Messis - Voi chema numele tau.txt deleted file mode 100644 index bc8c6601f..000000000 --- a/candidates/Messis/Messis - Voi chema numele tau.txt +++ /dev/null @@ -1,33 +0,0 @@ -[title] -Voi chema numele tau {alternative: {*}, composer: {Messis}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {158158}, id: {wufSspT8hQcmQcY2aRGzvB}, contentHash: {328812}} - -[sequence] -v1,c,v2,c,e - -[v1] -Mă chemi și azi să merg pe ape, -Spre-un viitor necunoscut. -Și valuri vin să mă doboare, -Dar mă încred și încă lupt. - -[c] -Eu voi chema Numele Tău, -Spre cer Isus, privesc mereu. -Când valuri vin, sunt liniștit în brațul Tău, -Ești Domnul meu și sunt al Tău. -Eu voi chema Numele Tău, -Spre cer Isus, privesc mereu. -Când valuri vin, sunt liniștit în brațul Tău, -Ești Domnul meu și sunt al Tău. - -[v2] -Iar harul Tău mă însoțește, -Când toți se-ascund, cu mine fii! -Oricât de mare-ar fi furtuna, -Tu, Dumnezeu, vei birui! - -[e] -/: O, Duh Sfânt ce mă-ntărești, să-mi fii aproape, -Ca să pot păși pe ape, când Domnul meu mă cheamă. -Călăuză-mi fii în noapte acolo unde -Doar credința mai rămâne, alungă a mea teamă! :/ x4 diff --git a/candidates/Samuel Bratu/Samuel Bratu - Crezand in el vom trai.txt b/candidates/Samuel Bratu/Samuel Bratu - Crezand in el vom trai.txt deleted file mode 100644 index fa607c12a..000000000 --- a/candidates/Samuel Bratu/Samuel Bratu - Crezand in el vom trai.txt +++ /dev/null @@ -1,35 +0,0 @@ -[title] -Crezand in el vom trai {alternative: {*}, composer: {Samuel Bratu}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {202974}, id: {21A8T31FvVsyazpiHU2i9H}, contentHash: {c51e2b}} - -[sequence] -v1,v2,v3 - -[v1] -L-am văzut suspinând, -Crucea-n spate ducând. -Spre Golgota, trudit, -Se ducea. -/: Mâinile l-au străpuns, -Cu tâlharii L-au pus. -Iar preoții din jur -Îl huleau. :/ - -[v2] -Când pe cruce murea -Jertfa Lui ne ierta, -Chinuit, pentru noi, -Se ruga. -/: Suferind El știa -Că din morți va-nvia. -Și crezând doar în El -Vom trăi. :/ - -[v3] -Harul Lui cel bogat -Și pentru noi s-a arătat, -Pentru cei ce pe Isus -L-au acceptat. -/: Sângele-I sfânt, curat -Și pe noi ne-a spălat. -Viață-n dar, prin Isus, -Am primit. :/ diff --git a/candidates/Samuel Bratu/Samuel Bratu - Doar un nume sfant.txt b/candidates/Samuel Bratu/Samuel Bratu - Doar un nume sfant.txt deleted file mode 100644 index 845c74637..000000000 --- a/candidates/Samuel Bratu/Samuel Bratu - Doar un nume sfant.txt +++ /dev/null @@ -1,27 +0,0 @@ -[title] -Doar un nume sfant {alternative: {*}, composer: {Samuel Bratu}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {203125}, id: {cDcvCar3iF6xaTTzwHHd7N}, contentHash: {b8b5ed}} - -[sequence] -v1,c,v2,c - -[v1] -El, măcar că avea chip de Dumnezeu -La slavă a renunțat, cu smerenie S-a îmbrăcat. -A trăit pe pământ, chip de om a luat, -Chiar la cruce S-a dus, pe lemn crucificat. - -[c] -Doar un Nume Sfânt sub soare ni s-a dat, -În care orice om poate fi salvat. -El e singurul născut din Dumnezeu. -În fața Lui, salvat mă-nchin și eu. - -[v2] -De aceea Dumnezeu -L-a înălțat mai presus. -Alt nume nu s-a dat -Mai măreț ca și Isus. -Orice neam sau limbă -Să proclame ne-ncetat -Că Isus Hristos -E Domn și Împărat. diff --git a/candidates/Samuel Bratu/Samuel Bratu - Dumnezeu s-a apropiat de noi.txt b/candidates/Samuel Bratu/Samuel Bratu - Dumnezeu s-a apropiat de noi.txt deleted file mode 100644 index 2afc729ba..000000000 --- a/candidates/Samuel Bratu/Samuel Bratu - Dumnezeu s-a apropiat de noi.txt +++ /dev/null @@ -1,23 +0,0 @@ -[title] -Dumnezeu s-a apropiat de noi {alternative: {*}, composer: {Samuel Bratu}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {203711}, id: {g77JibVcoyckYvDDopFncN}, contentHash: {78c25c}} - -[sequence] -v1,c,v2,c - -[v1] -Vestea minunată ce a venit de sus, -A umplut pământul, pace i-a adus. -Născut din Duhul Sfânt, în lume a venit. -Dumnezeu adevărat spre noi S-a aplecat. - -[c] -/: Emanuel, Dumnezeul așteptat, -E cu noi, de moarte ne-a scăpat. -Salvați, prin El, suntem fii de Împărat, -Prin iubirea Lui ne-a câștigat. :/ - -[v2] -Cel născut în iesle știe cum e jos. -Încă mai primește orice păcătos. -Ar vrea să se nască și-n viața ta. -Azi e timpul să-L primești, deschide-ți inima! diff --git a/candidates/Samuel Bratu/Samuel Bratu - In palma ta.txt b/candidates/Samuel Bratu/Samuel Bratu - In palma ta.txt deleted file mode 100644 index 955b75fe3..000000000 --- a/candidates/Samuel Bratu/Samuel Bratu - In palma ta.txt +++ /dev/null @@ -1,29 +0,0 @@ -[title] -In palma ta {alternative: {*}, composer: {Samuel Bratu}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {202346}, id: {oQjbVB3fj9rfa5bnHY79wt}, contentHash: {506194}} - -[sequence] -v1,c,v2,c - -[v1] -Chiar dacă rod nu ar mai fi -Și orice bun dac-ar lipsi -Chiar dacă totul s-ar usca, -Și niciun pom n-ar înflori. -În Tine mă voi bucura -În Tine e tăria mea. - -[c] -În palma Ta, Doamne eu voi fi -Ești sprijinul ce nu îmi va lipsi -Și orice griji, Ție Ți le voi da, -Tu ai promis că nu mă vei lăsa. - -[v2] -Tu mereu ești credincios, -Neschimbat în veci rămâi. -Și chiar din valul furios -Auzi strigătul oricui. -De la munți de-aș aștepta -Ajutor nu voi primi. -Stânca mea rămâi doar Tu, -Și salvare îmi vei fi. diff --git a/candidates/Samuel Bratu/Samuel Bratu - Pruncul imparat.txt b/candidates/Samuel Bratu/Samuel Bratu - Pruncul imparat.txt deleted file mode 100644 index a609d8a1e..000000000 --- a/candidates/Samuel Bratu/Samuel Bratu - Pruncul imparat.txt +++ /dev/null @@ -1,30 +0,0 @@ -[title] -Pruncul imparat {alternative: {*}, composer: {Samuel Bratu}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {206964}, id: {fr4Xh9ZbrVJTU3A4G1wY4g}, contentHash: {5d2067}} - -[sequence] -v1,c,v2,c2 - -[v1] -Cel ce e mai mare decât Universu-ntreg -Printr-un Prunc se naște în ieslea din Betleem. -Slava din cer a schimbat-o cu micul sălaș, -Creatorul lumii a găsit loc doar într-un grajd. - -[c] -Dar El rămâne neschimbat, -Chiar și-n iesle e Împărat -Azi cu toții ne aplecăm -Regelui închinare să-I dăm, -Lui ne închinăm o, o, o, o. - -[v2] -A trăit printre oameni, cu iubire El aștepta -Orice suflet să creadă pe deplin în Jertfa Sa. -Și-a dat viața pe cruce, salvarea prin El a venit, -Ne-a adus mântuirea, prin El viață am primit. - -[c2] -Bucuroși în veci Îi cântăm, -Pe Isus Îl înălțăm. -Prințul păcii, Domn minunat, -El ne-a salvat o, o, o, o. diff --git a/candidates/resurse_crestine_raw/Otniel Stirb - Cel ce sta sub ocrotirea celui preainalt.txt b/candidates/resurse_crestine_raw/Otniel Stirb - Cel ce sta sub ocrotirea celui preainalt.txt deleted file mode 100644 index 2e0b19e0a..000000000 --- a/candidates/resurse_crestine_raw/Otniel Stirb - Cel ce sta sub ocrotirea celui preainalt.txt +++ /dev/null @@ -1,30 +0,0 @@ -[title] -Cel ce sta sub ocrotirea celui preainalt {alternative: {*}, composer: {Otniel Stirb}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {189709}, id: {epQYmmEZYZM62UG4f2GY4P}, contentHash: {13a18c}} - -[sequence] -v1,c,v2,c,v3,c - -[v1] -Cel ce stă sub ocrotirea Celui Preaînalt -Și la umbra Lui se odihnește -Poate zice despre Domnul: „ -El mi-e adăpost, -Ajutor la greu, ce nu lipsește.” - -[c] -/: Nu te teme, frate, nu te teme! -Domnu-i locul tău de adăpost! -Marea-I îndurare-n orice vreme -Din atâtea încercări ne-a scos. :/ - -[v2] -De săgeți ce zboară ziua tu să nu temi, -Pavăză-i a Lui credincioșie; -Chiar în miez de noapte vine, când smerit Îl chemi, -Cum să-i scape pe ai Săi, El știe. - -[v3] -Sub a Lui aripă sfântă când ne-adăpostim, -Pot să vină vremuri de-ncercare; -Izbăvirea noastră-i Domnul, noi spre El privim, -Cel Preaînalt e turnul de scăpare. diff --git a/candidates/resurse_crestine_raw/Ovidiu Liteanu - Hai in rai.txt b/candidates/resurse_crestine_raw/Ovidiu Liteanu - Hai in rai.txt deleted file mode 100644 index c3562958b..000000000 --- a/candidates/resurse_crestine_raw/Ovidiu Liteanu - Hai in rai.txt +++ /dev/null @@ -1,33 +0,0 @@ -[title] -Hai in rai {alternative: {*}, composer: {Ovidiu Liteanu}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {6285}, id: {aybnekmKRovxdSy7tsLvBu}, contentHash: {ddee44}} - -[sequence] -v1,c,v2,c,v3,c,v4,c - -[v1] -Sfânta chemare, se aude. -Vino să pornești de azi pe-al vieții drum. -Domnul din Ceruri, te iubește. -Te îndeamnă să pornești spre El acum. - -[c] -/: Hai în Rai, ce mai stai, -Vino să trăiești în slăvile Cerești, hai în Rai :/ - -[v2] -Ce mare-i Harul, Mântuirii. -Duhul Sfânt te cercetează-n drumul tău -Te mântuiește, ieși din lume. -Azi mai poți să te întorci la Dumnezeu. - -[v3] -Nu pierde șansa, Mântuirii. -Domnul vrea să-ți scrie numele în Cer. -Primi-vei pace, bucurie. -Și vei fi răpit în Ceruri pentru El. - -[v4] -Crede că Domnul, pentru tine. -Pe o cruce a murit în locul tău. -Acum spune-i, o Isuse. -Vin plângând Te rog mă iartă Domnul meu. diff --git a/candidates/resurse_crestine_raw/Puiu Chibici - Calatori spre tara sfanta.txt b/candidates/resurse_crestine_raw/Puiu Chibici - Calatori spre tara sfanta.txt deleted file mode 100644 index 910e2d941..000000000 --- a/candidates/resurse_crestine_raw/Puiu Chibici - Calatori spre tara sfanta.txt +++ /dev/null @@ -1,29 +0,0 @@ -[title] -Calatori spre tara sfanta {alternative: {*}, composer: {Puiu Chibici}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {57626}, id: {am8RLwDpqpZAbSzi6K99mj}, contentHash: {ff7042}} - -[sequence] -v1,v2,v3,v4 - -[v1] -Călători spre țara sfântă -Noi suntem aicea jos, -Cerul e a noastră țintă -Și-al nost´ Mire drag Hristos. - -[v2] -Haideți toți cu bucurie -Către patria de sus -Să cântăm o veșnicie -Împreună cu Isus. - -[v3] -În umblarea noastră scurtă -Aici suntem trecători, -Dar sfârșind această luptă -Vom fi-n cer nemuritori. - -[v4] -Prin furtuni și prin talazuri -Zi de zi cu greu răzbim, -Prin dureri și prin necazuri -Doar cu Isus biruim. diff --git a/candidates/resurse_crestine_raw/Puiu Chibici - De ce stai mut.txt b/candidates/resurse_crestine_raw/Puiu Chibici - De ce stai mut.txt deleted file mode 100644 index f74ae649b..000000000 --- a/candidates/resurse_crestine_raw/Puiu Chibici - De ce stai mut.txt +++ /dev/null @@ -1,32 +0,0 @@ -[title] -De ce stai mut {alternative: {*}, composer: {Puiu Chibici}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {6571}, id: {4H5g9M9GTKrPQFknWZXBLt}, contentHash: {1ecb33}} - -[sequence] -v1,c,v2,c,v3,c - -[v1] -De ce stai mut când îți vorbesc -Și nu mă mustri când greșesc, -De ce mi-e cerul nepătruns, -De ce de mine Te-ai ascuns, -De ce nu-mi dai, Doamne, răspuns? - -[c] -O, unde ești, o, unde ești? -De ce nu poți să mă privești? -Știu c-am greșit, știu că sunt rău, -Dar știu că-I mare harul Tău. - -[v2] -De-atâta vreme-s în cuptor, -Ard și n-am niciun ajutor, -Vrei oare să mă curățești, -Sau poate să mă nimicești, -Sau așa-mi spui că mă iubești? - -[v3] -Te rog frumos, Stăpânul meu, -Preasfânt și mare Dumnezeu, -Smerit, plecat, umil, supus, -Vin în Numele lui Isus, -Fă ruga mea s-ajungă sus. diff --git a/candidates/resurse_crestine_raw/Puiu Chibici - Intr-un sat ne-nsemnat.txt b/candidates/resurse_crestine_raw/Puiu Chibici - Intr-un sat ne-nsemnat.txt deleted file mode 100644 index 2e8171013..000000000 --- a/candidates/resurse_crestine_raw/Puiu Chibici - Intr-un sat ne-nsemnat.txt +++ /dev/null @@ -1,31 +0,0 @@ -[title] -Intr-un sat ne-nsemnat {alternative: {*}, composer: {Puiu Chibici}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {60417}, id: {u8SYWFhZ4T7dC1bFEW8qZt}, contentHash: {f9c19b}} - -[sequence] -v1,v2,v3,v4 - -[v1] -Într-un sat ne-nsemnat -În țara lui Israel -S-a născut un Împărat -Pe nume Emanuel. - -[v2] -Niște magi din răsărit -Au văzut pe cer o stea -Și în grabă au venit -Să-L vadă pe Mesia. - -[v3] -Daruri multe au adus -Cu iubire acolo jos, -Pentru Pruncul mic Isus, -Pentru Regele Hristos. - -[v4] -Când păstorii au aflat, -La staul au alergat -Și cu îngerii din cer -Slavă, slavă au cântat, -Cu oștirea cea de sus, -Slavă, slavă lui Isus. diff --git a/candidates/resurse_crestine_raw/Traian Dorz - Ma iubesti tu mai mult decat ceilalti.txt b/candidates/resurse_crestine_raw/Traian Dorz - Ma iubesti tu mai mult decat ceilalti.txt deleted file mode 100644 index 09846f329..000000000 --- a/candidates/resurse_crestine_raw/Traian Dorz - Ma iubesti tu mai mult decat ceilalti.txt +++ /dev/null @@ -1,47 +0,0 @@ -[title] -Ma iubesti tu mai mult decat ceilalti {alternative: {*}, composer: {Traian Dorz}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {203635}, id: {4vNUPwBz2t2XS7RkeDA6u3}, contentHash: {a2f2fe}} - -[sequence] -v1,c,v2,c,v3,c,v4,c - -[v1] -Mă iubești tu mai mult decât ceilalți, -Mă iubești ca pe-un frate ceresc, -Mă iubești tu, ca rod din iubire? -/: Eu așa, Eu așa te iubesc! :/ - -[c] -Mă iubești tu, când sunt lângă tine, -Dar și-atunci când te simți părăsit? -Mă iubești și-ntre flori și-ntre suliți?! -/: Eu așa, Eu așa te-am iubit! :/ -Mă iubești tu, când sunt lângă tine, -Dar și-atunci când te simți părăsit? -Mă iubești și-ntre flori și-ntre suliți?! -/: Eu așa, Eu așa te-am iubit! :/ -Mă iubești tu, când sunt lângă tine, -Dar și-atunci când te simți părăsit? -Mă iubești și-ntre flori și-ntre suliți?! -/: Eu așa, Eu așa te-am iubit! :/ -Mă iubești tu, când sunt lângă tine, -Dar și-atunci când te simți părăsit? -Mă iubești și-ntre flori și-ntre suliți?! -/: Eu așa, Eu așa te-am iubit! :/ - -[v2] -Mă iubești tu mai mult decât ceilalți, -Mai presus de-orice gând pământesc, -Mai presus de-orice dragoste-a firii, -/: Eu așa, Eu așa te iubesc! :/ - -[v3] -Mă iubești tu, mai mult decât ceilalți, -Decât cei ce arar Mă-nsoțesc, -Mă iubești, tu, privind veșnicia?! -/: Eu așa, Eu așa te iubesc! :/ - -[v4] -Simți că-n lume străine-ți sunt toate, -Simți că-n Mine-ți sunt totu-mplinit, -Mă iubești, tu, mai mult ca pe tine?! -/: Eu așa, Eu așa te-am iubit! :/ diff --git a/temp-runners/importSongsFromRcByAuthors.ts b/import-songs-temp-runners/importSongsFromRcByAuthors.ts similarity index 100% rename from temp-runners/importSongsFromRcByAuthors.ts rename to import-songs-temp-runners/importSongsFromRcByAuthors.ts diff --git a/temp-runners/importSongsFromRcByIds.ts b/import-songs-temp-runners/importSongsFromRcByIds.ts similarity index 100% rename from temp-runners/importSongsFromRcByIds.ts rename to import-songs-temp-runners/importSongsFromRcByIds.ts diff --git a/temp-runners/manual_picks.txt b/import-songs-temp-runners/manual_picks.txt similarity index 100% rename from temp-runners/manual_picks.txt rename to import-songs-temp-runners/manual_picks.txt diff --git a/temp-runners/manual_picks_rest.txt b/import-songs-temp-runners/manual_picks_rest.txt similarity index 100% rename from temp-runners/manual_picks_rest.txt rename to import-songs-temp-runners/manual_picks_rest.txt diff --git a/temp-runners/moveExistingWorshipSongsToDir.ts b/import-songs-temp-runners/moveExistingWorshipSongsToDir.ts similarity index 100% rename from temp-runners/moveExistingWorshipSongsToDir.ts rename to import-songs-temp-runners/moveExistingWorshipSongsToDir.ts diff --git a/import-songs-temp-runners/rc_authors_to_process.txt b/import-songs-temp-runners/rc_authors_to_process.txt new file mode 100644 index 000000000..e69de29bb diff --git a/temp-runners/rc_ids_to_ignore.txt b/import-songs-temp-runners/rc_ids_to_ignore.txt similarity index 100% rename from temp-runners/rc_ids_to_ignore.txt rename to import-songs-temp-runners/rc_ids_to_ignore.txt diff --git a/import-songs-temp-runners/rc_ids_to_process.txt b/import-songs-temp-runners/rc_ids_to_process.txt new file mode 100644 index 000000000..e69de29bb diff --git a/jest.config.ts b/jest.config.ts index 50fa7c77b..6c7a6acce 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -1,7 +1,9 @@ -import type { JestConfigWithTsJest } from 'ts-jest'; +import { createDefaultEsmPreset, type JestConfigWithTsJest } from 'ts-jest'; + +const defaultEsmPreset = createDefaultEsmPreset(); const jestConfig: JestConfigWithTsJest = { - preset: 'ts-jest/presets/default-esm', + ...defaultEsmPreset, moduleDirectories: ['', 'node_modules'], moduleNameMapper: { '^(\\.{1,2}/.*)\\.js$': '$1', @@ -19,9 +21,9 @@ const jestConfig: JestConfigWithTsJest = { useESM: true, }, ], + '^.+.tsx?$': ['ts-jest', {}], }, // https://github.com/jestjs/jest/issues/14305#issuecomment-1627346697 prettierPath: null, }; - export default jestConfig; diff --git a/package-lock.json b/package-lock.json index 44402e05a..0e2a659ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,27 +13,27 @@ "@types/nspell": "^2.1.6", "@types/string-similarity": "^4.0.2", "chalk": "^4.1.2", - "crlf-normalize": "^1.0.19", - "dictionary-ro": "^2.1.0", - "dotenv": "^16.3.1", - "fs-extra": "^11.1.1", + "crlf-normalize": "^1.0.20", + "dictionary-ro": "^3.0.0", + "dotenv": "^16.4.5", + "fs-extra": "^11.2.0", "iconv": "^3.0.1", "is-ci": "^3.0.1", "lodash-es": "^4.17.21", "nspell": "^2.1.5", "p-map": "^4.0.0", "recursive-readdir": "^2.2.3", - "short-uuid": "^4.2.2", + "short-uuid": "^5.2.0", "string-similarity": "^4.0.4" }, "devDependencies": { - "@tsconfig/node-lts": "^18.12.5", + "@tsconfig/node-lts": "^22.0.0", "@types/fs-extra": "^11.0.4", "@types/iconv": "^3.0.4", - "@types/jest": "^29.5.8", - "@types/lodash": "^4.14.201", - "@types/lodash-es": "^4.17.11", - "@types/node": "^20.9.2", + "@types/jest": "^29.5.14", + "@types/lodash": "^4.17.13", + "@types/lodash-es": "^4.17.12", + "@types/node": "^22.9.0", "@types/recursive-readdir": "^2.2.4", "@typescript-eslint/eslint-plugin": "^6.11.0", "@typescript-eslint/parser": "^6.11.0", @@ -41,17 +41,18 @@ "eslint-plugin-require-extensions": "^0.1.3", "is-ci-cli": "^2.2.0", "jest": "^29.7.0", - "jest-runner-eslint": "^2.1.2", + "jest-runner-eslint": "^2.2.1", "jest-snapshot": "^29.7.0", "jest-watch-typeahead": "^2.2.2", "lodash": "^4.17.21", - "prettier": "^3.1.0", + "prettier": "^3.3.3", "prettier-plugin-latex": "^2.0.1", - "prettier-plugin-organize-imports": "^3.2.4", - "prettier-plugin-packagejson": "^2.4.6", - "ts-jest": "^29.1.1", - "ts-node": "^10.9.1", - "tslib": "^2.6.2", + "prettier-plugin-organize-imports": "^4.1.0", + "prettier-plugin-packagejson": "^2.5.3", + "rimraf": "^6.0.1", + "ts-jest": "^29.2.5", + "ts-node": "^10.9.2", + "tslib": "^2.8.1", "typescript": "5.1.6" } }, @@ -788,18 +789,18 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", - "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz", - "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -820,22 +821,23 @@ } }, "node_modules/@eslint/js": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz", - "integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { @@ -856,11 +858,108 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", "dev": true }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -1425,19 +1524,11 @@ "node": ">= 8" } }, - "node_modules/@pkgr/utils": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", - "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "fast-glob": "^3.3.0", - "is-glob": "^4.0.3", - "open": "^9.1.0", - "picocolors": "^1.0.0", - "tslib": "^2.6.0" - }, "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, @@ -1470,9 +1561,9 @@ } }, "node_modules/@tsconfig/node-lts": { - "version": "18.12.5", - "resolved": "https://registry.npmjs.org/@tsconfig/node-lts/-/node-lts-18.12.5.tgz", - "integrity": "sha512-KJZX0kQ5FBv77WDVzmQ9y1dUjaJCNXAAz3LSsg5cMwH0AUijVdDQtII+IVprEXdb13U9GjVOBxBzyRvr/ozPxw==", + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/@tsconfig/node-lts/-/node-lts-22.0.0.tgz", + "integrity": "sha512-6y6CBFe0etz2xU1s0rGOj7pLsvbYXM9l/RNmBQOKI3S5DFrp1jigxx8uYupG5O6cCNXNlOE/1gquoQH01+kz5w==", "dev": true }, "node_modules/@tsconfig/node10": { @@ -1601,9 +1692,9 @@ } }, "node_modules/@types/jest": { - "version": "29.5.8", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.8.tgz", - "integrity": "sha512-fXEFTxMV2Co8ZF5aYFJv+YeA08RTYJfhtN5c9JSv/mFEMe+xxjufCb+PHL+bJcMs/ebPUsBu+UNTEz+ydXrR6g==", + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", "dev": true, "dependencies": { "expect": "^29.0.0", @@ -1626,26 +1717,26 @@ } }, "node_modules/@types/lodash": { - "version": "4.14.201", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.201.tgz", - "integrity": "sha512-y9euML0cim1JrykNxADLfaG0FgD1g/yTHwUs/Jg9ZIU7WKj2/4IW9Lbb1WZbvck78W/lfGXFfe+u2EGfIJXdLQ==", + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.13.tgz", + "integrity": "sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==", "dev": true }, "node_modules/@types/lodash-es": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.11.tgz", - "integrity": "sha512-eCw8FYAWHt2DDl77s+AMLLzPn310LKohruumpucZI4oOFJkIgnlaJcy23OKMJxx4r9PeTF13Gv6w+jqjWQaYUg==", + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", "dev": true, "dependencies": { "@types/lodash": "*" } }, "node_modules/@types/node": { - "version": "20.9.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.2.tgz", - "integrity": "sha512-WHZXKFCEyIUJzAwh3NyyTHYSR35SevJ6mZ1nWwJafKtiQbqRTIKSRcw3Ma3acqgsent3RRDqeVwpHntMk+9irg==", + "version": "22.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz", + "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.19.8" } }, "node_modules/@types/nspell": { @@ -1680,9 +1771,9 @@ } }, "node_modules/@types/semver": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.5.tgz", - "integrity": "sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==", + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, "node_modules/@types/stack-utils": { @@ -1718,16 +1809,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.11.0.tgz", - "integrity": "sha512-uXnpZDc4VRjY4iuypDBKzW1rz9T5YBBK0snMn8MaTSNd2kMlj50LnLBABELjJiOL5YHk7ZD8hbSpI9ubzqYI0w==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.11.0", - "@typescript-eslint/type-utils": "6.11.0", - "@typescript-eslint/utils": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -1753,15 +1844,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.11.0.tgz", - "integrity": "sha512-+whEdjk+d5do5nxfxx73oanLL9ghKO3EwM9kBCkUtWMRwWuPaFv9ScuqlYfQ6pAD6ZiJhky7TZ2ZYhrMsfMxVQ==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.11.0", - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/typescript-estree": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4" }, "engines": { @@ -1781,13 +1872,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.11.0.tgz", - "integrity": "sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1798,13 +1889,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.11.0.tgz", - "integrity": "sha512-nA4IOXwZtqBjIoYrJcYxLRO+F9ri+leVGoJcMW1uqr4r1Hq7vW5cyWrA43lFbpRvQ9XgNrnfLpIkO3i1emDBIA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.11.0", - "@typescript-eslint/utils": "6.11.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -1825,9 +1916,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.11.0.tgz", - "integrity": "sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1838,16 +1929,17 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.11.0.tgz", - "integrity": "sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", + "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, @@ -1864,18 +1956,42 @@ } } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@typescript-eslint/utils": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.11.0.tgz", - "integrity": "sha512-p23ibf68fxoZy605dc0dQAEoUsoiNoP3MD9WQGiHLDuTSOuqoTsa4oAy+h3KDkTcxbbfOtUjb9h3Ta0gT4ug2g==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.11.0", - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/typescript-estree": "6.11.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", "semver": "^7.5.4" }, "engines": { @@ -1890,12 +2006,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.11.0.tgz", - "integrity": "sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -2172,9 +2288,9 @@ } }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -2318,6 +2434,12 @@ "node": ">=8" } }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true + }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", @@ -2424,27 +2546,6 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", - "dev": true, - "dependencies": { - "big-integer": "^1.6.44" - }, - "engines": { - "node": ">= 5.10.0" - } - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2521,21 +2622,6 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/bundle-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", - "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", - "dev": true, - "dependencies": { - "run-applescript": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2750,9 +2836,9 @@ "dev": true }, "node_modules/crlf-normalize": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/crlf-normalize/-/crlf-normalize-1.0.19.tgz", - "integrity": "sha512-cpV1h7YwFtIA36NHtyWuMMMPGxUp6zrzxjRnFEDLh1ZH0SPNUqCWmM8RlKVycxvKHgZOxWXs3XxX/DAlBAjFzA==", + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/crlf-normalize/-/crlf-normalize-1.0.20.tgz", + "integrity": "sha512-h/rBerTd3YHQGfv7tNT25mfhWvRq2BBLCZZ80GFarFxf6HQGbpW6iqDL3N+HBLpjLfAdcBXfWAzVlLfHkRUQBQ==", "dependencies": { "ts-type": ">=2" } @@ -2817,162 +2903,6 @@ "node": ">=0.10.0" } }, - "node_modules/default-browser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", - "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", - "dev": true, - "dependencies": { - "bundle-name": "^3.0.0", - "default-browser-id": "^3.0.0", - "execa": "^7.1.1", - "titleize": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser-id": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", - "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", - "dev": true, - "dependencies": { - "bplist-parser": "^0.2.0", - "untildify": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/execa": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", - "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/default-browser/node_modules/human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", - "dev": true, - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/default-browser/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/detect-indent": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.1.tgz", @@ -2992,9 +2922,9 @@ } }, "node_modules/dictionary-ro": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/dictionary-ro/-/dictionary-ro-2.1.0.tgz", - "integrity": "sha512-8wZunLH9V5gOW99O/JhePsjn4YRMp3+KlOhDpWZyzN/JTKu7Aw+bI9faHL5qR6dxUmCquPGADDYogoeYrrbEvQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dictionary-ro/-/dictionary-ro-3.0.0.tgz", + "integrity": "sha512-kcR0BSFq16g1jCKpn15jpyio3ztMMS+O3PK4TE8ird8XjBgSAr2RRH0VoLG4uzMG1CFQNix/cHLne1wBu3CcTg==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -3058,14 +2988,35 @@ } }, "node_modules/dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" + "url": "https://dotenvx.com" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/electron-to-chromium": { @@ -3123,16 +3074,17 @@ } }, "node_modules/eslint": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz", - "integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.3", - "@eslint/js": "8.54.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -3419,6 +3371,36 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -3448,28 +3430,73 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -3598,9 +3625,9 @@ } }, "node_modules/globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -3688,9 +3715,9 @@ } }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "engines": { "node": ">= 4" @@ -3850,21 +3877,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -3904,24 +3916,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dev": true, - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -3973,33 +3967,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-wsl/node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -4081,6 +4048,39 @@ "node": ">=8" } }, + "node_modules/jackspeak": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.2.tgz", + "integrity": "sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", @@ -4720,9 +4720,9 @@ } }, "node_modules/jest-runner-eslint": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/jest-runner-eslint/-/jest-runner-eslint-2.1.2.tgz", - "integrity": "sha512-XONe3I5YMPPyQ55EoPKk+RT59fZ/4A+NvmTCmwFLhw5+OONxGL73yojVwXZO1x2mvhH0IigknfE+mKQ5ki1RnA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jest-runner-eslint/-/jest-runner-eslint-2.2.1.tgz", + "integrity": "sha512-BSAB65hGhtr/Kmb7tSkfqFmK9LYwCMK8L1xcp+XaSToPFqr7sY1jleMZUeDhV0ITA33pW+JUCx5a02veVD2Q2w==", "dev": true, "dependencies": { "chalk": "^4.0.0", @@ -5987,6 +5987,12 @@ "node": ">=4" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -6028,6 +6034,15 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -6104,15 +6119,12 @@ "dev": true }, "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz", + "integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==", "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=10" + "node": "20 || >=22" } }, "node_modules/make-dir": { @@ -6193,6 +6205,15 @@ "node": "*" } }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -6270,24 +6291,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/open": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", - "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", - "dev": true, - "dependencies": { - "default-browser": "^4.0.0", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -6358,6 +6361,12 @@ "node": ">=6" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -6421,6 +6430,22 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "dev": true, + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -6531,9 +6556,9 @@ } }, "node_modules/prettier": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz", - "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -6559,33 +6584,29 @@ } }, "node_modules/prettier-plugin-organize-imports": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-3.2.4.tgz", - "integrity": "sha512-6m8WBhIp0dfwu0SkgfOxJqh+HpdyfqSSLfKKRZSFbDuEQXDDndb8fTpRWkUrX/uBenkex3MgnVk0J3b3Y5byog==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.1.0.tgz", + "integrity": "sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A==", "dev": true, "peerDependencies": { - "@volar/vue-language-plugin-pug": "^1.0.4", - "@volar/vue-typescript": "^1.0.4", "prettier": ">=2.0", - "typescript": ">=2.9" + "typescript": ">=2.9", + "vue-tsc": "^2.1.0" }, "peerDependenciesMeta": { - "@volar/vue-language-plugin-pug": { - "optional": true - }, - "@volar/vue-typescript": { + "vue-tsc": { "optional": true } } }, "node_modules/prettier-plugin-packagejson": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.4.6.tgz", - "integrity": "sha512-5JGfzkJRL0DLNyhwmiAV9mV0hZLHDwddFCs2lc9CNxOChpoWUQVe8K4qTMktmevmDlMpok2uT10nvHUyU59sNw==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.5.3.tgz", + "integrity": "sha512-ATMEEXr+ywls1kgrZEWl4SBPEm0uDdyDAjyNzUC0/Z8WZTD3RqbJcQDR+Dau+wYkW9KHK6zqQIsFyfn+9aduWg==", "dev": true, "dependencies": { - "sort-package-json": "2.6.0", - "synckit": "0.8.5" + "sort-package-json": "2.10.1", + "synckit": "0.9.2" }, "peerDependencies": { "prettier": ">= 1.16.0" @@ -6773,33 +6794,69 @@ } }, "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", + "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", "dev": true, "dependencies": { - "glob": "^7.1.3" + "glob": "^11.0.0", + "package-json-from-dist": "^1.0.0" }, "bin": { - "rimraf": "bin.js" + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/run-applescript": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", - "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", + "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", "dev": true, "dependencies": { - "execa": "^5.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=12" + "node": "20 || >=22" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/run-parallel": { @@ -6826,13 +6883,10 @@ } }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -6862,15 +6916,15 @@ } }, "node_modules/short-uuid": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/short-uuid/-/short-uuid-4.2.2.tgz", - "integrity": "sha512-IE7hDSGV2U/VZoCsjctKX6l5t5ak2jE0+aeGJi3KtvjIUNuZVmHVYUjNBhmo369FIWGDtaieRaO8A83Lvwfpqw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/short-uuid/-/short-uuid-5.2.0.tgz", + "integrity": "sha512-296/Nzi4DmANh93iYBwT4NoYRJuHnKEzefrkSagQbTH/A6NTaB68hSPDjm5IlbI5dx9FXdmtqPcj6N5H+CPm6w==", "dependencies": { "any-base": "^1.1.0", - "uuid": "^8.3.2" + "uuid": "^9.0.1" }, "engines": { - "node": ">=8" + "node": ">=14" } }, "node_modules/signal-exit": { @@ -6916,9 +6970,9 @@ "dev": true }, "node_modules/sort-package-json": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-2.6.0.tgz", - "integrity": "sha512-XSQ+lY9bAYA8ZsoChcEoPlgcSMaheziEp1beox1JVxy1SV4F2jSq9+h2rJ+3mC/Dhu9Ius1DLnInD5AWcsDXZw==", + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-2.10.1.tgz", + "integrity": "sha512-d76wfhgUuGypKqY72Unm5LFnMpACbdxXsLPcL27pOsSrmVqH3PztFp1uq+Z22suk15h7vXmTesuh2aEjdCqb5w==", "dev": true, "dependencies": { "detect-indent": "^7.0.1", @@ -6927,6 +6981,7 @@ "git-hooks-list": "^3.0.0", "globby": "^13.1.2", "is-plain-obj": "^4.1.0", + "semver": "^7.6.0", "sort-object-keys": "^1.1.3" }, "bin": { @@ -7054,6 +7109,21 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -7066,6 +7136,19 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -7120,13 +7203,13 @@ } }, "node_modules/synckit": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", - "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", + "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", "dev": true, "dependencies": { - "@pkgr/utils": "^2.3.1", - "tslib": "^2.5.0" + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -7161,18 +7244,6 @@ "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", "dev": true }, - "node_modules/titleize": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", - "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -7217,40 +7288,42 @@ } }, "node_modules/ts-api-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.1.tgz", - "integrity": "sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz", + "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==", "dev": true, "engines": { - "node": ">=16.13.0" + "node": ">=16" }, "peerDependencies": { "typescript": ">=4.2.0" } }, "node_modules/ts-jest": { - "version": "29.1.1", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", - "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", + "version": "29.2.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.5.tgz", + "integrity": "sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==", "dev": true, "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", + "bs-logger": "^0.2.6", + "ejs": "^3.1.10", + "fast-json-stable-stringify": "^2.1.0", "jest-util": "^29.0.0", "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.6.3", + "yargs-parser": "^21.1.1" }, "bin": { "ts-jest": "cli.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0", "@jest/types": "^29.0.0", "babel-jest": "^29.0.0", "jest": "^29.0.0", @@ -7260,6 +7333,9 @@ "@babel/core": { "optional": true }, + "@jest/transform": { + "optional": true + }, "@jest/types": { "optional": true }, @@ -7272,9 +7348,9 @@ } }, "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -7334,9 +7410,9 @@ } }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, "node_modules/type-check": { "version": "0.4.0", @@ -7390,9 +7466,9 @@ } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" }, "node_modules/unified": { "version": "10.1.2", @@ -7434,15 +7510,6 @@ "node": ">= 10.0.0" } }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/update-browserslist-db": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", @@ -7483,9 +7550,13 @@ } }, "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "bin": { "uuid": "dist/bin/uuid" } @@ -7591,6 +7662,24 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -7619,12 +7708,6 @@ "node": ">=10" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", diff --git a/package.json b/package.json index 74db05318..61238d1b5 100644 --- a/package.json +++ b/package.json @@ -9,27 +9,27 @@ "@types/nspell": "^2.1.6", "@types/string-similarity": "^4.0.2", "chalk": "^4.1.2", - "crlf-normalize": "^1.0.19", - "dictionary-ro": "^2.1.0", - "dotenv": "^16.3.1", - "fs-extra": "^11.1.1", + "crlf-normalize": "^1.0.20", + "dictionary-ro": "^3.0.0", + "dotenv": "^16.4.5", + "fs-extra": "^11.2.0", "iconv": "^3.0.1", "is-ci": "^3.0.1", "lodash-es": "^4.17.21", "nspell": "^2.1.5", "p-map": "^4.0.0", "recursive-readdir": "^2.2.3", - "short-uuid": "^4.2.2", + "short-uuid": "^5.2.0", "string-similarity": "^4.0.4" }, "devDependencies": { - "@tsconfig/node-lts": "^18.12.5", + "@tsconfig/node-lts": "^22.0.0", "@types/fs-extra": "^11.0.4", "@types/iconv": "^3.0.4", - "@types/jest": "^29.5.8", - "@types/lodash": "^4.14.201", - "@types/lodash-es": "^4.17.11", - "@types/node": "^20.9.2", + "@types/jest": "^29.5.14", + "@types/lodash": "^4.17.13", + "@types/lodash-es": "^4.17.12", + "@types/node": "^22.9.0", "@types/recursive-readdir": "^2.2.4", "@typescript-eslint/eslint-plugin": "^6.11.0", "@typescript-eslint/parser": "^6.11.0", @@ -37,22 +37,23 @@ "eslint-plugin-require-extensions": "^0.1.3", "is-ci-cli": "^2.2.0", "jest": "^29.7.0", - "jest-runner-eslint": "^2.1.2", + "jest-runner-eslint": "^2.2.1", "jest-snapshot": "^29.7.0", "jest-watch-typeahead": "^2.2.2", "lodash": "^4.17.21", - "prettier": "^3.1.0", + "prettier": "^3.3.3", "prettier-plugin-latex": "^2.0.1", - "prettier-plugin-organize-imports": "^3.2.4", - "prettier-plugin-packagejson": "^2.4.6", - "ts-jest": "^29.1.1", - "ts-node": "^10.9.1", - "tslib": "^2.6.2", + "prettier-plugin-organize-imports": "^4.1.0", + "prettier-plugin-packagejson": "^2.5.3", + "rimraf": "^6.0.1", + "ts-jest": "^29.2.5", + "ts-node": "^10.9.2", + "tslib": "^2.8.1", "typescript": "5.1.6" }, "type": "module", "scripts": { - "format": "node --no-warnings=ExperimentalWarning --loader ts-node/esm ./node_modules/.bin/prettier --log-level error --write \"./verified/**/*.txt\" {src,bin,mocks,temp-runners}/**/*.ts README.md \"./LaTeX/**/*.tex\"", + "format": "node --no-warnings=ExperimentalWarning --loader ts-node/esm ./node_modules/.bin/prettier --log-level error --write \"./verified/**/*.txt\" {src,bin,mocks,import-songs-temp-runners}/**/*.ts README.md \"./LaTeX/**/*.tex\"", "test:ci": "NODE_ENV=test jest --runInBand --no-cache", "test:watch": "NODE_ENV=test TZ='Europe/Berlin' jest --watch --logHeapUsage --no-cache", "test": "is-ci-cli test:ci test:watch", @@ -69,10 +70,16 @@ "dictionary:update": "node --no-warnings=ExperimentalWarning --loader ts-node/esm ./bin/lyricsRomanianDictionaryAnalyzer.ts --saveToDictionary", "reprocess:content": "node --no-warnings=ExperimentalWarning --loader ts-node/esm ./bin/lyricsTextReprocessorRunner.ts", "reprocess:filename": "node --no-warnings=ExperimentalWarning --loader ts-node/esm ./bin/lyricsFileNameReprocessorRunner.ts", - "import:rc:by-authors": "node --no-warnings=ExperimentalWarning --loader ts-node/esm ./temp-runners/importSongsFromRcByAuthors.ts", - "import:rc:by-ids": "node --no-warnings=ExperimentalWarning --loader ts-node/esm ./temp-runners/importSongsFromRcByIds.ts", + "import:rc:by-authors": "node --no-warnings=ExperimentalWarning --loader ts-node/esm ./import-songs-temp-runners/importSongsFromRcByAuthors.ts", + "import:rc:by-ids": "node --no-warnings=ExperimentalWarning --loader ts-node/esm ./import-songs-temp-runners/importSongsFromRcByIds.ts", "import:rc:ci": "npm run import:rc:by-authors && npm run import:rc:by-ids && npm run reprocess:filename && npm run format", "build:ci": "npm run lint && npm run test && npm run verify:file-extensions && npm run verify:uniqueness-of-ids && npm run verify", - "meta:ci": "npm run verify:file-extensions && npm run verify:uniqueness-of-ids && npm run reprocess:filename && npm run reprocess:content && npm run verify && npm run format" + "meta:ci": "npm run verify:file-extensions && npm run verify:uniqueness-of-ids && npm run reprocess:filename && npm run reprocess:content && npm run verify && npm run format", + "songbook:clean:aux": "latexmk -xelatex -quiet -output-directory=./LaTeX/songbook/ ./LaTeX/songbook/bes-songbook.tex -c", + "songbook:clean:all": "latexmk -xelatex -quiet -output-directory=./LaTeX/songbook/ ./LaTeX/songbook/bes-songbook.tex -C", + "songbook:convert": "rimraf ./LaTeX/songbook/target-tex && node --no-warnings=ExperimentalWarning --loader ts-node/esm ./LaTeX/songbook/convertToSongbookTex.ts", + "songbook:compile": "npm run songbook:clean:all && latexmk -pdf -xelatex -quiet -interaction=nonstopmode -output-directory=./LaTeX/songbook/ ./LaTeX/songbook/bes-songbook.tex -gg -f", + "songbook:compile:watch": "npm run songbook:clean:all && latexmk -pdf -xelatex -quiet -interaction=nonstopmode -output-directory=./LaTeX/songbook/ ./LaTeX/songbook/bes-songbook.tex --preview -gg -f", + "songbook:dist": "npm run songbook:convert && npm run songbook:clean:all && npm run songbook:compile" } } diff --git a/src/constants.ts b/src/constants.ts index e391cbf0a..ddc20db36 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -1,6 +1,6 @@ export const EMPTY_STRING = ''; -export const EMPTY_SPACE = ' '; +export const SPACE_CHAR = ' '; export const NAME_SEPARATOR = ' - '; @@ -18,7 +18,10 @@ export const SLASH = '/'; export const DOT = '.'; +export const TEX_MUSICAL_NOTATIONS = '^'; + export const TXT_EXTENSION = '.txt'; +export const TEX_EXTENSION = '.tex'; export const DS_STORE_FILE = '.DS_Store'; export const GIT_KEEP_FILE = '.gitkeep'; @@ -32,8 +35,6 @@ export const ALLOWED_CHARS = export const NEW_LINE = '\n'; -export const NEW_LINE_TUPLE = `${NEW_LINE}`; - export const DOUBLE_LINE_TUPLE = `${NEW_LINE}${NEW_LINE}`; export const CHARS_SEPARATORS = /[ !(),./:;?”„\n]+/; diff --git a/src/core.ts b/src/core.ts index 5a20b4a6f..ea39d186a 100644 --- a/src/core.ts +++ b/src/core.ts @@ -1,6 +1,7 @@ import chalk from 'chalk'; import * as crypto from 'crypto'; import { + constant, filter, first, flattenDeep, @@ -8,6 +9,7 @@ import { isEqual, last, parseInt, + range, size, trim, uniq, @@ -20,10 +22,10 @@ import { COLON, COMMA, DOUBLE_LINE_TUPLE, - EMPTY_SPACE, EMPTY_STRING, - NEW_LINE_TUPLE, + NEW_LINE, SEMICOLON, + SPACE_CHAR, TEST_ENV, TXT_EXTENSION, } from './constants.js'; @@ -140,7 +142,7 @@ My custom title: {ANY_alternative}, arranger: {ANY_arranger}, band: {ANY_band}, ${desiredSequence.join(COMMA)} ${desiredSections - .map((sequence) => `[${sequence}]${NEW_LINE_TUPLE}Content for ${sequence}`) + .map((sequence) => `[${sequence}]${NEW_LINE}Content for ${sequence}`) .join(DOUBLE_LINE_TUPLE)}`; export const createAdvancedSongMock = ( @@ -157,7 +159,7 @@ ${ } ${tuples - .map(([sequence, content]) => `[${sequence}]${NEW_LINE_TUPLE}${content}`) + .map(([sequence, content]) => `[${sequence}]${NEW_LINE}${content}`) .join(DOUBLE_LINE_TUPLE)}`; export const convertSequenceToNumber = (sequenceOrderQualifier: string) => @@ -194,9 +196,12 @@ export const getMetaSectionsFromTitle = (titleContent: string) => { }; export const multiToSingle = (text: string) => - text?.split(SEMICOLON)?.map(trim).join(`${SEMICOLON}${EMPTY_SPACE}`); + text?.split(SEMICOLON)?.map(trim).join(`${SEMICOLON}${SPACE_CHAR}`); export const readTxtFilesRecursively = async (dir: string) => (await recursive(dir)).filter((filePath) => isEqual(TXT_EXTENSION, path.extname(filePath)), ); + +export const padForTex = (chars: number) => (content?: string) => + `${range(0, chars).map(constant(SPACE_CHAR)).join(EMPTY_STRING)}${content}`; diff --git a/src/index.ts b/src/index.ts index 18c9da5fc..6d14fafdf 100644 --- a/src/index.ts +++ b/src/index.ts @@ -7,4 +7,5 @@ export * from './core.js'; export * as lyricsFileNameReprocessor from './lyricsFileNameReprocessor.js'; export * from './songParser.js'; export * from './songPrinter.js'; +export * as songToLeadsheetConverter from './songToLeadsheetConverter.js'; export * from './types.js'; diff --git a/src/songParser.spec.ts b/src/songParser.spec.ts index bf577b9da..d41074d55 100644 --- a/src/songParser.spec.ts +++ b/src/songParser.spec.ts @@ -46,58 +46,72 @@ describe('Song parser', () => { "[b2]": { "content": "Row for b2", "sectionIdentifier": "[b2]", + "sectionSequenceType": "b", }, "[b3]": { "content": "Row for b3", "sectionIdentifier": "[b3]", + "sectionSequenceType": "b", }, "[b]": { "content": "Row for b", "sectionIdentifier": "[b]", + "sectionSequenceType": "b", }, "[c2]": { "content": "Row for c2", "sectionIdentifier": "[c2]", + "sectionSequenceType": "c", }, "[c3]": { "content": "Row for c3", "sectionIdentifier": "[c3]", + "sectionSequenceType": "c", }, "[c]": { "content": "Row for c", "sectionIdentifier": "[c]", + "sectionSequenceType": "c", }, "[p2]": { "content": "Row for p2", "sectionIdentifier": "[p2]", + "sectionSequenceType": "p", }, "[p3]": { "content": "Row for p3", "sectionIdentifier": "[p3]", + "sectionSequenceType": "p", }, "[p]": { "content": "Row for p", "sectionIdentifier": "[p]", + "sectionSequenceType": "p", }, "[sequence]": { "content": "v1,v2,v3,p,p2,p3,c,c2,c3,b,b2,b3", "sectionIdentifier": "[sequence]", + "sectionSequenceType": "s", }, "[title]": { "content": "My main title {alternative: { alternative 1; alternative 2 }, composer: {composer 1; composer 2}, writer: {writer 1; writer 2}, arranger: {arranger 1;arranger 2}, interpreter: {interpreter 1;interpreter 2}, band: {band 1;band 2}, key: {*}, tempo: {*}, tags: {tags 1; tags 2}, version: {ii}, genre: {genre 1; genre 2}, rcId: {*}, id: {7RURbpko41pWYEgVkHD4Pq}, contentHash: {655954}}", "sectionIdentifier": "[title]", + "sectionSequenceType": "", }, "[v1]": { "content": "Row for v1", "sectionIdentifier": "[v1]", + "sectionSequenceType": "v", }, "[v2]": { "content": "Row for v2", "sectionIdentifier": "[v2]", + "sectionSequenceType": "v", }, "[v3]": { "content": "Row for v3", "sectionIdentifier": "[v3]", + "sectionSequenceType": "v", }, }, "sequence": [ @@ -155,58 +169,72 @@ describe('Song parser', () => { "[b2]": { "content": "Row for b2", "sectionIdentifier": "[b2]", + "sectionSequenceType": "b", }, "[b3]": { "content": "Row for b3", "sectionIdentifier": "[b3]", + "sectionSequenceType": "b", }, "[b]": { "content": "Row for b", "sectionIdentifier": "[b]", + "sectionSequenceType": "b", }, "[c2]": { "content": "Row for c2", "sectionIdentifier": "[c2]", + "sectionSequenceType": "c", }, "[c3]": { "content": "Row for c3", "sectionIdentifier": "[c3]", + "sectionSequenceType": "c", }, "[c]": { "content": "Row for c", "sectionIdentifier": "[c]", + "sectionSequenceType": "c", }, "[p2]": { "content": "Row for p2", "sectionIdentifier": "[p2]", + "sectionSequenceType": "p", }, "[p3]": { "content": "Row for p3", "sectionIdentifier": "[p3]", + "sectionSequenceType": "p", }, "[p]": { "content": "Row for p", "sectionIdentifier": "[p]", + "sectionSequenceType": "p", }, "[sequence]": { "content": "v1,v2,v3,p,p2,p3,c,c2,c3,b,b2,b3", "sectionIdentifier": "[sequence]", + "sectionSequenceType": "s", }, "[title]": { "content": "My main title {alternative: { alternative 1; alternative 2 }, composer: {composer 1; composer 2}, writer: {writer 1; writer 2}, arranger: {arranger 1;arranger 2}, interpreter: {interpreter 1;interpreter 2}, band: {band 1;band 2}, key: {*}, tempo: {*}, tags: {tags 1; tags 2}, version: {ii}, genre: {genre 1; genre 2}, rcId: {*}, id: {*}, contentHash: {655954}}", "sectionIdentifier": "[title]", + "sectionSequenceType": "", }, "[v1]": { "content": "Row for v1", "sectionIdentifier": "[v1]", + "sectionSequenceType": "v", }, "[v2]": { "content": "Row for v2", "sectionIdentifier": "[v2]", + "sectionSequenceType": "v", }, "[v3]": { "content": "Row for v3", "sectionIdentifier": "[v3]", + "sectionSequenceType": "v", }, }, "sequence": [ @@ -261,6 +289,7 @@ Să se-aprindă-n adunare Jertfa laudei de-nchinare Ca pe muntele cel Sfânt!", "sectionIdentifier": "[c1.1]", + "sectionSequenceType": "c", }, "[c1.2]": { "content": "Să cunoască fiecare @@ -268,14 +297,17 @@ Că Tu ești în adunare Și-nsoțești a Ta lucrare Cu puteri prin Duhul Sfânt! :/", "sectionIdentifier": "[c1.2]", + "sectionSequenceType": "c", }, "[sequence]": { "content": "v1.1,v1.2,c1.1,c1.2,v2.1,v2.2,c1.1,c1.2", "sectionIdentifier": "[sequence]", + "sectionSequenceType": "s", }, "[title]": { "content": "My custom title {version: {ii}, alternative: {Când eram fără speranță}, composer: {Betania Dublin}, contentHash: {cd856b}, id: {7RURbpko41pWYEgVkHD4Pq}}", "sectionIdentifier": "[title]", + "sectionSequenceType": "", }, "[v1.1]": { "content": "Aici să fie casa Celui veșnic Sfânt, @@ -283,6 +315,7 @@ Aici s-aducem laudă și-nchinare, Acelui care este veșnic viu și Sfânt Și merită doar cinste și onoare!", "sectionIdentifier": "[v1.1]", + "sectionSequenceType": "v", }, "[v1.2]": { "content": "Aici să fie casa unde frații mei @@ -290,6 +323,7 @@ Cădea-vor în genunchi în fața Ta, Cu mâinile întinse către ceruri, ei Un legământ cu Tine vor avea!", "sectionIdentifier": "[v1.2]", + "sectionSequenceType": "v", }, "[v2.1]": { "content": "Aici să fie casa unde ochii Tăi, @@ -297,6 +331,7 @@ Zi și noapte, zilnic, vor privi, Aici să fie casa unde frații mei Cu rugăciuni, cu laude, vor veni!", "sectionIdentifier": "[v2.1]", + "sectionSequenceType": "v", }, "[v2.2]": { "content": "Atunci când va veni aici străinul, @@ -304,6 +339,96 @@ Din pricina Numelui Tău Sfânt, Să fie ascultat, să-i dai alinul, Că Tu ești Dumnezeu și Tu ești Sfânt!", "sectionIdentifier": "[v2.2]", + "sectionSequenceType": "v", + }, + }, + "sequence": [ + "v1.1", + "v1.2", + "c1.1", + "c1.2", + "v2.1", + "v2.2", + "c1.1", + "c1.2", + ], + "tags": "*", + "tempo": "*", + "title": "My custom title", + "version": "ii", + "writer": "*", +} +`); + }); + + it('should parse a song (w/ subsections) by un-split them correctly (when option is set)', () => { + expect( + parse(SONG_WITH_SUBSECTIONS_MOCK_FILE_CONTENT, { + rejoinSubsections: true + }) +).toMatchInlineSnapshot(` +{ + "alternative": "Când eram fără speranță", + "arranger": "*", + "band": "*", + "composer": "Betania Dublin", + "contentHash": "085aa8", + "genre": "*", + "id": "7RURbpko41pWYEgVkHD4Pq", + "interpreter": "*", + "key": "*", + "rcId": "*", + "sectionOrder": [ + "[v1]", + "[c1]", + "[v2]", + ], + "sectionsMap": { + "[c1]": { + "content": "/: Din cântare în cântare, +Să se-aprindă-n adunare +Jertfa laudei de-nchinare +Ca pe muntele cel Sfânt! +Să cunoască fiecare +Că Tu ești în adunare +Și-nsoțești a Ta lucrare +Cu puteri prin Duhul Sfânt! :/", + "sectionIdentifier": "[c1]", + "sectionSequenceType": "c", + }, + "[sequence]": { + "content": "v1.1,v1.2,c1.1,c1.2,v2.1,v2.2,c1.1,c1.2", + "sectionIdentifier": "[sequence]", + "sectionSequenceType": "s", + }, + "[title]": { + "content": "My custom title {version: {ii}, alternative: {Când eram fără speranță}, composer: {Betania Dublin}, contentHash: {cd856b}, id: {7RURbpko41pWYEgVkHD4Pq}}", + "sectionIdentifier": "[title]", + "sectionSequenceType": "", + }, + "[v1]": { + "content": "Aici să fie casa Celui veșnic Sfânt, +Aici s-aducem laudă și-nchinare, +Acelui care este veșnic viu și Sfânt +Și merită doar cinste și onoare! +Aici să fie casa unde frații mei +Cădea-vor în genunchi în fața Ta, +Cu mâinile întinse către ceruri, ei +Un legământ cu Tine vor avea!", + "sectionIdentifier": "[v1]", + "sectionSequenceType": "v", + }, + "[v2]": { + "content": "Aici să fie casa unde ochii Tăi, +Zi și noapte, zilnic, vor privi, +Aici să fie casa unde frații mei +Cu rugăciuni, cu laude, vor veni! +Atunci când va veni aici străinul, +Din pricina Numelui Tău Sfânt, +Să fie ascultat, să-i dai alinul, +Că Tu ești Dumnezeu și Tu ești Sfânt!", + "sectionIdentifier": "[v2]", + "sectionSequenceType": "v", }, }, "sequence": [ @@ -348,14 +473,17 @@ Că Tu ești Dumnezeu și Tu ești Sfânt!", "[sequence]": { "content": "v1,c", "sectionIdentifier": "[sequence]", + "sectionSequenceType": "s", }, "[title]": { "content": "My custom title {version: {ii}, alternative: {Când eram fără speranță}, composer: {Betania Dublin}, contentHash: {cd856b}, id: {7RURbpko41pWYEgVkHD4Pq}}", "sectionIdentifier": "[title]", + "sectionSequenceType": "", }, "[v1]": { "content": "Row 1", "sectionIdentifier": "[v1]", + "sectionSequenceType": "v", }, }, "sequence": [ @@ -403,58 +531,72 @@ Că Tu ești Dumnezeu și Tu ești Sfânt!", "[b2]": { "content": "Row for b2", "sectionIdentifier": "[b2]", + "sectionSequenceType": "b", }, "[b3]": { "content": "Row for b3", "sectionIdentifier": "[b3]", + "sectionSequenceType": "b", }, "[b]": { "content": "Row for b", "sectionIdentifier": "[b]", + "sectionSequenceType": "b", }, "[c2]": { "content": "Row for c2", "sectionIdentifier": "[c2]", + "sectionSequenceType": "c", }, "[c3]": { "content": "Row for c3", "sectionIdentifier": "[c3]", + "sectionSequenceType": "c", }, "[c]": { "content": "Row for c", "sectionIdentifier": "[c]", + "sectionSequenceType": "c", }, "[p2]": { "content": "Row for p2", "sectionIdentifier": "[p2]", + "sectionSequenceType": "p", }, "[p3]": { "content": "Row for p3", "sectionIdentifier": "[p3]", + "sectionSequenceType": "p", }, "[p]": { "content": "Row for p", "sectionIdentifier": "[p]", + "sectionSequenceType": "p", }, "[sequence]": { "content": "v1", "sectionIdentifier": "[sequence]", + "sectionSequenceType": "s", }, "[title]": { "content": "My custom title {version: {ii}, alternative: {Când eram fără speranță}, composer: {Betania Dublin}, contentHash: {cd856b}, id: {7RURbpko41pWYEgVkHD4Pq}}", "sectionIdentifier": "[title]", + "sectionSequenceType": "", }, "[v1]": { "content": "Row for v1", "sectionIdentifier": "[v1]", + "sectionSequenceType": "v", }, "[v2]": { "content": "Row for v2", "sectionIdentifier": "[v2]", + "sectionSequenceType": "v", }, "[v3]": { "content": "Row for v3", "sectionIdentifier": "[v3]", + "sectionSequenceType": "v", }, }, "sequence": [ @@ -533,14 +675,17 @@ Că Tu ești Dumnezeu și Tu ești Sfânt!", "[sequence]": { "content": "v1", "sectionIdentifier": "[sequence]", + "sectionSequenceType": "s", }, "[title]": { "content": "My custom title: {ANY_alternative}, arranger: {ANY_arranger}, band: {ANY_band}, composer: {ANY_composer}, contentHash: {ANY_contentHash}, genre: {ANY_genre}, id: {ANY_id}, interpreter: {ANY_interpreter}, key: {ANY_key}, rcId: {ANY_rcId}, tags: {ANY_tags}, tempo: {ANY_tempo}, version: {ANY_version}, writer: {ANY_writer}", "sectionIdentifier": "[title]", + "sectionSequenceType": "", }, "[v1]": { "content": "*_{}&!()][\\,-./1234567890:;?ABCDEFGHIJKLMNOPRSTUVWXZYQabcdefghijklmnopqrstuvwxyzÎâîăÂȘșĂȚț‘’”„", "sectionIdentifier": "[v1]", + "sectionSequenceType": "v", }, }, "sequence": [ diff --git a/src/songParser.ts b/src/songParser.ts index ede2c8785..b5ff4ad90 100644 --- a/src/songParser.ts +++ b/src/songParser.ts @@ -1,15 +1,17 @@ -import { isEqual } from 'lodash-es'; -import { COMMA, EMPTY_STRING, UNSET_META } from './constants.js'; +import { first, groupBy, isEqual, transform } from 'lodash-es'; +import { COMMA, DOT, EMPTY_STRING, NEW_LINE, UNSET_META } from './constants.js'; import { assertUniqueness, computeUniqueContentHash, + getCharWithMarkup, + getCharWithoutMarkup, getMetaSectionsFromTitle, getSongInSectionTuples, getTitleWithoutMeta, getUniqueId, multiToSingle, } from './core.js'; -import { SongAST, SongSection } from './types.js'; +import { Section, SequenceChar, SongAST, SongSection } from './types.js'; /** * Parses the content of a song to its basic AST structure. @@ -24,8 +26,10 @@ export const parse = ( songAsString: string, { ignoreUniquenessErrors, + rejoinSubsections, }: { ignoreUniquenessErrors?: boolean; + rejoinSubsections?: boolean; } = {}, ) => { const sectionTuples = getSongInSectionTuples(songAsString); @@ -51,8 +55,21 @@ export const parse = ( const sectionContent = sectionTuples[sectionIndex + 1]; const sectionIdentifier = sectionTuples[sectionIndex] as string; + const maybeSectionSequenceType = first( + getCharWithoutMarkup(sectionIdentifier) + .replaceAll('[^a-zA-Z0-9 -]', EMPTY_STRING) + .replace(DOT, EMPTY_STRING), + ) as SequenceChar; + + const sectionSequenceType = Object.values(SequenceChar).includes( + maybeSectionSequenceType, + ) + ? maybeSectionSequenceType + : (EMPTY_STRING as SequenceChar); + songAST.sectionsMap[sectionIdentifier] = { sectionIdentifier, + sectionSequenceType, content: sectionContent, }; @@ -115,5 +132,34 @@ export const parse = ( assertUniqueness(songAST.sectionOrder); } + if (rejoinSubsections) { + songAST.sectionsMap = transform( + groupBy(songAST.sectionsMap, (sequence) => { + if (!sequence.sectionIdentifier.includes(DOT)) { + return sequence.sectionIdentifier; + } + + return getCharWithMarkup( + first( + getCharWithoutMarkup(sequence.sectionIdentifier).split(DOT), + ) as string, + ); + }), + (acc, value, key) => { + acc[key] = { + sectionIdentifier: key, + sectionSequenceType: first(value)?.sectionSequenceType, + content: value.map(({ content }) => content).join(NEW_LINE), + } as Section; + }, + {} as Record, + ); + + songAST.sectionOrder = Object.keys(songAST.sectionsMap).filter( + (sectionIdentifier) => + ![SongSection.TITLE, SongSection.SEQUENCE].includes(sectionIdentifier), + ); + } + return songAST; }; diff --git a/src/songPrinter.spec.ts b/src/songPrinter.spec.ts index 620b3df51..0c39d6431 100644 --- a/src/songPrinter.spec.ts +++ b/src/songPrinter.spec.ts @@ -61,94 +61,102 @@ describe('songPrinter', () => { const parsedSong = parse(SONG_WITH_SUBSECTIONS_MOCK_FILE_CONTENT); expect(parsedSong).toMatchInlineSnapshot(` - { - "alternative": "Când eram fără speranță", - "arranger": "*", - "band": "*", - "composer": "Betania Dublin", - "contentHash": "085aa8", - "genre": "*", - "id": "7RURbpko41pWYEgVkHD4Pq", - "interpreter": "*", - "key": "*", - "rcId": "*", - "sectionOrder": [ - "[v1.1]", - "[v1.2]", - "[c1.1]", - "[c1.2]", - "[v2.1]", - "[v2.2]", - ], - "sectionsMap": { - "[c1.1]": { - "content": "/: Din cântare în cântare, - Să se-aprindă-n adunare - Jertfa laudei de-nchinare - Ca pe muntele cel Sfânt!", - "sectionIdentifier": "[c1.1]", - }, - "[c1.2]": { - "content": "Să cunoască fiecare - Că Tu ești în adunare - Și-nsoțești a Ta lucrare - Cu puteri prin Duhul Sfânt! :/", - "sectionIdentifier": "[c1.2]", - }, - "[sequence]": { - "content": "v1.1,v1.2,c1.1,c1.2,v2.1,v2.2,c1.1,c1.2", - "sectionIdentifier": "[sequence]", - }, - "[title]": { - "content": "My custom title {version: {ii}, alternative: {Când eram fără speranță}, composer: {Betania Dublin}, contentHash: {cd856b}, id: {7RURbpko41pWYEgVkHD4Pq}}", - "sectionIdentifier": "[title]", - }, - "[v1.1]": { - "content": "Aici să fie casa Celui veșnic Sfânt, - Aici s-aducem laudă și-nchinare, - Acelui care este veșnic viu și Sfânt - Și merită doar cinste și onoare!", - "sectionIdentifier": "[v1.1]", - }, - "[v1.2]": { - "content": "Aici să fie casa unde frații mei - Cădea-vor în genunchi în fața Ta, - Cu mâinile întinse către ceruri, ei - Un legământ cu Tine vor avea!", - "sectionIdentifier": "[v1.2]", - }, - "[v2.1]": { - "content": "Aici să fie casa unde ochii Tăi, - Zi și noapte, zilnic, vor privi, - Aici să fie casa unde frații mei - Cu rugăciuni, cu laude, vor veni!", - "sectionIdentifier": "[v2.1]", - }, - "[v2.2]": { - "content": "Atunci când va veni aici străinul, - Din pricina Numelui Tău Sfânt, - Să fie ascultat, să-i dai alinul, - Că Tu ești Dumnezeu și Tu ești Sfânt!", - "sectionIdentifier": "[v2.2]", - }, - }, - "sequence": [ - "v1.1", - "v1.2", - "c1.1", - "c1.2", - "v2.1", - "v2.2", - "c1.1", - "c1.2", - ], - "tags": "*", - "tempo": "*", - "title": "My custom title", - "version": "ii", - "writer": "*", - } - `); +{ + "alternative": "Când eram fără speranță", + "arranger": "*", + "band": "*", + "composer": "Betania Dublin", + "contentHash": "085aa8", + "genre": "*", + "id": "7RURbpko41pWYEgVkHD4Pq", + "interpreter": "*", + "key": "*", + "rcId": "*", + "sectionOrder": [ + "[v1.1]", + "[v1.2]", + "[c1.1]", + "[c1.2]", + "[v2.1]", + "[v2.2]", + ], + "sectionsMap": { + "[c1.1]": { + "content": "/: Din cântare în cântare, +Să se-aprindă-n adunare +Jertfa laudei de-nchinare +Ca pe muntele cel Sfânt!", + "sectionIdentifier": "[c1.1]", + "sectionSequenceType": "c", + }, + "[c1.2]": { + "content": "Să cunoască fiecare +Că Tu ești în adunare +Și-nsoțești a Ta lucrare +Cu puteri prin Duhul Sfânt! :/", + "sectionIdentifier": "[c1.2]", + "sectionSequenceType": "c", + }, + "[sequence]": { + "content": "v1.1,v1.2,c1.1,c1.2,v2.1,v2.2,c1.1,c1.2", + "sectionIdentifier": "[sequence]", + "sectionSequenceType": "s", + }, + "[title]": { + "content": "My custom title {version: {ii}, alternative: {Când eram fără speranță}, composer: {Betania Dublin}, contentHash: {cd856b}, id: {7RURbpko41pWYEgVkHD4Pq}}", + "sectionIdentifier": "[title]", + "sectionSequenceType": "", + }, + "[v1.1]": { + "content": "Aici să fie casa Celui veșnic Sfânt, +Aici s-aducem laudă și-nchinare, +Acelui care este veșnic viu și Sfânt +Și merită doar cinste și onoare!", + "sectionIdentifier": "[v1.1]", + "sectionSequenceType": "v", + }, + "[v1.2]": { + "content": "Aici să fie casa unde frații mei +Cădea-vor în genunchi în fața Ta, +Cu mâinile întinse către ceruri, ei +Un legământ cu Tine vor avea!", + "sectionIdentifier": "[v1.2]", + "sectionSequenceType": "v", + }, + "[v2.1]": { + "content": "Aici să fie casa unde ochii Tăi, +Zi și noapte, zilnic, vor privi, +Aici să fie casa unde frații mei +Cu rugăciuni, cu laude, vor veni!", + "sectionIdentifier": "[v2.1]", + "sectionSequenceType": "v", + }, + "[v2.2]": { + "content": "Atunci când va veni aici străinul, +Din pricina Numelui Tău Sfânt, +Să fie ascultat, să-i dai alinul, +Că Tu ești Dumnezeu și Tu ești Sfânt!", + "sectionIdentifier": "[v2.2]", + "sectionSequenceType": "v", + }, + }, + "sequence": [ + "v1.1", + "v1.2", + "c1.1", + "c1.2", + "v2.1", + "v2.2", + "c1.1", + "c1.2", + ], + "tags": "*", + "tempo": "*", + "title": "My custom title", + "version": "ii", + "writer": "*", +} +`); expect(print(parsedSong)).toMatchInlineSnapshot(` "[title] diff --git a/src/songPrinter.ts b/src/songPrinter.ts index b0751c609..f8ec00e45 100644 --- a/src/songPrinter.ts +++ b/src/songPrinter.ts @@ -15,9 +15,9 @@ import { COMMA, DOT, DOUBLE_LINE_TUPLE, - EMPTY_SPACE, - NEW_LINE_TUPLE, + NEW_LINE, NULL, + SPACE_CHAR, } from './constants.js'; import { assertUniqueness, @@ -52,7 +52,7 @@ const getContentAndSequenceSplitInSubSections = ( subSectionSequence.push(subSectionIdentifier); return [getCharWithMarkup(subSectionIdentifier), subSections[index]].join( - NEW_LINE_TUPLE, + NEW_LINE, ); }), ).join(DOUBLE_LINE_TUPLE); @@ -81,7 +81,7 @@ const getContentAndSequenceUnSplit = ( const updatedSongSectionContent = [ identifierWitMarkup, songSectionContent, - ].join(NEW_LINE_TUPLE); + ].join(NEW_LINE); const updatedSequence = existingSequence.map((sequenceIteratee) => { if (isEqual(sequenceIteratee, verseSongSectionIdentifierWithoutMarkup)) { @@ -175,9 +175,7 @@ export const print = ({ // --- // If no split is required if (!hasContentThatCouldBeSubSections) { - return [verseSongSectionIdentifier, songSectionContent].join( - NEW_LINE_TUPLE, - ); + return [verseSongSectionIdentifier, songSectionContent].join(NEW_LINE); } // --- @@ -207,7 +205,7 @@ export const print = ({ ) => songMetaContent ? [songMetaKey, withMetaMarkup(songMetaContent)].join( - `${COLON}${EMPTY_SPACE}`, + `${COLON}${SPACE_CHAR}`, ) : NULL; @@ -229,17 +227,15 @@ export const print = ({ printSongMetaContentIfTruthy(SongMeta.CONTENT_HASH, contentHash), ] .filter(Boolean) - .join(`${COMMA}${EMPTY_SPACE}`), + .join(`${COMMA}${SPACE_CHAR}`), ); // --- // Reassemble the song const flattenContent = flatten([ - [SongSection.TITLE, [title, metaSection].join(EMPTY_SPACE)].join( - NEW_LINE_TUPLE, - ), - [SongSection.SEQUENCE, newSequence.join(COMMA)].join(NEW_LINE_TUPLE), + [SongSection.TITLE, [title, metaSection].join(SPACE_CHAR)].join(NEW_LINE), + [SongSection.SEQUENCE, newSequence.join(COMMA)].join(NEW_LINE), songBodySections, ]).join(DOUBLE_LINE_TUPLE); - return `${trim(flattenContent)}${NEW_LINE_TUPLE}`; + return `${trim(flattenContent)}${NEW_LINE}`; }; diff --git a/src/songToLeadsheetConverter.spec.ts b/src/songToLeadsheetConverter.spec.ts new file mode 100644 index 000000000..b04535349 --- /dev/null +++ b/src/songToLeadsheetConverter.spec.ts @@ -0,0 +1,228 @@ +import { parse } from './songParser.js'; +import { + convertSongToLeadsheet, + getNormalizedContent, +} from './songToLeadsheetConverter.js'; + +describe('songToLeadsheetConverter', () => { + it('should correctly convert to a leadsheet song', () => { + const parsedSong = parse(`[title] +Cântă, suflet al meu, pentru Dumnezeu {alternative: {alternative 1 & alternative 2}, composer: {Matt Redman}, writer: {*}, arranger: {*}, interpreter: {Alin Timofte}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {164159}, id: {abCwAsZpAWGVzGNBWEfyhB}, contentHash: {1befcd}} + +[sequence] +c,v1,c,v2,c,v3,c + +[c] +^{D}Cântă, ^{G}suflet al ^{D}meu, +^{A}pentru Dumne^{Bm}zeu, ^{G}Cel bine^{D}cuvân^{A4-A}tat! +Al Lui ^{G}Nume e ^{Bm}sfânt, ^{G}cân^{A}ta-a^{Bm}cum, +Cum ^{G}nu ai ^{A}mai cân^{Dsus-D}tat. + +[v1] +E o ^{G}nouă ^{D}zi, soare^{A}le ră^{Bm}sare, +^{G}E timp să ^{D}cânt spre ^{A}slava ^{Bm}Ta. +Orice-^{G}ar ve^{D}ni, orice-n ^{A}față mi-ar a^{Bm}pare +^{G}Eu vreau să ^{D}cânt și seara ^{A6}la^{A}u^{D}de. + +[v2] +Încet Tu ești, Doamne, la mânie, +În dragoste ești bogat și ești bun. +Găsesc că am zece mii motive +Ca să Te laud și tuturor să spun: + +[v3] +Iar când sfârșitul îmi va fi aproape, +Puterile când îmi vor slăbi, +Al meu suflet va cânta continuu +Ori zece mii de ani și-n veșnicii. +`); + + expect(parsedSong).toMatchInlineSnapshot(` +{ + "alternative": "alternative 1 & alternative 2", + "arranger": "*", + "band": "*", + "composer": "Matt Redman", + "contentHash": "1befcd", + "genre": "*", + "id": "abCwAsZpAWGVzGNBWEfyhB", + "interpreter": "Alin Timofte", + "key": "*", + "rcId": "164159", + "sectionOrder": [ + "[c]", + "[v1]", + "[v2]", + "[v3]", + ], + "sectionsMap": { + "[c]": { + "content": "^{D}Cântă, ^{G}suflet al ^{D}meu, +^{A}pentru Dumne^{Bm}zeu, ^{G}Cel bine^{D}cuvân^{A4-A}tat! +Al Lui ^{G}Nume e ^{Bm}sfânt, ^{G}cân^{A}ta-a^{Bm}cum, +Cum ^{G}nu ai ^{A}mai cân^{Dsus-D}tat.", + "sectionIdentifier": "[c]", + "sectionSequenceType": "c", + }, + "[sequence]": { + "content": "c,v1,c,v2,c,v3,c", + "sectionIdentifier": "[sequence]", + "sectionSequenceType": "s", + }, + "[title]": { + "content": "Cântă, suflet al meu, pentru Dumnezeu {alternative: {alternative 1 & alternative 2}, composer: {Matt Redman}, writer: {*}, arranger: {*}, interpreter: {Alin Timofte}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {164159}, id: {abCwAsZpAWGVzGNBWEfyhB}, contentHash: {1befcd}}", + "sectionIdentifier": "[title]", + "sectionSequenceType": "", + }, + "[v1]": { + "content": "E o ^{G}nouă ^{D}zi, soare^{A}le ră^{Bm}sare, +^{G}E timp să ^{D}cânt spre ^{A}slava ^{Bm}Ta. +Orice-^{G}ar ve^{D}ni, orice-n ^{A}față mi-ar a^{Bm}pare +^{G}Eu vreau să ^{D}cânt și seara ^{A6}la^{A}u^{D}de.", + "sectionIdentifier": "[v1]", + "sectionSequenceType": "v", + }, + "[v2]": { + "content": "Încet Tu ești, Doamne, la mânie, +În dragoste ești bogat și ești bun. +Găsesc că am zece mii motive +Ca să Te laud și tuturor să spun:", + "sectionIdentifier": "[v2]", + "sectionSequenceType": "v", + }, + "[v3]": { + "content": "Iar când sfârșitul îmi va fi aproape, +Puterile când îmi vor slăbi, +Al meu suflet va cânta continuu +Ori zece mii de ani și-n veșnicii.", + "sectionIdentifier": "[v3]", + "sectionSequenceType": "v", + }, + }, + "sequence": [ + "c", + "v1", + "c", + "v2", + "c", + "v3", + "c", + ], + "tags": "*", + "tempo": "*", + "title": "Cântă, suflet al meu, pentru Dumnezeu", + "version": "*", + "writer": "*", +} +`); + + expect(convertSongToLeadsheet(parsedSong)).toMatchInlineSnapshot(` +"% ===================================================================== +% This file is auto-generated. +% +% Copyright (c) 2024 Ioan Lucuț (ioan.lucut88@gmail.com) +% +% Do not edit this file directly. Any changes made will be overwritten +% the next time the file is generated. +% ===================================================================== + +% This is the only preamble definition required +\\documentclass{leadsheet} +\\begin{document} + + % https://tex.stackexchange.com/questions/9852/what-is-the-difference-between-page-break-and-new-page + % Every song should start in a new page. + \\newpage + + \\begin{song}{ + title={Cântă, suflet al meu, pentru Dumnezeu}, + subtitle={c,v1,c,v2,c,v3,c}, + composer={Matt Redman}, + interpret={Alin Timofte} + } + + \\begin{chorus}[template = framed] + ^{D}Cântă, ^{G}suflet al ^{D}meu, \\\\ + ^{A}pentru Dumne^{Bm}zeu, ^{G}Cel bine^{D}cuvân^{A4-A}tat! \\\\ + Al Lui ^{G}Nume e ^{Bm}sfânt, ^*{G}cân ^*{A}ta-a ^{Bm}cum, \\\\ + Cum ^{G}nu ai ^{A}mai cân^{Dsus-D}tat. + \\end{chorus} + + \\begin{verse} + E o ^{G}nouă ^{D}zi, soare^{A}le ră^{Bm}sare, \\\\ + ^{G}E timp să ^{D}cânt spre ^{A}slava ^{Bm}Ta. \\\\ + Orice-^{G}ar ve^{D}ni, orice-n ^{A}față mi-ar a^{Bm}pare \\\\ + ^{G}Eu vreau să ^{D}cânt și seara ^*{A6}la ^*{A}u ^{D}de. + \\end{verse} + + \\begin{verse} + Încet Tu ești, Doamne, la mânie, \\\\ + În dragoste ești bogat și ești bun. \\\\ + Găsesc că am zece mii motive \\\\ + Ca să Te laud și tuturor să spun: + \\end{verse} + + \\begin{verse} + Iar când sfârșitul îmi va fi aproape, \\\\ + Puterile când îmi vor slăbi, \\\\ + Al meu suflet va cânta continuu \\\\ + Ori zece mii de ani și-n veșnicii. + \\end{verse} + + \\end{song} +\\end{document}" +`); + }); + + describe('getNormalizedContent', () => { + it('should ignore single words that do not have more than one chord section within', () => { + expect(getNormalizedContent('^{G4}this')).toEqual('^{G4}this'); + }); + + it('should ignore multiple words that do not have more than one chord section within', () => { + expect(getNormalizedContent(`^{G4}this ^{G}that`)).toEqual( + '^{G4}this ^{G}that', + ); + }); + + it('should normalise word that has more than one chord', () => { + expect(getNormalizedContent('^{G4}th^{G}is')).toEqual('^*{G4}th ^{G}is'); + }); + + it('should normalise word with more than three chord notations correctly', () => { + expect(getNormalizedContent('^{G}Te-o^{D}no^{A}rez')).toEqual( + '^*{G}Te-o ^*{D}no ^{A}rez', + ); + }); + + it('should normalise words that have more than one chord', () => { + expect(getNormalizedContent('^{G4}th^{G}is ^{G4}th^{G}is')).toEqual( + '^*{G4}th ^{G}is ^*{G4}th ^{G}is', + ); + }); + + it.skip('should normalise words that have more than one chord', () => { + expect(getNormalizedContent('^{A}A^{D-G}min!')).toEqual( + '^*{A} A^{D-G}min!', + ); + }); + + it('should normalise words with notations having bass (from / to -)', () => { + expect(getNormalizedContent('^{Ab/C}th')).toEqual('^{Ab-C}th'); + expect(getNormalizedContent('^{D/F#}lumi^{G}nat')).toEqual( + '^{D-F#}lumi^{G}nat', + ); + expect(getNormalizedContent('/: th :/')).toEqual('/: th :/'); + }); + + it('should normalise words with wrong chord notations (missing ^ before {)', () => { + expect(getNormalizedContent('{G4}th{G}is {G4}th{G}is')).toEqual( + '^*{G4}th ^{G}is ^*{G4}th ^{G}is', + ); + }); + + it('should normalise words with wrong chord notations (having space in {A C})', () => { + expect(() => getNormalizedContent('^{A C}th')).toThrow(); + }); + }); +}); diff --git a/src/songToLeadsheetConverter.ts b/src/songToLeadsheetConverter.ts new file mode 100644 index 000000000..a61a98592 --- /dev/null +++ b/src/songToLeadsheetConverter.ts @@ -0,0 +1,243 @@ +import chalk from 'chalk'; +import { isEmpty, isEqual, trim } from 'lodash-es'; +import { + COMMA, + DOUBLE_LINE_TUPLE, + EMPTY_STRING, + NEW_LINE, + SPACE_CHAR, + UNSET_META, +} from './constants.js'; +import { isTestEnv, padForTex } from './core.js'; +import { SequenceChar, SongAST } from './types.js'; + +const LEADSHEET_ENV_MAP = { + [SequenceChar.VERSE]: 'verse', + [SequenceChar.PRECHORUS]: 'prechorus', + [SequenceChar.CHORUS]: 'chorus', + [SequenceChar.BRIDGE]: 'bridge', + [SequenceChar.ENDING]: 'outro', + [SequenceChar.RECITAL]: 'solo', +}; +const LEADSHEET_ENV_OPTS_MAP = { + [SequenceChar.VERSE]: '', + [SequenceChar.PRECHORUS]: '[template = framed]', + [SequenceChar.CHORUS]: '[template = framed]', + [SequenceChar.BRIDGE]: '[template = framed]', + [SequenceChar.ENDING]: '[template = framed]', + [SequenceChar.RECITAL]: '[template = framed]', +}; + +const getSongContentWithRequiredTrailingEntities = (content: string) => + content.replaceAll(/\n/g, `${SPACE_CHAR}\\\\${NEW_LINE}`); + +const getSongContentWithRightPadding = (entireContent: string) => + entireContent.split(/\n/g).map(padForTex(4)).join(NEW_LINE); + +const wrapAsStart = (songEnvironment: string, options = '') => + `\\begin{${songEnvironment}}${options ? `${options}` : ''}`; + +const wrapAsEnd = (songEnvironment: string) => `\\end{${songEnvironment}}`; + +const warnIfIsNotProperlyPrependedAndReplace = (singleWord: string): string => { + const maybeRegExpMatchArrays = Array.from( + singleWord.matchAll(/(? { + const maybeRegExpMatchArrays = Array.from( + singleWord.matchAll(/\^\{\s*[^}]*\s+[^}]*\s*}/gim), + ); + + if (isEmpty(maybeRegExpMatchArrays)) { + return singleWord; + } + + throw new Error(`The ${chalk.red(singleWord)} is not correct.`); +}; + +const rewriteWordWithRightMusicalNotationSyntaxIfNeeded = ( + singleWord: string, +): string => { + const maybeRegExpMatchArrays = Array.from( + singleWord.matchAll( + /((\^)({[A-Z]+\d*})([^\\^ ]*))(?=[^ ]*\^{[A-Z]+\d*}\b)(.*)/gim, + ), + ); + + if (isEmpty(maybeRegExpMatchArrays)) { + return singleWord; + } + + const rewrittenWordWithSpaceBetween = trim( + maybeRegExpMatchArrays + .map((regExpMatch) => { + const chordSyntaxPrefix = regExpMatch[2]; + const chordInformation = regExpMatch[3]; + const contentForChord = regExpMatch[4]; + const maybeTrailingContent = regExpMatch[5]; + + return `${chordSyntaxPrefix}*${chordInformation}${contentForChord}${SPACE_CHAR}${maybeTrailingContent}`; + }) + .join(EMPTY_STRING), + ); + + if (rewrittenWordWithSpaceBetween.includes(SPACE_CHAR)) { + return rewrittenWordWithSpaceBetween + .split(/ /gi) + .map(rewriteWordWithRightMusicalNotationSyntaxIfNeeded) + .join(SPACE_CHAR); + } + + return rewrittenWordWithSpaceBetween; +}; + +const rewriteNotationsWithDashForChordsWithBass = ( + singleWord: string, +): string => { + const maybeRegExpMatchArrays = Array.from( + singleWord.matchAll(/\^\{.*\/.*}/gim), + ); + + if (isEmpty(maybeRegExpMatchArrays)) { + return singleWord; + } + + return singleWord.replaceAll(/\//gi, '-'); +}; + +// const rewriteLeftRightRepeat = (singleWord: string): string => { +// return singleWord +// .replaceAll(/\/:/gi, '\\leftrepeat') +// .replaceAll(/:\//gi, '\\rightrepeat'); +// }; + +export const getNormalizedContent = (sectionAsContent: string) => { + return sectionAsContent + .split(/\n/g) + .map((verseLineOfARow: string) => + warnIfIsNotProperlyFormatted(verseLineOfARow) + .split(/ /gi) + .map(warnIfIsNotProperlyPrependedAndReplace) + .map(warnIfIsNotProperlyFormatted) + .map(rewriteWordWithRightMusicalNotationSyntaxIfNeeded) + .map(rewriteNotationsWithDashForChordsWithBass) + // .map(rewriteLeftRightRepeat) + .join(SPACE_CHAR), + ) + .join(NEW_LINE); +}; + +const escapeRequiredChars = (songMetaContent: string) => + songMetaContent.replaceAll(/&/g, '\\&'); + +export const convertSongToLeadsheet = ({ + sectionOrder, + sectionsMap, + sequence, + alternative, + arranger, + band, + composer, + contentHash, + genre, + id, + interpreter, + key, + rcId, + tags, + tempo, + title, + version, + writer, +}: SongAST) => { + const maybeGetSongMetaContent = (key: string, songMetaContent?: string) => { + const shouldRenderContent = + songMetaContent && !isEqual(songMetaContent, UNSET_META); + + if (!shouldRenderContent) { + return; + } + + return `${key}={${escapeRequiredChars(songMetaContent)}}`; + }; + + const sectionMapper = (verseSongSectionIdentifier: string) => { + const { content, sectionSequenceType } = + sectionsMap[verseSongSectionIdentifier]; + + const songEnvironment = LEADSHEET_ENV_MAP[sectionSequenceType]; + + return [ + padForTex(2)( + wrapAsStart( + songEnvironment, + LEADSHEET_ENV_OPTS_MAP[sectionSequenceType], + ), + ), + getSongContentWithRightPadding( + getSongContentWithRequiredTrailingEntities( + getNormalizedContent(content), + ), + ), + padForTex(2)(wrapAsEnd(songEnvironment)), + ].join(NEW_LINE); + }; + + const songSectionsAsEnvironments = sectionOrder + .map(sectionMapper) + .join(DOUBLE_LINE_TUPLE); + + const metaData = [ + `title={${escapeRequiredChars(title)}}`, + `subtitle={${escapeRequiredChars(sequence.join(COMMA))}}`, + maybeGetSongMetaContent('composer', composer), + maybeGetSongMetaContent('arr', arranger), + maybeGetSongMetaContent('band', band), + maybeGetSongMetaContent('tags', tags), + maybeGetSongMetaContent('genre', genre), + maybeGetSongMetaContent('tempo', tempo), + maybeGetSongMetaContent('interpret', interpreter), + maybeGetSongMetaContent('lyrics', writer), + maybeGetSongMetaContent('key', key), + ] + .filter(Boolean) + .map(padForTex(5)) + .join(`${COMMA}${NEW_LINE}`); + + return `% ===================================================================== +% This file is auto-generated. +% +% Copyright (c) 2024 Ioan Lucuț (ioan.lucut88@gmail.com) +% +% Do not edit this file directly. Any changes made will be overwritten +% the next time the file is generated. +% ===================================================================== + +% This is the only preamble definition required +\\documentclass{leadsheet} +\\begin{document} + + % https://tex.stackexchange.com/questions/9852/what-is-the-difference-between-page-break-and-new-page + % Every song should start in a new page. + \\newpage + + \\begin{song}{ +${metaData} + } + +${songSectionsAsEnvironments} + + \\end{song} +\\end{document}`; +}; diff --git a/src/types.ts b/src/types.ts index 5ea46122e..4dcb610f1 100644 --- a/src/types.ts +++ b/src/types.ts @@ -146,6 +146,9 @@ export type Section = { // E.g. strophe/chorus content content: string; + + // E.g. v, p, c, b, e, s + sectionSequenceType: SequenceChar; }; /** diff --git a/temp-runners/rc_authors_to_process.txt b/temp-runners/rc_authors_to_process.txt deleted file mode 100644 index e1a23f76d..000000000 --- a/temp-runners/rc_authors_to_process.txt +++ /dev/null @@ -1,25 +0,0 @@ -10:BBSO:Bbso -11:Eldad:Eldad -11:Florin Mesaroș:Florin_mesaros -11:Messis:Messis -12:Grup Eldad:Grup_eldad -14:Emma Repede:Emma_repede -18:Ekklesia:Ekklesia -18:Grupul Eldad:Grupul_eldad -2:Bbso Baia Mare:Bbso_baia_mare -3:Adi Lup:Adi_lup -3:Ahava:Ahava -3:Alin, Emima Timofte:Alin_emima_timofte -3:Kari Jobe:Kari_jobe -4:Elim Harmony Band:Elim_harmony_band -4:Harvest Arad:Harvest_arad -4:Iovan Miclea:Iovan_miclea -5:Adi Kovaci:Adi_kovaci -5:Agape:Agape -5:Eliza Pirosca:Eliza_pirosca -5:Marius Pop, Naomi Borota:Marius_pop_naomi_borota -5:Marius Pop:Marius_pop -5:Samuel Bratu:Samuel_bratu -6:Ekklesia Arad:Ekklesia_arad -6:Shalom:Shalom -7:Laud:Laud diff --git a/temp-runners/rc_ids_to_process.txt b/temp-runners/rc_ids_to_process.txt deleted file mode 100644 index 303ad4c20..000000000 --- a/temp-runners/rc_ids_to_process.txt +++ /dev/null @@ -1,22 +0,0 @@ -137838:Any -137840:Any -149044:Any -189709:Any -193757:Any -195799:Any -203635:Any -210581:Any -212152:Any -3820:Any -4207:Any -4211:Any -57626:Any -58039:Any -60417:Any -6285:Any -6303:Any -6571:Any -6692:Any -7120:Any -7281:Any -195608:Any