@music-lyric-kit/plugin-transform-pure 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 - now, Folltoshe
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,7 @@
1
+ # @music-lyric-kit/plugin-transform-pure
2
+
3
+ ## Install
4
+
5
+ ```shell
6
+ npm install @music-lyric-kit/plugin-transform-pure
7
+ ```
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("@music-lyric-kit/utils"),h=require("@music-lyric-kit/core"),d=require("@music-lyric-kit/lyric"),p={mode:"fuzzy",fuzzy:{},exact:{check:50},rule:{useDefault:!0,custom:[]}},R=["版权所有","版权","授权","Copyright","License","All rights reserved","翻唱","改编","致敬","Cover","Adaptation","Tribute","Remake"];class f{options;stringRules=[];regexRules=[];defaultRules=[];combinedRegex=null;constructor(e,t){this.options=e,this.defaultRules=t,this.init()}init(){const e=this.options.rule.useDefault?[...this.defaultRules,...this.options.rule.custom||[]]:[...this.options.rule.custom||[]];for(const t of e)typeof t=="string"?this.stringRules.push(t):t instanceof RegExp&&this.regexRules.push(t);if(this.options.mode==="fuzzy"&&this.stringRules.length>0){const t=this.stringRules.sort((n,r)=>r.length-n.length).map(n=>n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"));this.combinedRegex=new RegExp(`(${t.join("|")})`)}}update(e){this.options=e,this.init()}match(e){if(!e)return!1;const t=e.trim();return t.length?this.options.mode==="fuzzy"?this.withFuzzy(t):this.withExact(t):!1}withFuzzy(e){if(this.combinedRegex&&this.combinedRegex.test(e))return!0;for(let t=0;t<this.regexRules.length;t++)if(this.regexRules[t].test(e))return!0;return!1}withExact(e){const t=Math.max(this.options.exact.check,0),n=Math.ceil(t/100*e.length);if(n===0)return!0;const r=new Uint8Array(e.length);let i=0;for(let c=0;c<this.stringRules.length;c++){const s=this.stringRules[c],l=s.length;if(l===0)continue;let u=e.indexOf(s);for(;u!==-1;){for(let o=0;o<l;o++)r[u+o]===0&&(r[u+o]=1,i++);if(i>=n)return!0;u=e.indexOf(s,u+l)}}for(let c=0;c<this.regexRules.length;c++){const s=e.match(this.regexRules[c]);if(s&&s[0]&&s.index!==void 0){const u=s[0].length,o=s.index;for(let g=0;g<u;g++)r[o+g]===0&&(r[o+g]=1,i++);if(i>=n)return!0}}return!1}}class C extends h.ParserPlugin{matcher;config=new m.ConfigManager(p);get id(){return"TRANSFORM-CLEAN"}get name(){return"TRANSFORM-CLEAN"}get stage(){return h.ParserStage.Transform}constructor(){super(),this.matcher=new f(this.config.current,R),this.config.on(e=>{this.matcher.update(e)})}check(e){return!0}exec(e){const t=e.result.lines;if(!t.length)return;const n=[];for(const r of t)r.type==d.LineType.Normal&&this.matcher.match(r.content.original)||n.push(r);e.result.lines=n}}const x={match:{mode:"exact",fuzzy:{},exact:{check:50},rule:{useDefault:!0,custom:[]}},split:"/",replace:!0},E=["演唱","主唱","原唱","翻唱","唱","Vocal","Vocals","Lead Vocal","Singer","Original Singer","Cover","客串","特邀","Featuring","Feat","Ft","和声","和音","伴唱","合声","合音","Backing Vocals","Background Vocals","Chorus","Harmony","BGs","Bvox","BV","童声","男声","女声","人声","腔","Voice","Children Voice","Male Voice","Female Voice","配音","念白","旁白","CV","Voice Actor","Recitation","Rap","Rapper","说唱","演奏者","乐手","乐师","Session Musician","Musician","Performer","Player","现场乐队","乐队","Live Band","Band","作词","填词","词","Lyricist","Lyrics","Words","Lyr","作曲","谱曲","曲","Composer","Compose","Music","Comp","编曲","编","Arranger","Arrangement","Arrange","Arr","制作人","制作","单曲制作","Producer","Produce","Prod","执行制作人","执制","Executive Producer","Exec Producer","ExProd","协力制作人","共同制作","协力","Co-Producer","CoProd","Associate Producer","节拍制作","节拍","Beatmaker","Beat Maker","Beat","编调","编程","Programming","Programmer","Prog","配器","管弦乐编排","Orchestrator","Orchestration","Orch","和声编写","和音编写","Backing Vocals Arranger","Vocal Arranger","BV Arranger","工程师","工程","Engineer","Eng","录音师","录音","Recording Engineer","Recordist","Recording","Rec","混音师","混音","分轨","贴混","混","Mixing Engineer","Mixer","Mixing","Mixed","Mix","母带工程师","母带后期","母带","后期","Mastering Engineer","Mastering","Master","Mst","修音师","修音","调校","调教","Vocal Editing","Vocal Tuning","Pitch Editing","Tuning","人声编辑","音频编辑","剪辑","Audio Editor","Vocal Editor","Vocal Edit","Edit","Editor","重混音师","Remixer","Remix","Remixed by","声音设计师","音效设计","音效","Sound Designer","Sound Effects","SFX Designer","SFX","拟音师","拟音","Foley Artist","Foley","监制","音乐总监","监","Supervisor","Music Director","MD","指挥","Conductor","Cond","A&R","艺人与产品","艺人统筹","Artists and Repertoire","录音室经理","录音室","录音棚","Studio Manager","Studio","助理工程师","助工","助理","Assistant Engineer","Assistant","Asst Eng","抄谱员","抄谱","Copyist","扒谱员","扒谱","Transcriber","Trans","乐谱管理员","Librarian","乐器技师","吉他技师","鼓技师","Guitar Tech","Drum Tech","Instrument Tech","音控师","调音师","前台工程师","FOH Engineer","Front of House","Live Sound Engineer","Sound Mixer","监听工程师","监听","Monitor Engineer","舞台监督","Stage Manager","灯光师","Lighting Designer","Light Tech","企划","策划","项目统筹","统筹","项目","Planner","Project Coordinator","Coordinator","出品","发行","发布","Publisher","Produced","Release","宣传","推广","宣发","宣推","营销","Marketing","Publicity","Promotion","版权","Copyright","OP","SP","视觉设计","视觉","设计","Visual Design","Visual","Design","封面","海报","插画","曲绘","图绘","映像","封","Cover","Illustration","Image","Artwork","美工","美术","Graphic Design","Fine Arts","Art","视频","分镜","脚本","导演","Video","PV","MV","CG","Director","艺术顾问","艺术","顾问","Art Consultant","Consultant","题字","文案","Inscription","Copywriting","支持","鸣谢","特约嘉宾","指导","承办单位","承办","单位","业务","Special Thanks","Acknowledgments"],S=["键盘","Keyboard","Kybd","Keys","Key","钢琴","Piano","Pno","电钢琴","Electric Piano","Wurlitzer","Rhodes","EP","风琴","Organ","Org","大键琴","Harpsichord","Hpschd","合成器","Synthesizer","Synths","Synth","采样器","Sampler","序列器","Sequencer","电吉他","木吉他","箱琴","吉他","Electric Guitar","Acoustic Guitar","Guitar","E.Gtr","A.Gtr","Gtr","电贝斯","低音吉他","贝斯","Electric Bass","Bass Guitar","Bass","Bss","乌德琴","Oud","班卓琴","Banjo","西塔琴","Sitar","鲁特琴","Lute","曼陀林","Mandolin","弦乐","Strings","Str","小提琴","提琴","Violin","Vln","中提琴","Viola","Vla","大提琴","Cello","Vc","低音提琴","Double Bass","Contrabass","Cb","竖琴","Harp","Hrp","管乐","铜管","木管","Brass","Woodwinds","Winds","笛子","长笛","Flute","Fl","短笛","Piccolo","Picc","哨笛","Flageolet","Flt","单簧管","竖笛","Clarinet","Cl","低音单簧管","Bass Clarinet","B.Cl","双簧管","Oboe","Ob","英国管","English Horn","E.Hn","巴松","大管","Bassoon","Bsn","萨克斯","Saxophone","Alto Sax","Tenor Sax","Baritone Sax","A.Sax","T.Sax","B.Sax","Sax","小号","Trumpet","Tpt","短号","Cornet","Cnt","长号","Trombone","Tbn","大号","Tuba","Tba","圆号","French Horn","Horn","Hn","次中音号","Euphonium","Euph","富鲁格号","Flugelhorn","打击乐","Percussion","Perc","架子鼓","鼓","Drum Set","Drums","Drum","Dr","定音鼓","Timpani","Timp","铃鼓","Tambourine","Tamb","康加鼓","Conga","邦戈鼓","Bongo","钹","镲","Cymbal","锣","Gong","沙锤","Shaker","木琴","Xylophone","Xylo","马林巴","Marimba","颤音琴","Vibraphone","Vibes","Vib","古琴","瑶琴","玉琴","Guqin","古筝","Guzheng","琵琶","Pipa","二胡","Erhu","扬琴","Yangqin","阮","中阮","Ruan","箫","笛萧","洞萧","Xiao","笙","Sheng","唢呐","Suona","巴乌","Bawu","葫芦丝","Hulusi","手风琴","Accordion","口琴","Harmonica","特雷门琴","Theremin"],A=[...E,...S,"PGM"],P=a=>{if(!a)return null;const e=a.indexOf(":"),t=a.indexOf(":");if(e===-1&&t===-1)return null;let n=-1;e!==-1&&t!==-1?n=Math.min(e,t):n=e!==-1?e:t;const r=a.substring(0,n).trim(),i=a.substring(n+1).trim();return r?[r,i]:null},T=(a,e)=>a.split(e).map(t=>t.trim()).filter(t=>!!t);class y extends h.ParserPlugin{matcher;config=new m.ConfigManager(x);get id(){return"TRANSFORM-EXTRACT"}get name(){return"TRANSFORM-EXTRACT"}get stage(){return h.ParserStage.Transform}constructor(){super(),this.matcher=new f(this.config.current.match,A),this.config.on(e=>{this.matcher.update(e.match)})}check(e){return!0}exec(e){const t=e.result.lines;if(!t.length)return;const n=[...e.result.metas],r=[];for(const i of t){if(i.type!=d.LineType.Normal){r.push(i);continue}const c=P(i.content.original);if(!c){r.push(i);continue}const[s,l]=c;if(!this.matcher.match(m.removeTextSpaceAll(s))){r.push(i);continue}const o=new d.MetaCreator;o.content.role=s,o.content.name=T(l,this.config.current.split),this.config.current.replace||r.push(i),n.push(o)}e.result.lines=r,e.result.metas=n}}exports.CleanPlugin=C;exports.ExtractCreatorPlugin=y;
2
+ //# sourceMappingURL=index.comm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.comm.js","sources":["../src/clean/config.ts","../src/clean/constants.ts","../src/utils/match.ts","../src/clean/index.ts","../src/extract/config.ts","../src/extract/constants.ts","../src/extract/utils.ts","../src/extract/index.ts"],"sourcesContent":["import type { MatchOptions } from '@root/utils/match'\n\nexport interface CleanConfig extends MatchOptions {}\n\nexport const DEFAULT_CONFIG: CleanConfig = {\n mode: 'fuzzy',\n fuzzy: {},\n exact: {\n check: 50,\n },\n rule: {\n useDefault: true,\n custom: [],\n },\n}\n","import type { MatchRule } from '@root/utils/match'\n\nexport const DEFAULT_RULES: MatchRule[] = [\n '版权所有',\n '版权',\n '授权',\n 'Copyright',\n 'License',\n 'All rights reserved',\n\n '翻唱',\n '改编',\n '致敬',\n 'Cover',\n 'Adaptation',\n 'Tribute',\n 'Remake',\n]\n","export type MatchRule = string | RegExp\n\nexport interface MatchOptions {\n /**\n * match mode\n * @default fuzzy\n */\n mode: 'fuzzy' | 'exact'\n /** fuzzy mode options */\n fuzzy: {}\n /** exact mode options */\n exact: {\n /**\n * need more than this percentage\n * @default 50\n */\n check: number\n }\n /** match rules */\n rule: {\n /**\n * is use default rule\n * @default true\n */\n useDefault: boolean\n /**\n * custom rule, it will be merge with default when useDefault is enable\n * @default []\n */\n custom: MatchRule[]\n }\n}\n\nexport class Matcher {\n private options: MatchOptions\n\n private stringRules: string[] = []\n private regexRules: RegExp[] = []\n\n private defaultRules: MatchRule[] = []\n private combinedRegex: RegExp | null = null\n\n constructor(options: MatchOptions, defaultRules: MatchRule[]) {\n this.options = options\n this.defaultRules = defaultRules\n this.init()\n }\n\n private init() {\n const raw = this.options.rule.useDefault ? [...this.defaultRules, ...(this.options.rule.custom || [])] : [...(this.options.rule.custom || [])]\n\n for (const rule of raw) {\n if (typeof rule === 'string') {\n this.stringRules.push(rule)\n } else if (rule instanceof RegExp) {\n this.regexRules.push(rule)\n }\n }\n\n if (this.options.mode === 'fuzzy' && this.stringRules.length > 0) {\n const target = this.stringRules.sort((a, b) => b.length - a.length).map((str) => str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))\n this.combinedRegex = new RegExp(`(${target.join('|')})`)\n }\n }\n\n update(options: MatchOptions) {\n this.options = options\n this.init()\n }\n\n match(line: string): boolean {\n if (!line) {\n return false\n }\n\n const targetLine = line.trim()\n if (!targetLine.length) {\n return false\n }\n\n return this.options.mode === 'fuzzy' ? this.withFuzzy(targetLine) : this.withExact(targetLine)\n }\n\n private withFuzzy(line: string): boolean {\n if (this.combinedRegex && this.combinedRegex.test(line)) {\n return true\n }\n\n for (let i = 0; i < this.regexRules.length; i++) {\n if (this.regexRules[i].test(line)) return true\n }\n\n return false\n }\n\n private withExact(line: string): boolean {\n const thresholdPercent = Math.max(this.options.exact.check, 0)\n\n const targetMatchCount = Math.ceil((thresholdPercent / 100) * line.length)\n if (targetMatchCount === 0) {\n return true\n }\n\n const matchedChars = new Uint8Array(line.length)\n let matchedCount = 0\n\n for (let i = 0; i < this.stringRules.length; i++) {\n const rule = this.stringRules[i]\n const ruleLen = rule.length\n if (ruleLen === 0) continue\n\n let postion = line.indexOf(rule)\n while (postion !== -1) {\n for (let j = 0; j < ruleLen; j++) {\n if (matchedChars[postion + j] === 0) {\n matchedChars[postion + j] = 1\n matchedCount++\n }\n }\n\n if (matchedCount >= targetMatchCount) {\n return true\n }\n\n postion = line.indexOf(rule, postion + ruleLen)\n }\n }\n\n for (let i = 0; i < this.regexRules.length; i++) {\n const matchResult = line.match(this.regexRules[i])\n if (matchResult && matchResult[0] && matchResult.index !== undefined) {\n const matchStr = matchResult[0]\n const matchLen = matchStr.length\n const pos = matchResult.index\n\n for (let j = 0; j < matchLen; j++) {\n if (matchedChars[pos + j] === 0) {\n matchedChars[pos + j] = 1\n matchedCount++\n }\n }\n\n if (matchedCount >= targetMatchCount) {\n return true\n }\n }\n }\n\n return false\n }\n}\n","import type { DeepPartial } from '@music-lyric-kit/utils'\nimport type { Line } from '@music-lyric-kit/lyric'\nimport type { CleanConfig } from './config'\n\nimport { DEFAULT_CONFIG } from './config'\nimport { DEFAULT_RULES } from './constants'\n\nimport { ConfigManager } from '@music-lyric-kit/utils'\nimport { Matcher } from '@root/utils/match'\n\nimport { ParserPlugin, ParserStage, ParserContext } from '@music-lyric-kit/core'\nimport { LineType } from '@music-lyric-kit/lyric'\n\nexport class CleanPlugin extends ParserPlugin {\n private matcher: Matcher\n\n override config = new ConfigManager<CleanConfig, DeepPartial<CleanConfig>>(DEFAULT_CONFIG)\n\n override get id() {\n return 'TRANSFORM-CLEAN'\n }\n\n override get name() {\n return 'TRANSFORM-CLEAN'\n }\n\n override get stage() {\n return ParserStage.Transform\n }\n\n constructor() {\n super()\n this.matcher = new Matcher(this.config.current, DEFAULT_RULES)\n this.config.on((opt) => {\n this.matcher.update(opt)\n })\n }\n\n override check(ctx: ParserContext) {\n return true\n }\n\n override exec(ctx: ParserContext) {\n const lines = ctx.result.lines\n if (!lines.length) {\n return\n }\n\n const newLines: Line[] = []\n\n for (const line of lines) {\n if (line.type == LineType.Normal) {\n const result = this.matcher.match(line.content.original)\n if (result) {\n continue\n }\n }\n newLines.push(line)\n }\n\n ctx.result.lines = newLines\n }\n}\n\nexport type { CleanConfig }\n","import type { MatchOptions } from '@root/utils/match'\n\nexport interface ExtractCreatorConfig {\n match: MatchOptions\n /**\n * split name\n */\n split: string | RegExp\n /**\n * is replace this line when matched\n * @default true\n */\n replace: boolean\n}\n\nexport const DEFAULT_CREATOR_CONFIG: ExtractCreatorConfig = {\n match: {\n mode: 'exact',\n fuzzy: {},\n exact: {\n check: 50,\n },\n rule: {\n useDefault: true,\n custom: [],\n },\n },\n split: '/',\n replace: true,\n}\n","import type { MatchRule } from '@root/utils/match'\n\nconst CREATOR_RULES_ROLE: MatchRule[] = [\n '演唱',\n '主唱',\n '原唱',\n '翻唱',\n '唱',\n\n 'Vocal',\n 'Vocals',\n 'Lead Vocal',\n 'Singer',\n 'Original Singer',\n 'Cover',\n\n '客串',\n '特邀',\n 'Featuring',\n 'Feat',\n 'Ft',\n\n '和声',\n '和音',\n '伴唱',\n '合声',\n '合音',\n 'Backing Vocals',\n 'Background Vocals',\n 'Chorus',\n 'Harmony',\n 'BGs',\n 'Bvox',\n 'BV',\n\n '童声',\n '男声',\n '女声',\n '人声',\n '腔',\n 'Voice',\n 'Children Voice',\n 'Male Voice',\n 'Female Voice',\n\n '配音',\n '念白',\n '旁白',\n 'CV',\n 'Voice Actor',\n 'Recitation',\n 'Rap',\n 'Rapper',\n\n '说唱',\n '演奏者',\n '乐手',\n '乐师',\n 'Session Musician',\n 'Musician',\n 'Performer',\n 'Player',\n\n '现场乐队',\n '乐队',\n 'Live Band',\n 'Band',\n\n '作词',\n '填词',\n '词',\n 'Lyricist',\n 'Lyrics',\n 'Words',\n 'Lyr',\n\n '作曲',\n '谱曲',\n '曲',\n 'Composer',\n 'Compose',\n 'Music',\n 'Comp',\n\n '编曲',\n '编',\n 'Arranger',\n 'Arrangement',\n 'Arrange',\n 'Arr',\n\n '制作人',\n '制作',\n '单曲制作',\n 'Producer',\n 'Produce',\n 'Prod',\n\n '执行制作人',\n '执制',\n 'Executive Producer',\n 'Exec Producer',\n 'ExProd',\n\n '协力制作人',\n '共同制作',\n '协力',\n 'Co-Producer',\n 'CoProd',\n 'Associate Producer',\n\n '节拍制作',\n '节拍',\n 'Beatmaker',\n 'Beat Maker',\n 'Beat',\n\n '编调',\n '编程',\n 'Programming',\n 'Programmer',\n 'Prog',\n\n '配器',\n '管弦乐编排',\n 'Orchestrator',\n 'Orchestration',\n 'Orch',\n\n '和声编写',\n '和音编写',\n 'Backing Vocals Arranger',\n 'Vocal Arranger',\n 'BV Arranger',\n\n '工程师',\n '工程',\n 'Engineer',\n 'Eng',\n\n '录音师',\n '录音',\n 'Recording Engineer',\n 'Recordist',\n 'Recording',\n 'Rec',\n\n '混音师',\n '混音',\n '分轨',\n '贴混',\n '混',\n 'Mixing Engineer',\n 'Mixer',\n 'Mixing',\n 'Mixed',\n 'Mix',\n\n '母带工程师',\n '母带后期',\n '母带',\n '后期',\n 'Mastering Engineer',\n 'Mastering',\n 'Master',\n 'Mst',\n\n '修音师',\n '修音',\n '调校',\n '调教',\n 'Vocal Editing',\n 'Vocal Tuning',\n 'Pitch Editing',\n 'Tuning',\n\n '人声编辑',\n '音频编辑',\n '剪辑',\n 'Audio Editor',\n 'Vocal Editor',\n 'Vocal Edit',\n 'Edit',\n 'Editor',\n\n '重混音师',\n 'Remixer',\n 'Remix',\n 'Remixed by',\n\n '声音设计师',\n '音效设计',\n '音效',\n 'Sound Designer',\n 'Sound Effects',\n 'SFX Designer',\n 'SFX',\n\n '拟音师',\n '拟音',\n 'Foley Artist',\n 'Foley',\n\n '监制',\n '音乐总监',\n '监',\n 'Supervisor',\n 'Music Director',\n 'MD',\n\n '指挥',\n 'Conductor',\n 'Cond',\n 'A&R',\n\n '艺人与产品',\n '艺人统筹',\n 'Artists and Repertoire',\n\n '录音室经理',\n '录音室',\n '录音棚',\n 'Studio Manager',\n 'Studio',\n\n '助理工程师',\n '助工',\n '助理',\n 'Assistant Engineer',\n 'Assistant',\n 'Asst Eng',\n\n '抄谱员',\n '抄谱',\n 'Copyist',\n\n '扒谱员',\n '扒谱',\n 'Transcriber',\n 'Trans',\n\n '乐谱管理员',\n 'Librarian',\n\n '乐器技师',\n '吉他技师',\n '鼓技师',\n 'Guitar Tech',\n 'Drum Tech',\n 'Instrument Tech',\n\n '音控师',\n '调音师',\n '前台工程师',\n 'FOH Engineer',\n 'Front of House',\n 'Live Sound Engineer',\n 'Sound Mixer',\n\n '监听工程师',\n '监听',\n 'Monitor Engineer',\n\n '舞台监督',\n 'Stage Manager',\n\n '灯光师',\n 'Lighting Designer',\n 'Light Tech',\n\n '企划',\n '策划',\n '项目统筹',\n '统筹',\n '项目',\n 'Planner',\n 'Project Coordinator',\n 'Coordinator',\n\n '出品',\n '发行',\n '发布',\n 'Publisher',\n 'Produced',\n 'Release',\n\n '宣传',\n '推广',\n '宣发',\n '宣推',\n '营销',\n 'Marketing',\n 'Publicity',\n 'Promotion',\n\n '版权',\n 'Copyright',\n 'OP',\n 'SP',\n\n '视觉设计',\n '视觉',\n '设计',\n 'Visual Design',\n 'Visual',\n 'Design',\n\n '封面',\n '海报',\n '插画',\n '曲绘',\n '图绘',\n '映像',\n '封',\n 'Cover',\n 'Illustration',\n 'Image',\n 'Artwork',\n\n '美工',\n '美术',\n 'Graphic Design',\n 'Fine Arts',\n 'Art',\n\n '视频',\n '分镜',\n '脚本',\n '导演',\n 'Video',\n 'PV',\n 'MV',\n 'CG',\n 'Director',\n\n '艺术顾问',\n '艺术',\n '顾问',\n 'Art Consultant',\n 'Consultant',\n\n '题字',\n '文案',\n 'Inscription',\n 'Copywriting',\n\n '支持',\n '鸣谢',\n '特约嘉宾',\n '指导',\n '承办单位',\n '承办',\n '单位',\n '业务',\n 'Special Thanks',\n 'Acknowledgments',\n]\n\nconst CREATOR_RULES_INST: MatchRule[] = [\n '键盘',\n 'Keyboard',\n 'Kybd',\n 'Keys',\n 'Key',\n\n '钢琴',\n 'Piano',\n 'Pno',\n\n '电钢琴',\n 'Electric Piano',\n 'Wurlitzer',\n 'Rhodes',\n 'EP',\n\n '风琴',\n 'Organ',\n 'Org',\n\n '大键琴',\n 'Harpsichord',\n 'Hpschd',\n\n '合成器',\n 'Synthesizer',\n 'Synths',\n 'Synth',\n\n '采样器',\n 'Sampler',\n\n '序列器',\n 'Sequencer',\n\n '电吉他',\n '木吉他',\n '箱琴',\n '吉他',\n 'Electric Guitar',\n 'Acoustic Guitar',\n 'Guitar',\n 'E.Gtr',\n 'A.Gtr',\n 'Gtr',\n\n '电贝斯',\n '低音吉他',\n '贝斯',\n 'Electric Bass',\n 'Bass Guitar',\n 'Bass',\n 'Bss',\n\n '乌德琴',\n 'Oud',\n\n '班卓琴',\n 'Banjo',\n\n '西塔琴',\n 'Sitar',\n\n '鲁特琴',\n 'Lute',\n\n '曼陀林',\n 'Mandolin',\n\n '弦乐',\n 'Strings',\n 'Str',\n\n '小提琴',\n '提琴',\n 'Violin',\n 'Vln',\n\n '中提琴',\n 'Viola',\n 'Vla',\n\n '大提琴',\n 'Cello',\n 'Vc',\n\n '低音提琴',\n 'Double Bass',\n 'Contrabass',\n 'Cb',\n\n '竖琴',\n 'Harp',\n 'Hrp',\n\n '管乐',\n '铜管',\n '木管',\n 'Brass',\n 'Woodwinds',\n 'Winds',\n\n '笛子',\n '长笛',\n 'Flute',\n 'Fl',\n\n '短笛',\n 'Piccolo',\n 'Picc',\n\n '哨笛',\n 'Flageolet',\n 'Flt',\n\n '单簧管',\n '竖笛',\n 'Clarinet',\n 'Cl',\n\n '低音单簧管',\n 'Bass Clarinet',\n 'B.Cl',\n\n '双簧管',\n 'Oboe',\n 'Ob',\n\n '英国管',\n 'English Horn',\n 'E.Hn',\n\n '巴松',\n '大管',\n 'Bassoon',\n 'Bsn',\n\n '萨克斯',\n 'Saxophone',\n 'Alto Sax',\n 'Tenor Sax',\n 'Baritone Sax',\n 'A.Sax',\n 'T.Sax',\n 'B.Sax',\n 'Sax',\n\n '小号',\n 'Trumpet',\n 'Tpt',\n\n '短号',\n 'Cornet',\n 'Cnt',\n\n '长号',\n 'Trombone',\n 'Tbn',\n\n '大号',\n 'Tuba',\n 'Tba',\n\n '圆号',\n 'French Horn',\n 'Horn',\n 'Hn',\n\n '次中音号',\n 'Euphonium',\n 'Euph',\n\n '富鲁格号',\n 'Flugelhorn',\n\n '打击乐',\n 'Percussion',\n 'Perc',\n\n '架子鼓',\n '鼓',\n 'Drum Set',\n 'Drums',\n 'Drum',\n 'Dr',\n\n '定音鼓',\n 'Timpani',\n 'Timp',\n\n '铃鼓',\n 'Tambourine',\n 'Tamb',\n\n '康加鼓',\n 'Conga',\n\n '邦戈鼓',\n 'Bongo',\n\n '钹',\n '镲',\n 'Cymbal',\n\n '锣',\n 'Gong',\n\n '沙锤',\n 'Shaker',\n\n '木琴',\n 'Xylophone',\n 'Xylo',\n\n '马林巴',\n 'Marimba',\n\n '颤音琴',\n 'Vibraphone',\n 'Vibes',\n 'Vib',\n\n '古琴',\n '瑶琴',\n '玉琴',\n 'Guqin',\n\n '古筝',\n 'Guzheng',\n\n '琵琶',\n 'Pipa',\n\n '二胡',\n 'Erhu',\n\n '扬琴',\n 'Yangqin',\n\n '阮',\n '中阮',\n 'Ruan',\n\n '箫',\n '笛萧',\n '洞萧',\n 'Xiao',\n\n '笙',\n 'Sheng',\n\n '唢呐',\n 'Suona',\n\n '巴乌',\n 'Bawu',\n\n '葫芦丝',\n 'Hulusi',\n\n '手风琴',\n 'Accordion',\n\n '口琴',\n 'Harmonica',\n\n '特雷门琴',\n 'Theremin',\n]\n\nexport const DEFAULT_CREATOR_RULES: MatchRule[] = [...CREATOR_RULES_ROLE, ...CREATOR_RULES_INST, 'PGM']\n","export const extractCreator = (line: string): [string, string] | null => {\n if (!line) {\n return null\n }\n\n const enColonIdx = line.indexOf(':')\n const cnColonIdx = line.indexOf(':')\n\n if (enColonIdx === -1 && cnColonIdx === -1) {\n return null\n }\n\n let splitIdx = -1\n if (enColonIdx !== -1 && cnColonIdx !== -1) {\n splitIdx = Math.min(enColonIdx, cnColonIdx)\n } else {\n splitIdx = enColonIdx !== -1 ? enColonIdx : cnColonIdx\n }\n\n const role = line.substring(0, splitIdx).trim()\n const name = line.substring(splitIdx + 1).trim()\n\n if (!role) {\n return null\n }\n\n return [role, name]\n}\n\nexport const splitNameWithRule = (name: string, rule: string | RegExp) => {\n return name\n .split(rule)\n .map((item) => item.trim())\n .filter((item) => !!item)\n}\n","import type { DeepPartial } from '@music-lyric-kit/utils'\nimport type { Line, Meta } from '@music-lyric-kit/lyric'\nimport type { ExtractCreatorConfig } from './config'\n\nimport { DEFAULT_CREATOR_CONFIG } from './config'\nimport { DEFAULT_CREATOR_RULES } from './constants'\n\nimport { ConfigManager, removeTextSpaceAll } from '@music-lyric-kit/utils'\nimport { Matcher } from '@root/utils/match'\n\nimport { ParserPlugin, ParserStage, ParserContext } from '@music-lyric-kit/core'\nimport { LineType, MetaCreator } from '@music-lyric-kit/lyric'\nimport { extractCreator, splitNameWithRule } from './utils'\n\nexport class ExtractCreatorPlugin extends ParserPlugin {\n private matcher: Matcher\n\n override config = new ConfigManager<ExtractCreatorConfig, DeepPartial<ExtractCreatorConfig>>(DEFAULT_CREATOR_CONFIG)\n\n override get id() {\n return 'TRANSFORM-EXTRACT'\n }\n\n override get name() {\n return 'TRANSFORM-EXTRACT'\n }\n\n override get stage() {\n return ParserStage.Transform\n }\n\n constructor() {\n super()\n this.matcher = new Matcher(this.config.current.match, DEFAULT_CREATOR_RULES)\n this.config.on((opt) => {\n this.matcher.update(opt.match)\n })\n }\n\n override check(ctx: ParserContext) {\n return true\n }\n\n override exec(ctx: ParserContext) {\n const lines = ctx.result.lines\n if (!lines.length) {\n return\n }\n\n const newMetas: Meta[] = [...ctx.result.metas]\n const newLines: Line[] = []\n\n for (const line of lines) {\n if (line.type != LineType.Normal) {\n newLines.push(line)\n continue\n }\n\n const target = extractCreator(line.content.original)\n if (!target) {\n newLines.push(line)\n continue\n }\n\n const [role, name] = target\n const result = this.matcher.match(removeTextSpaceAll(role))\n if (!result) {\n newLines.push(line)\n continue\n }\n\n const meta = new MetaCreator()\n meta.content.role = role\n meta.content.name = splitNameWithRule(name, this.config.current.split)\n\n if (!this.config.current.replace) {\n newLines.push(line)\n }\n newMetas.push(meta)\n }\n\n ctx.result.lines = newLines\n ctx.result.metas = newMetas\n }\n}\n\nexport type { ExtractCreatorConfig }\n"],"names":["DEFAULT_CONFIG","DEFAULT_RULES","Matcher","options","defaultRules","raw","rule","target","a","b","str","line","targetLine","i","thresholdPercent","targetMatchCount","matchedChars","matchedCount","ruleLen","postion","j","matchResult","matchLen","pos","CleanPlugin","ParserPlugin","ConfigManager","ParserStage","opt","ctx","lines","newLines","LineType","DEFAULT_CREATOR_CONFIG","CREATOR_RULES_ROLE","CREATOR_RULES_INST","DEFAULT_CREATOR_RULES","extractCreator","enColonIdx","cnColonIdx","splitIdx","role","name","splitNameWithRule","item","ExtractCreatorPlugin","newMetas","removeTextSpaceAll","meta","MetaCreator"],"mappings":"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AAK,OAAO,GAAI2B,GAAQ,CACtB,KAAK,QAAQ,OAAOA,CAAG,CACzB,CAAC,CACH,CAES,MAAMC,EAAoB,CACjC,MAAO,EACT,CAES,KAAKA,EAAoB,CAChC,MAAMC,EAAQD,EAAI,OAAO,MACzB,GAAI,CAACC,EAAM,OACT,OAGF,MAAMC,EAAmB,CAAA,EAEzB,UAAWpB,KAAQmB,EACbnB,EAAK,MAAQqB,EAAAA,SAAS,QACT,KAAK,QAAQ,MAAMrB,EAAK,QAAQ,QAAQ,GAKzDoB,EAAS,KAAKpB,CAAI,EAGpBkB,EAAI,OAAO,MAAQE,CACrB,CACF,CC/CO,MAAME,EAA+C,CAC1D,MAAO,CACL,KAAM,QACN,MAAO,CAAA,EACP,MAAO,CACL,MAAO,EAAA,EAET,KAAM,CACJ,WAAY,GACZ,OAAQ,CAAA,CAAC,CACX,EAEF,MAAO,IACP,QAAS,EACX,EC3BMC,EAAkC,CACtC,KACA,KACA,KACA,KACA,IAEA,QACA,SACA,aACA,SACA,kBACA,QAEA,KACA,KACA,YACA,OACA,KAEA,KACA,KACA,KACA,KACA,KACA,iBACA,oBACA,SACA,UACA,MACA,OACA,KAEA,KACA,KACA,KACA,KACA,IACA,QACA,iBACA,aACA,eAEA,KACA,KACA,KACA,KACA,cACA,aACA,MACA,SAEA,KACA,MACA,KACA,KACA,mBACA,WACA,YACA,SAEA,OACA,KACA,YACA,OAEA,KACA,KACA,IACA,WACA,SACA,QACA,MAEA,KACA,KACA,IACA,WACA,UACA,QACA,OAEA,KACA,IACA,WACA,cACA,UACA,MAEA,MACA,KACA,OACA,WACA,UACA,OAEA,QACA,KACA,qBACA,gBACA,SAEA,QACA,OACA,KACA,cACA,SACA,qBAEA,OACA,KACA,YACA,aACA,OAEA,KACA,KACA,cACA,aACA,OAEA,KACA,QACA,eACA,gBACA,OAEA,OACA,OACA,0BACA,iBACA,cAEA,MACA,KACA,WACA,MAEA,MACA,KACA,qBACA,YACA,YACA,MAEA,MACA,KACA,KACA,KACA,IACA,kBACA,QACA,SACA,QACA,MAEA,QACA,OACA,KACA,KACA,qBACA,YACA,SACA,MAEA,MACA,KACA,KACA,KACA,gBACA,eACA,gBACA,SAEA,OACA,OACA,KACA,eACA,eACA,aACA,OACA,SAEA,OACA,UACA,QACA,aAEA,QACA,OACA,KACA,iBACA,gBACA,eACA,MAEA,MACA,KACA,eACA,QAEA,KACA,OACA,IACA,aACA,iBACA,KAEA,KACA,YACA,OACA,MAEA,QACA,OACA,yBAEA,QACA,MACA,MACA,iBACA,SAEA,QACA,KACA,KACA,qBACA,YACA,WAEA,MACA,KACA,UAEA,MACA,KACA,cACA,QAEA,QACA,YAEA,OACA,OACA,MACA,cACA,YACA,kBAEA,MACA,MACA,QACA,eACA,iBACA,sBACA,cAEA,QACA,KACA,mBAEA,OACA,gBAEA,MACA,oBACA,aAEA,KACA,KACA,OACA,KACA,KACA,UACA,sBACA,cAEA,KACA,KACA,KACA,YACA,WACA,UAEA,KACA,KACA,KACA,KACA,KACA,YACA,YACA,YAEA,KACA,YACA,KACA,KAEA,OACA,KACA,KACA,gBACA,SACA,SAEA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,QACA,eACA,QACA,UAEA,KACA,KACA,iBACA,YACA,MAEA,KACA,KACA,KACA,KACA,QACA,KACA,KACA,KACA,WAEA,OACA,KACA,KACA,iBACA,aAEA,KACA,KACA,cACA,cAEA,KACA,KACA,OACA,KACA,OACA,KACA,KACA,KACA,iBACA,iBACF,EAEMC,EAAkC,CACtC,KACA,WACA,OACA,OACA,MAEA,KACA,QACA,MAEA,MACA,iBACA,YACA,SACA,KAEA,KACA,QACA,MAEA,MACA,cACA,SAEA,MACA,cACA,SACA,QAEA,MACA,UAEA,MACA,YAEA,MACA,MACA,KACA,KACA,kBACA,kBACA,SACA,QACA,QACA,MAEA,MACA,OACA,KACA,gBACA,cACA,OACA,MAEA,MACA,MAEA,MACA,QAEA,MACA,QAEA,MACA,OAEA,MACA,WAEA,KACA,UACA,MAEA,MACA,KACA,SACA,MAEA,MACA,QACA,MAEA,MAC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"}
@@ -0,0 +1,170 @@
1
+ import { ConfigManager } from '@music-lyric-kit/utils';
2
+ import { ParserContext } from '@music-lyric-kit/core';
3
+ import { ParserPlugin } from '@music-lyric-kit/core';
4
+ import { ParserStage } from '@music-lyric-kit/core';
5
+
6
+ export declare interface CleanConfig extends MatchOptions {
7
+ }
8
+
9
+ export declare class CleanPlugin extends ParserPlugin {
10
+ private matcher;
11
+ config: ConfigManager<CleanConfig, {
12
+ mode?: "fuzzy" | "exact" | undefined;
13
+ fuzzy?: {} | undefined;
14
+ exact?: {
15
+ check?: number | undefined;
16
+ } | undefined;
17
+ rule?: {
18
+ useDefault?: boolean | undefined;
19
+ custom?: (string | {
20
+ exec?: ((string: string) => RegExpExecArray | null) | undefined;
21
+ test?: ((string: string) => boolean) | undefined;
22
+ readonly source?: string | undefined;
23
+ readonly global?: boolean | undefined;
24
+ readonly ignoreCase?: boolean | undefined;
25
+ readonly multiline?: boolean | undefined;
26
+ lastIndex?: number | undefined;
27
+ compile?: ((pattern: string, flags?: string) => RegExp) | undefined;
28
+ readonly flags?: string | undefined;
29
+ readonly sticky?: boolean | undefined;
30
+ readonly unicode?: boolean | undefined;
31
+ readonly dotAll?: boolean | undefined;
32
+ readonly hasIndices?: boolean | undefined;
33
+ readonly unicodeSets?: boolean | undefined;
34
+ [Symbol.match]?: ((string: string) => RegExpMatchArray | null) | undefined;
35
+ [Symbol.replace]?: {
36
+ (string: string, replaceValue: string): string;
37
+ (string: string, replacer: (substring: string, ...args: any[]) => string): string;
38
+ } | undefined;
39
+ [Symbol.search]?: ((string: string) => number) | undefined;
40
+ [Symbol.split]?: ((string: string, limit?: number) => string[]) | undefined;
41
+ [Symbol.matchAll]?: ((str: string) => RegExpStringIterator<RegExpMatchArray>) | undefined;
42
+ } | undefined)[] | undefined;
43
+ } | undefined;
44
+ }>;
45
+ get id(): string;
46
+ get name(): string;
47
+ get stage(): ParserStage;
48
+ constructor();
49
+ check(ctx: ParserContext): boolean;
50
+ exec(ctx: ParserContext): void;
51
+ }
52
+
53
+ export declare interface ExtractCreatorConfig {
54
+ match: MatchOptions;
55
+ /**
56
+ * split name
57
+ */
58
+ split: string | RegExp;
59
+ /**
60
+ * is replace this line when matched
61
+ * @default true
62
+ */
63
+ replace: boolean;
64
+ }
65
+
66
+ export declare class ExtractCreatorPlugin extends ParserPlugin {
67
+ private matcher;
68
+ config: ConfigManager<ExtractCreatorConfig, {
69
+ match?: {
70
+ mode?: "fuzzy" | "exact" | undefined;
71
+ fuzzy?: {} | undefined;
72
+ exact?: {
73
+ check?: number | undefined;
74
+ } | undefined;
75
+ rule?: {
76
+ useDefault?: boolean | undefined;
77
+ custom?: (string | {
78
+ exec?: ((string: string) => RegExpExecArray | null) | undefined;
79
+ test?: ((string: string) => boolean) | undefined;
80
+ readonly source?: string | undefined;
81
+ readonly global?: boolean | undefined;
82
+ readonly ignoreCase?: boolean | undefined;
83
+ readonly multiline?: boolean | undefined;
84
+ lastIndex?: number | undefined;
85
+ compile?: ((pattern: string, flags?: string) => RegExp) | undefined;
86
+ readonly flags?: string | undefined;
87
+ readonly sticky?: boolean | undefined;
88
+ readonly unicode?: boolean | undefined;
89
+ readonly dotAll?: boolean | undefined;
90
+ readonly hasIndices?: boolean | undefined;
91
+ readonly unicodeSets?: boolean | undefined;
92
+ [Symbol.match]?: ((string: string) => RegExpMatchArray | null) | undefined;
93
+ [Symbol.replace]?: {
94
+ (string: string, replaceValue: string): string;
95
+ (string: string, replacer: (substring: string, ...args: any[]) => string): string;
96
+ } | undefined;
97
+ [Symbol.search]?: ((string: string) => number) | undefined;
98
+ [Symbol.split]?: ((string: string, limit?: number) => string[]) | undefined;
99
+ [Symbol.matchAll]?: ((str: string) => RegExpStringIterator<RegExpMatchArray>) | undefined;
100
+ } | undefined)[] | undefined;
101
+ } | undefined;
102
+ } | undefined;
103
+ split?: string | {
104
+ exec?: ((string: string) => RegExpExecArray | null) | undefined;
105
+ test?: ((string: string) => boolean) | undefined;
106
+ readonly source?: string | undefined;
107
+ readonly global?: boolean | undefined;
108
+ readonly ignoreCase?: boolean | undefined;
109
+ readonly multiline?: boolean | undefined;
110
+ lastIndex?: number | undefined;
111
+ compile?: ((pattern: string, flags?: string) => RegExp) | undefined;
112
+ readonly flags?: string | undefined;
113
+ readonly sticky?: boolean | undefined;
114
+ readonly unicode?: boolean | undefined;
115
+ readonly dotAll?: boolean | undefined;
116
+ readonly hasIndices?: boolean | undefined;
117
+ readonly unicodeSets?: boolean | undefined;
118
+ [Symbol.match]?: ((string: string) => RegExpMatchArray | null) | undefined;
119
+ [Symbol.replace]?: {
120
+ (string: string, replaceValue: string): string;
121
+ (string: string, replacer: (substring: string, ...args: any[]) => string): string;
122
+ } | undefined;
123
+ [Symbol.search]?: ((string: string) => number) | undefined;
124
+ [Symbol.split]?: ((string: string, limit?: number) => string[]) | undefined;
125
+ [Symbol.matchAll]?: ((str: string) => RegExpStringIterator<RegExpMatchArray>) | undefined;
126
+ } | undefined;
127
+ replace?: boolean | undefined;
128
+ }>;
129
+ get id(): string;
130
+ get name(): string;
131
+ get stage(): ParserStage;
132
+ constructor();
133
+ check(ctx: ParserContext): boolean;
134
+ exec(ctx: ParserContext): void;
135
+ }
136
+
137
+ declare interface MatchOptions {
138
+ /**
139
+ * match mode
140
+ * @default fuzzy
141
+ */
142
+ mode: 'fuzzy' | 'exact';
143
+ /** fuzzy mode options */
144
+ fuzzy: {};
145
+ /** exact mode options */
146
+ exact: {
147
+ /**
148
+ * need more than this percentage
149
+ * @default 50
150
+ */
151
+ check: number;
152
+ };
153
+ /** match rules */
154
+ rule: {
155
+ /**
156
+ * is use default rule
157
+ * @default true
158
+ */
159
+ useDefault: boolean;
160
+ /**
161
+ * custom rule, it will be merge with default when useDefault is enable
162
+ * @default []
163
+ */
164
+ custom: MatchRule[];
165
+ };
166
+ }
167
+
168
+ declare type MatchRule = string | RegExp;
169
+
170
+ export { }
@@ -0,0 +1,709 @@
1
+ import { ConfigManager as g, removeTextSpaceAll as R } from "@music-lyric-kit/utils";
2
+ import { ParserPlugin as m, ParserStage as d } from "@music-lyric-kit/core";
3
+ import { LineType as f, MetaCreator as x } from "@music-lyric-kit/lyric";
4
+ const C = {
5
+ mode: "fuzzy",
6
+ fuzzy: {},
7
+ exact: {
8
+ check: 50
9
+ },
10
+ rule: {
11
+ useDefault: !0,
12
+ custom: []
13
+ }
14
+ }, E = [
15
+ "版权所有",
16
+ "版权",
17
+ "授权",
18
+ "Copyright",
19
+ "License",
20
+ "All rights reserved",
21
+ "翻唱",
22
+ "改编",
23
+ "致敬",
24
+ "Cover",
25
+ "Adaptation",
26
+ "Tribute",
27
+ "Remake"
28
+ ];
29
+ class p {
30
+ options;
31
+ stringRules = [];
32
+ regexRules = [];
33
+ defaultRules = [];
34
+ combinedRegex = null;
35
+ constructor(e, t) {
36
+ this.options = e, this.defaultRules = t, this.init();
37
+ }
38
+ init() {
39
+ const e = this.options.rule.useDefault ? [...this.defaultRules, ...this.options.rule.custom || []] : [...this.options.rule.custom || []];
40
+ for (const t of e)
41
+ typeof t == "string" ? this.stringRules.push(t) : t instanceof RegExp && this.regexRules.push(t);
42
+ if (this.options.mode === "fuzzy" && this.stringRules.length > 0) {
43
+ const t = this.stringRules.sort((n, r) => r.length - n.length).map((n) => n.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"));
44
+ this.combinedRegex = new RegExp(`(${t.join("|")})`);
45
+ }
46
+ }
47
+ update(e) {
48
+ this.options = e, this.init();
49
+ }
50
+ match(e) {
51
+ if (!e)
52
+ return !1;
53
+ const t = e.trim();
54
+ return t.length ? this.options.mode === "fuzzy" ? this.withFuzzy(t) : this.withExact(t) : !1;
55
+ }
56
+ withFuzzy(e) {
57
+ if (this.combinedRegex && this.combinedRegex.test(e))
58
+ return !0;
59
+ for (let t = 0; t < this.regexRules.length; t++)
60
+ if (this.regexRules[t].test(e)) return !0;
61
+ return !1;
62
+ }
63
+ withExact(e) {
64
+ const t = Math.max(this.options.exact.check, 0), n = Math.ceil(t / 100 * e.length);
65
+ if (n === 0)
66
+ return !0;
67
+ const r = new Uint8Array(e.length);
68
+ let i = 0;
69
+ for (let c = 0; c < this.stringRules.length; c++) {
70
+ const o = this.stringRules[c], l = o.length;
71
+ if (l === 0) continue;
72
+ let u = e.indexOf(o);
73
+ for (; u !== -1; ) {
74
+ for (let s = 0; s < l; s++)
75
+ r[u + s] === 0 && (r[u + s] = 1, i++);
76
+ if (i >= n)
77
+ return !0;
78
+ u = e.indexOf(o, u + l);
79
+ }
80
+ }
81
+ for (let c = 0; c < this.regexRules.length; c++) {
82
+ const o = e.match(this.regexRules[c]);
83
+ if (o && o[0] && o.index !== void 0) {
84
+ const u = o[0].length, s = o.index;
85
+ for (let h = 0; h < u; h++)
86
+ r[s + h] === 0 && (r[s + h] = 1, i++);
87
+ if (i >= n)
88
+ return !0;
89
+ }
90
+ }
91
+ return !1;
92
+ }
93
+ }
94
+ class L extends m {
95
+ matcher;
96
+ config = new g(C);
97
+ get id() {
98
+ return "TRANSFORM-CLEAN";
99
+ }
100
+ get name() {
101
+ return "TRANSFORM-CLEAN";
102
+ }
103
+ get stage() {
104
+ return d.Transform;
105
+ }
106
+ constructor() {
107
+ super(), this.matcher = new p(this.config.current, E), this.config.on((e) => {
108
+ this.matcher.update(e);
109
+ });
110
+ }
111
+ check(e) {
112
+ return !0;
113
+ }
114
+ exec(e) {
115
+ const t = e.result.lines;
116
+ if (!t.length)
117
+ return;
118
+ const n = [];
119
+ for (const r of t)
120
+ r.type == f.Normal && this.matcher.match(r.content.original) || n.push(r);
121
+ e.result.lines = n;
122
+ }
123
+ }
124
+ const S = {
125
+ match: {
126
+ mode: "exact",
127
+ fuzzy: {},
128
+ exact: {
129
+ check: 50
130
+ },
131
+ rule: {
132
+ useDefault: !0,
133
+ custom: []
134
+ }
135
+ },
136
+ split: "/",
137
+ replace: !0
138
+ }, A = [
139
+ "演唱",
140
+ "主唱",
141
+ "原唱",
142
+ "翻唱",
143
+ "唱",
144
+ "Vocal",
145
+ "Vocals",
146
+ "Lead Vocal",
147
+ "Singer",
148
+ "Original Singer",
149
+ "Cover",
150
+ "客串",
151
+ "特邀",
152
+ "Featuring",
153
+ "Feat",
154
+ "Ft",
155
+ "和声",
156
+ "和音",
157
+ "伴唱",
158
+ "合声",
159
+ "合音",
160
+ "Backing Vocals",
161
+ "Background Vocals",
162
+ "Chorus",
163
+ "Harmony",
164
+ "BGs",
165
+ "Bvox",
166
+ "BV",
167
+ "童声",
168
+ "男声",
169
+ "女声",
170
+ "人声",
171
+ "腔",
172
+ "Voice",
173
+ "Children Voice",
174
+ "Male Voice",
175
+ "Female Voice",
176
+ "配音",
177
+ "念白",
178
+ "旁白",
179
+ "CV",
180
+ "Voice Actor",
181
+ "Recitation",
182
+ "Rap",
183
+ "Rapper",
184
+ "说唱",
185
+ "演奏者",
186
+ "乐手",
187
+ "乐师",
188
+ "Session Musician",
189
+ "Musician",
190
+ "Performer",
191
+ "Player",
192
+ "现场乐队",
193
+ "乐队",
194
+ "Live Band",
195
+ "Band",
196
+ "作词",
197
+ "填词",
198
+ "词",
199
+ "Lyricist",
200
+ "Lyrics",
201
+ "Words",
202
+ "Lyr",
203
+ "作曲",
204
+ "谱曲",
205
+ "曲",
206
+ "Composer",
207
+ "Compose",
208
+ "Music",
209
+ "Comp",
210
+ "编曲",
211
+ "编",
212
+ "Arranger",
213
+ "Arrangement",
214
+ "Arrange",
215
+ "Arr",
216
+ "制作人",
217
+ "制作",
218
+ "单曲制作",
219
+ "Producer",
220
+ "Produce",
221
+ "Prod",
222
+ "执行制作人",
223
+ "执制",
224
+ "Executive Producer",
225
+ "Exec Producer",
226
+ "ExProd",
227
+ "协力制作人",
228
+ "共同制作",
229
+ "协力",
230
+ "Co-Producer",
231
+ "CoProd",
232
+ "Associate Producer",
233
+ "节拍制作",
234
+ "节拍",
235
+ "Beatmaker",
236
+ "Beat Maker",
237
+ "Beat",
238
+ "编调",
239
+ "编程",
240
+ "Programming",
241
+ "Programmer",
242
+ "Prog",
243
+ "配器",
244
+ "管弦乐编排",
245
+ "Orchestrator",
246
+ "Orchestration",
247
+ "Orch",
248
+ "和声编写",
249
+ "和音编写",
250
+ "Backing Vocals Arranger",
251
+ "Vocal Arranger",
252
+ "BV Arranger",
253
+ "工程师",
254
+ "工程",
255
+ "Engineer",
256
+ "Eng",
257
+ "录音师",
258
+ "录音",
259
+ "Recording Engineer",
260
+ "Recordist",
261
+ "Recording",
262
+ "Rec",
263
+ "混音师",
264
+ "混音",
265
+ "分轨",
266
+ "贴混",
267
+ "混",
268
+ "Mixing Engineer",
269
+ "Mixer",
270
+ "Mixing",
271
+ "Mixed",
272
+ "Mix",
273
+ "母带工程师",
274
+ "母带后期",
275
+ "母带",
276
+ "后期",
277
+ "Mastering Engineer",
278
+ "Mastering",
279
+ "Master",
280
+ "Mst",
281
+ "修音师",
282
+ "修音",
283
+ "调校",
284
+ "调教",
285
+ "Vocal Editing",
286
+ "Vocal Tuning",
287
+ "Pitch Editing",
288
+ "Tuning",
289
+ "人声编辑",
290
+ "音频编辑",
291
+ "剪辑",
292
+ "Audio Editor",
293
+ "Vocal Editor",
294
+ "Vocal Edit",
295
+ "Edit",
296
+ "Editor",
297
+ "重混音师",
298
+ "Remixer",
299
+ "Remix",
300
+ "Remixed by",
301
+ "声音设计师",
302
+ "音效设计",
303
+ "音效",
304
+ "Sound Designer",
305
+ "Sound Effects",
306
+ "SFX Designer",
307
+ "SFX",
308
+ "拟音师",
309
+ "拟音",
310
+ "Foley Artist",
311
+ "Foley",
312
+ "监制",
313
+ "音乐总监",
314
+ "监",
315
+ "Supervisor",
316
+ "Music Director",
317
+ "MD",
318
+ "指挥",
319
+ "Conductor",
320
+ "Cond",
321
+ "A&R",
322
+ "艺人与产品",
323
+ "艺人统筹",
324
+ "Artists and Repertoire",
325
+ "录音室经理",
326
+ "录音室",
327
+ "录音棚",
328
+ "Studio Manager",
329
+ "Studio",
330
+ "助理工程师",
331
+ "助工",
332
+ "助理",
333
+ "Assistant Engineer",
334
+ "Assistant",
335
+ "Asst Eng",
336
+ "抄谱员",
337
+ "抄谱",
338
+ "Copyist",
339
+ "扒谱员",
340
+ "扒谱",
341
+ "Transcriber",
342
+ "Trans",
343
+ "乐谱管理员",
344
+ "Librarian",
345
+ "乐器技师",
346
+ "吉他技师",
347
+ "鼓技师",
348
+ "Guitar Tech",
349
+ "Drum Tech",
350
+ "Instrument Tech",
351
+ "音控师",
352
+ "调音师",
353
+ "前台工程师",
354
+ "FOH Engineer",
355
+ "Front of House",
356
+ "Live Sound Engineer",
357
+ "Sound Mixer",
358
+ "监听工程师",
359
+ "监听",
360
+ "Monitor Engineer",
361
+ "舞台监督",
362
+ "Stage Manager",
363
+ "灯光师",
364
+ "Lighting Designer",
365
+ "Light Tech",
366
+ "企划",
367
+ "策划",
368
+ "项目统筹",
369
+ "统筹",
370
+ "项目",
371
+ "Planner",
372
+ "Project Coordinator",
373
+ "Coordinator",
374
+ "出品",
375
+ "发行",
376
+ "发布",
377
+ "Publisher",
378
+ "Produced",
379
+ "Release",
380
+ "宣传",
381
+ "推广",
382
+ "宣发",
383
+ "宣推",
384
+ "营销",
385
+ "Marketing",
386
+ "Publicity",
387
+ "Promotion",
388
+ "版权",
389
+ "Copyright",
390
+ "OP",
391
+ "SP",
392
+ "视觉设计",
393
+ "视觉",
394
+ "设计",
395
+ "Visual Design",
396
+ "Visual",
397
+ "Design",
398
+ "封面",
399
+ "海报",
400
+ "插画",
401
+ "曲绘",
402
+ "图绘",
403
+ "映像",
404
+ "封",
405
+ "Cover",
406
+ "Illustration",
407
+ "Image",
408
+ "Artwork",
409
+ "美工",
410
+ "美术",
411
+ "Graphic Design",
412
+ "Fine Arts",
413
+ "Art",
414
+ "视频",
415
+ "分镜",
416
+ "脚本",
417
+ "导演",
418
+ "Video",
419
+ "PV",
420
+ "MV",
421
+ "CG",
422
+ "Director",
423
+ "艺术顾问",
424
+ "艺术",
425
+ "顾问",
426
+ "Art Consultant",
427
+ "Consultant",
428
+ "题字",
429
+ "文案",
430
+ "Inscription",
431
+ "Copywriting",
432
+ "支持",
433
+ "鸣谢",
434
+ "特约嘉宾",
435
+ "指导",
436
+ "承办单位",
437
+ "承办",
438
+ "单位",
439
+ "业务",
440
+ "Special Thanks",
441
+ "Acknowledgments"
442
+ ], T = [
443
+ "键盘",
444
+ "Keyboard",
445
+ "Kybd",
446
+ "Keys",
447
+ "Key",
448
+ "钢琴",
449
+ "Piano",
450
+ "Pno",
451
+ "电钢琴",
452
+ "Electric Piano",
453
+ "Wurlitzer",
454
+ "Rhodes",
455
+ "EP",
456
+ "风琴",
457
+ "Organ",
458
+ "Org",
459
+ "大键琴",
460
+ "Harpsichord",
461
+ "Hpschd",
462
+ "合成器",
463
+ "Synthesizer",
464
+ "Synths",
465
+ "Synth",
466
+ "采样器",
467
+ "Sampler",
468
+ "序列器",
469
+ "Sequencer",
470
+ "电吉他",
471
+ "木吉他",
472
+ "箱琴",
473
+ "吉他",
474
+ "Electric Guitar",
475
+ "Acoustic Guitar",
476
+ "Guitar",
477
+ "E.Gtr",
478
+ "A.Gtr",
479
+ "Gtr",
480
+ "电贝斯",
481
+ "低音吉他",
482
+ "贝斯",
483
+ "Electric Bass",
484
+ "Bass Guitar",
485
+ "Bass",
486
+ "Bss",
487
+ "乌德琴",
488
+ "Oud",
489
+ "班卓琴",
490
+ "Banjo",
491
+ "西塔琴",
492
+ "Sitar",
493
+ "鲁特琴",
494
+ "Lute",
495
+ "曼陀林",
496
+ "Mandolin",
497
+ "弦乐",
498
+ "Strings",
499
+ "Str",
500
+ "小提琴",
501
+ "提琴",
502
+ "Violin",
503
+ "Vln",
504
+ "中提琴",
505
+ "Viola",
506
+ "Vla",
507
+ "大提琴",
508
+ "Cello",
509
+ "Vc",
510
+ "低音提琴",
511
+ "Double Bass",
512
+ "Contrabass",
513
+ "Cb",
514
+ "竖琴",
515
+ "Harp",
516
+ "Hrp",
517
+ "管乐",
518
+ "铜管",
519
+ "木管",
520
+ "Brass",
521
+ "Woodwinds",
522
+ "Winds",
523
+ "笛子",
524
+ "长笛",
525
+ "Flute",
526
+ "Fl",
527
+ "短笛",
528
+ "Piccolo",
529
+ "Picc",
530
+ "哨笛",
531
+ "Flageolet",
532
+ "Flt",
533
+ "单簧管",
534
+ "竖笛",
535
+ "Clarinet",
536
+ "Cl",
537
+ "低音单簧管",
538
+ "Bass Clarinet",
539
+ "B.Cl",
540
+ "双簧管",
541
+ "Oboe",
542
+ "Ob",
543
+ "英国管",
544
+ "English Horn",
545
+ "E.Hn",
546
+ "巴松",
547
+ "大管",
548
+ "Bassoon",
549
+ "Bsn",
550
+ "萨克斯",
551
+ "Saxophone",
552
+ "Alto Sax",
553
+ "Tenor Sax",
554
+ "Baritone Sax",
555
+ "A.Sax",
556
+ "T.Sax",
557
+ "B.Sax",
558
+ "Sax",
559
+ "小号",
560
+ "Trumpet",
561
+ "Tpt",
562
+ "短号",
563
+ "Cornet",
564
+ "Cnt",
565
+ "长号",
566
+ "Trombone",
567
+ "Tbn",
568
+ "大号",
569
+ "Tuba",
570
+ "Tba",
571
+ "圆号",
572
+ "French Horn",
573
+ "Horn",
574
+ "Hn",
575
+ "次中音号",
576
+ "Euphonium",
577
+ "Euph",
578
+ "富鲁格号",
579
+ "Flugelhorn",
580
+ "打击乐",
581
+ "Percussion",
582
+ "Perc",
583
+ "架子鼓",
584
+ "鼓",
585
+ "Drum Set",
586
+ "Drums",
587
+ "Drum",
588
+ "Dr",
589
+ "定音鼓",
590
+ "Timpani",
591
+ "Timp",
592
+ "铃鼓",
593
+ "Tambourine",
594
+ "Tamb",
595
+ "康加鼓",
596
+ "Conga",
597
+ "邦戈鼓",
598
+ "Bongo",
599
+ "钹",
600
+ "镲",
601
+ "Cymbal",
602
+ "锣",
603
+ "Gong",
604
+ "沙锤",
605
+ "Shaker",
606
+ "木琴",
607
+ "Xylophone",
608
+ "Xylo",
609
+ "马林巴",
610
+ "Marimba",
611
+ "颤音琴",
612
+ "Vibraphone",
613
+ "Vibes",
614
+ "Vib",
615
+ "古琴",
616
+ "瑶琴",
617
+ "玉琴",
618
+ "Guqin",
619
+ "古筝",
620
+ "Guzheng",
621
+ "琵琶",
622
+ "Pipa",
623
+ "二胡",
624
+ "Erhu",
625
+ "扬琴",
626
+ "Yangqin",
627
+ "阮",
628
+ "中阮",
629
+ "Ruan",
630
+ "箫",
631
+ "笛萧",
632
+ "洞萧",
633
+ "Xiao",
634
+ "笙",
635
+ "Sheng",
636
+ "唢呐",
637
+ "Suona",
638
+ "巴乌",
639
+ "Bawu",
640
+ "葫芦丝",
641
+ "Hulusi",
642
+ "手风琴",
643
+ "Accordion",
644
+ "口琴",
645
+ "Harmonica",
646
+ "特雷门琴",
647
+ "Theremin"
648
+ ], P = [...A, ...T, "PGM"], M = (a) => {
649
+ if (!a)
650
+ return null;
651
+ const e = a.indexOf(":"), t = a.indexOf(":");
652
+ if (e === -1 && t === -1)
653
+ return null;
654
+ let n = -1;
655
+ e !== -1 && t !== -1 ? n = Math.min(e, t) : n = e !== -1 ? e : t;
656
+ const r = a.substring(0, n).trim(), i = a.substring(n + 1).trim();
657
+ return r ? [r, i] : null;
658
+ }, y = (a, e) => a.split(e).map((t) => t.trim()).filter((t) => !!t);
659
+ class B extends m {
660
+ matcher;
661
+ config = new g(S);
662
+ get id() {
663
+ return "TRANSFORM-EXTRACT";
664
+ }
665
+ get name() {
666
+ return "TRANSFORM-EXTRACT";
667
+ }
668
+ get stage() {
669
+ return d.Transform;
670
+ }
671
+ constructor() {
672
+ super(), this.matcher = new p(this.config.current.match, P), this.config.on((e) => {
673
+ this.matcher.update(e.match);
674
+ });
675
+ }
676
+ check(e) {
677
+ return !0;
678
+ }
679
+ exec(e) {
680
+ const t = e.result.lines;
681
+ if (!t.length)
682
+ return;
683
+ const n = [...e.result.metas], r = [];
684
+ for (const i of t) {
685
+ if (i.type != f.Normal) {
686
+ r.push(i);
687
+ continue;
688
+ }
689
+ const c = M(i.content.original);
690
+ if (!c) {
691
+ r.push(i);
692
+ continue;
693
+ }
694
+ const [o, l] = c;
695
+ if (!this.matcher.match(R(o))) {
696
+ r.push(i);
697
+ continue;
698
+ }
699
+ const s = new x();
700
+ s.content.role = o, s.content.name = y(l, this.config.current.split), this.config.current.replace || r.push(i), n.push(s);
701
+ }
702
+ e.result.lines = r, e.result.metas = n;
703
+ }
704
+ }
705
+ export {
706
+ L as CleanPlugin,
707
+ B as ExtractCreatorPlugin
708
+ };
709
+ //# sourceMappingURL=index.ecma.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.ecma.js","sources":["../src/clean/config.ts","../src/clean/constants.ts","../src/utils/match.ts","../src/clean/index.ts","../src/extract/config.ts","../src/extract/constants.ts","../src/extract/utils.ts","../src/extract/index.ts"],"sourcesContent":["import type { MatchOptions } from '@root/utils/match'\n\nexport interface CleanConfig extends MatchOptions {}\n\nexport const DEFAULT_CONFIG: CleanConfig = {\n mode: 'fuzzy',\n fuzzy: {},\n exact: {\n check: 50,\n },\n rule: {\n useDefault: true,\n custom: [],\n },\n}\n","import type { MatchRule } from '@root/utils/match'\n\nexport const DEFAULT_RULES: MatchRule[] = [\n '版权所有',\n '版权',\n '授权',\n 'Copyright',\n 'License',\n 'All rights reserved',\n\n '翻唱',\n '改编',\n '致敬',\n 'Cover',\n 'Adaptation',\n 'Tribute',\n 'Remake',\n]\n","export type MatchRule = string | RegExp\n\nexport interface MatchOptions {\n /**\n * match mode\n * @default fuzzy\n */\n mode: 'fuzzy' | 'exact'\n /** fuzzy mode options */\n fuzzy: {}\n /** exact mode options */\n exact: {\n /**\n * need more than this percentage\n * @default 50\n */\n check: number\n }\n /** match rules */\n rule: {\n /**\n * is use default rule\n * @default true\n */\n useDefault: boolean\n /**\n * custom rule, it will be merge with default when useDefault is enable\n * @default []\n */\n custom: MatchRule[]\n }\n}\n\nexport class Matcher {\n private options: MatchOptions\n\n private stringRules: string[] = []\n private regexRules: RegExp[] = []\n\n private defaultRules: MatchRule[] = []\n private combinedRegex: RegExp | null = null\n\n constructor(options: MatchOptions, defaultRules: MatchRule[]) {\n this.options = options\n this.defaultRules = defaultRules\n this.init()\n }\n\n private init() {\n const raw = this.options.rule.useDefault ? [...this.defaultRules, ...(this.options.rule.custom || [])] : [...(this.options.rule.custom || [])]\n\n for (const rule of raw) {\n if (typeof rule === 'string') {\n this.stringRules.push(rule)\n } else if (rule instanceof RegExp) {\n this.regexRules.push(rule)\n }\n }\n\n if (this.options.mode === 'fuzzy' && this.stringRules.length > 0) {\n const target = this.stringRules.sort((a, b) => b.length - a.length).map((str) => str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))\n this.combinedRegex = new RegExp(`(${target.join('|')})`)\n }\n }\n\n update(options: MatchOptions) {\n this.options = options\n this.init()\n }\n\n match(line: string): boolean {\n if (!line) {\n return false\n }\n\n const targetLine = line.trim()\n if (!targetLine.length) {\n return false\n }\n\n return this.options.mode === 'fuzzy' ? this.withFuzzy(targetLine) : this.withExact(targetLine)\n }\n\n private withFuzzy(line: string): boolean {\n if (this.combinedRegex && this.combinedRegex.test(line)) {\n return true\n }\n\n for (let i = 0; i < this.regexRules.length; i++) {\n if (this.regexRules[i].test(line)) return true\n }\n\n return false\n }\n\n private withExact(line: string): boolean {\n const thresholdPercent = Math.max(this.options.exact.check, 0)\n\n const targetMatchCount = Math.ceil((thresholdPercent / 100) * line.length)\n if (targetMatchCount === 0) {\n return true\n }\n\n const matchedChars = new Uint8Array(line.length)\n let matchedCount = 0\n\n for (let i = 0; i < this.stringRules.length; i++) {\n const rule = this.stringRules[i]\n const ruleLen = rule.length\n if (ruleLen === 0) continue\n\n let postion = line.indexOf(rule)\n while (postion !== -1) {\n for (let j = 0; j < ruleLen; j++) {\n if (matchedChars[postion + j] === 0) {\n matchedChars[postion + j] = 1\n matchedCount++\n }\n }\n\n if (matchedCount >= targetMatchCount) {\n return true\n }\n\n postion = line.indexOf(rule, postion + ruleLen)\n }\n }\n\n for (let i = 0; i < this.regexRules.length; i++) {\n const matchResult = line.match(this.regexRules[i])\n if (matchResult && matchResult[0] && matchResult.index !== undefined) {\n const matchStr = matchResult[0]\n const matchLen = matchStr.length\n const pos = matchResult.index\n\n for (let j = 0; j < matchLen; j++) {\n if (matchedChars[pos + j] === 0) {\n matchedChars[pos + j] = 1\n matchedCount++\n }\n }\n\n if (matchedCount >= targetMatchCount) {\n return true\n }\n }\n }\n\n return false\n }\n}\n","import type { DeepPartial } from '@music-lyric-kit/utils'\nimport type { Line } from '@music-lyric-kit/lyric'\nimport type { CleanConfig } from './config'\n\nimport { DEFAULT_CONFIG } from './config'\nimport { DEFAULT_RULES } from './constants'\n\nimport { ConfigManager } from '@music-lyric-kit/utils'\nimport { Matcher } from '@root/utils/match'\n\nimport { ParserPlugin, ParserStage, ParserContext } from '@music-lyric-kit/core'\nimport { LineType } from '@music-lyric-kit/lyric'\n\nexport class CleanPlugin extends ParserPlugin {\n private matcher: Matcher\n\n override config = new ConfigManager<CleanConfig, DeepPartial<CleanConfig>>(DEFAULT_CONFIG)\n\n override get id() {\n return 'TRANSFORM-CLEAN'\n }\n\n override get name() {\n return 'TRANSFORM-CLEAN'\n }\n\n override get stage() {\n return ParserStage.Transform\n }\n\n constructor() {\n super()\n this.matcher = new Matcher(this.config.current, DEFAULT_RULES)\n this.config.on((opt) => {\n this.matcher.update(opt)\n })\n }\n\n override check(ctx: ParserContext) {\n return true\n }\n\n override exec(ctx: ParserContext) {\n const lines = ctx.result.lines\n if (!lines.length) {\n return\n }\n\n const newLines: Line[] = []\n\n for (const line of lines) {\n if (line.type == LineType.Normal) {\n const result = this.matcher.match(line.content.original)\n if (result) {\n continue\n }\n }\n newLines.push(line)\n }\n\n ctx.result.lines = newLines\n }\n}\n\nexport type { CleanConfig }\n","import type { MatchOptions } from '@root/utils/match'\n\nexport interface ExtractCreatorConfig {\n match: MatchOptions\n /**\n * split name\n */\n split: string | RegExp\n /**\n * is replace this line when matched\n * @default true\n */\n replace: boolean\n}\n\nexport const DEFAULT_CREATOR_CONFIG: ExtractCreatorConfig = {\n match: {\n mode: 'exact',\n fuzzy: {},\n exact: {\n check: 50,\n },\n rule: {\n useDefault: true,\n custom: [],\n },\n },\n split: '/',\n replace: true,\n}\n","import type { MatchRule } from '@root/utils/match'\n\nconst CREATOR_RULES_ROLE: MatchRule[] = [\n '演唱',\n '主唱',\n '原唱',\n '翻唱',\n '唱',\n\n 'Vocal',\n 'Vocals',\n 'Lead Vocal',\n 'Singer',\n 'Original Singer',\n 'Cover',\n\n '客串',\n '特邀',\n 'Featuring',\n 'Feat',\n 'Ft',\n\n '和声',\n '和音',\n '伴唱',\n '合声',\n '合音',\n 'Backing Vocals',\n 'Background Vocals',\n 'Chorus',\n 'Harmony',\n 'BGs',\n 'Bvox',\n 'BV',\n\n '童声',\n '男声',\n '女声',\n '人声',\n '腔',\n 'Voice',\n 'Children Voice',\n 'Male Voice',\n 'Female Voice',\n\n '配音',\n '念白',\n '旁白',\n 'CV',\n 'Voice Actor',\n 'Recitation',\n 'Rap',\n 'Rapper',\n\n '说唱',\n '演奏者',\n '乐手',\n '乐师',\n 'Session Musician',\n 'Musician',\n 'Performer',\n 'Player',\n\n '现场乐队',\n '乐队',\n 'Live Band',\n 'Band',\n\n '作词',\n '填词',\n '词',\n 'Lyricist',\n 'Lyrics',\n 'Words',\n 'Lyr',\n\n '作曲',\n '谱曲',\n '曲',\n 'Composer',\n 'Compose',\n 'Music',\n 'Comp',\n\n '编曲',\n '编',\n 'Arranger',\n 'Arrangement',\n 'Arrange',\n 'Arr',\n\n '制作人',\n '制作',\n '单曲制作',\n 'Producer',\n 'Produce',\n 'Prod',\n\n '执行制作人',\n '执制',\n 'Executive Producer',\n 'Exec Producer',\n 'ExProd',\n\n '协力制作人',\n '共同制作',\n '协力',\n 'Co-Producer',\n 'CoProd',\n 'Associate Producer',\n\n '节拍制作',\n '节拍',\n 'Beatmaker',\n 'Beat Maker',\n 'Beat',\n\n '编调',\n '编程',\n 'Programming',\n 'Programmer',\n 'Prog',\n\n '配器',\n '管弦乐编排',\n 'Orchestrator',\n 'Orchestration',\n 'Orch',\n\n '和声编写',\n '和音编写',\n 'Backing Vocals Arranger',\n 'Vocal Arranger',\n 'BV Arranger',\n\n '工程师',\n '工程',\n 'Engineer',\n 'Eng',\n\n '录音师',\n '录音',\n 'Recording Engineer',\n 'Recordist',\n 'Recording',\n 'Rec',\n\n '混音师',\n '混音',\n '分轨',\n '贴混',\n '混',\n 'Mixing Engineer',\n 'Mixer',\n 'Mixing',\n 'Mixed',\n 'Mix',\n\n '母带工程师',\n '母带后期',\n '母带',\n '后期',\n 'Mastering Engineer',\n 'Mastering',\n 'Master',\n 'Mst',\n\n '修音师',\n '修音',\n '调校',\n '调教',\n 'Vocal Editing',\n 'Vocal Tuning',\n 'Pitch Editing',\n 'Tuning',\n\n '人声编辑',\n '音频编辑',\n '剪辑',\n 'Audio Editor',\n 'Vocal Editor',\n 'Vocal Edit',\n 'Edit',\n 'Editor',\n\n '重混音师',\n 'Remixer',\n 'Remix',\n 'Remixed by',\n\n '声音设计师',\n '音效设计',\n '音效',\n 'Sound Designer',\n 'Sound Effects',\n 'SFX Designer',\n 'SFX',\n\n '拟音师',\n '拟音',\n 'Foley Artist',\n 'Foley',\n\n '监制',\n '音乐总监',\n '监',\n 'Supervisor',\n 'Music Director',\n 'MD',\n\n '指挥',\n 'Conductor',\n 'Cond',\n 'A&R',\n\n '艺人与产品',\n '艺人统筹',\n 'Artists and Repertoire',\n\n '录音室经理',\n '录音室',\n '录音棚',\n 'Studio Manager',\n 'Studio',\n\n '助理工程师',\n '助工',\n '助理',\n 'Assistant Engineer',\n 'Assistant',\n 'Asst Eng',\n\n '抄谱员',\n '抄谱',\n 'Copyist',\n\n '扒谱员',\n '扒谱',\n 'Transcriber',\n 'Trans',\n\n '乐谱管理员',\n 'Librarian',\n\n '乐器技师',\n '吉他技师',\n '鼓技师',\n 'Guitar Tech',\n 'Drum Tech',\n 'Instrument Tech',\n\n '音控师',\n '调音师',\n '前台工程师',\n 'FOH Engineer',\n 'Front of House',\n 'Live Sound Engineer',\n 'Sound Mixer',\n\n '监听工程师',\n '监听',\n 'Monitor Engineer',\n\n '舞台监督',\n 'Stage Manager',\n\n '灯光师',\n 'Lighting Designer',\n 'Light Tech',\n\n '企划',\n '策划',\n '项目统筹',\n '统筹',\n '项目',\n 'Planner',\n 'Project Coordinator',\n 'Coordinator',\n\n '出品',\n '发行',\n '发布',\n 'Publisher',\n 'Produced',\n 'Release',\n\n '宣传',\n '推广',\n '宣发',\n '宣推',\n '营销',\n 'Marketing',\n 'Publicity',\n 'Promotion',\n\n '版权',\n 'Copyright',\n 'OP',\n 'SP',\n\n '视觉设计',\n '视觉',\n '设计',\n 'Visual Design',\n 'Visual',\n 'Design',\n\n '封面',\n '海报',\n '插画',\n '曲绘',\n '图绘',\n '映像',\n '封',\n 'Cover',\n 'Illustration',\n 'Image',\n 'Artwork',\n\n '美工',\n '美术',\n 'Graphic Design',\n 'Fine Arts',\n 'Art',\n\n '视频',\n '分镜',\n '脚本',\n '导演',\n 'Video',\n 'PV',\n 'MV',\n 'CG',\n 'Director',\n\n '艺术顾问',\n '艺术',\n '顾问',\n 'Art Consultant',\n 'Consultant',\n\n '题字',\n '文案',\n 'Inscription',\n 'Copywriting',\n\n '支持',\n '鸣谢',\n '特约嘉宾',\n '指导',\n '承办单位',\n '承办',\n '单位',\n '业务',\n 'Special Thanks',\n 'Acknowledgments',\n]\n\nconst CREATOR_RULES_INST: MatchRule[] = [\n '键盘',\n 'Keyboard',\n 'Kybd',\n 'Keys',\n 'Key',\n\n '钢琴',\n 'Piano',\n 'Pno',\n\n '电钢琴',\n 'Electric Piano',\n 'Wurlitzer',\n 'Rhodes',\n 'EP',\n\n '风琴',\n 'Organ',\n 'Org',\n\n '大键琴',\n 'Harpsichord',\n 'Hpschd',\n\n '合成器',\n 'Synthesizer',\n 'Synths',\n 'Synth',\n\n '采样器',\n 'Sampler',\n\n '序列器',\n 'Sequencer',\n\n '电吉他',\n '木吉他',\n '箱琴',\n '吉他',\n 'Electric Guitar',\n 'Acoustic Guitar',\n 'Guitar',\n 'E.Gtr',\n 'A.Gtr',\n 'Gtr',\n\n '电贝斯',\n '低音吉他',\n '贝斯',\n 'Electric Bass',\n 'Bass Guitar',\n 'Bass',\n 'Bss',\n\n '乌德琴',\n 'Oud',\n\n '班卓琴',\n 'Banjo',\n\n '西塔琴',\n 'Sitar',\n\n '鲁特琴',\n 'Lute',\n\n '曼陀林',\n 'Mandolin',\n\n '弦乐',\n 'Strings',\n 'Str',\n\n '小提琴',\n '提琴',\n 'Violin',\n 'Vln',\n\n '中提琴',\n 'Viola',\n 'Vla',\n\n '大提琴',\n 'Cello',\n 'Vc',\n\n '低音提琴',\n 'Double Bass',\n 'Contrabass',\n 'Cb',\n\n '竖琴',\n 'Harp',\n 'Hrp',\n\n '管乐',\n '铜管',\n '木管',\n 'Brass',\n 'Woodwinds',\n 'Winds',\n\n '笛子',\n '长笛',\n 'Flute',\n 'Fl',\n\n '短笛',\n 'Piccolo',\n 'Picc',\n\n '哨笛',\n 'Flageolet',\n 'Flt',\n\n '单簧管',\n '竖笛',\n 'Clarinet',\n 'Cl',\n\n '低音单簧管',\n 'Bass Clarinet',\n 'B.Cl',\n\n '双簧管',\n 'Oboe',\n 'Ob',\n\n '英国管',\n 'English Horn',\n 'E.Hn',\n\n '巴松',\n '大管',\n 'Bassoon',\n 'Bsn',\n\n '萨克斯',\n 'Saxophone',\n 'Alto Sax',\n 'Tenor Sax',\n 'Baritone Sax',\n 'A.Sax',\n 'T.Sax',\n 'B.Sax',\n 'Sax',\n\n '小号',\n 'Trumpet',\n 'Tpt',\n\n '短号',\n 'Cornet',\n 'Cnt',\n\n '长号',\n 'Trombone',\n 'Tbn',\n\n '大号',\n 'Tuba',\n 'Tba',\n\n '圆号',\n 'French Horn',\n 'Horn',\n 'Hn',\n\n '次中音号',\n 'Euphonium',\n 'Euph',\n\n '富鲁格号',\n 'Flugelhorn',\n\n '打击乐',\n 'Percussion',\n 'Perc',\n\n '架子鼓',\n '鼓',\n 'Drum Set',\n 'Drums',\n 'Drum',\n 'Dr',\n\n '定音鼓',\n 'Timpani',\n 'Timp',\n\n '铃鼓',\n 'Tambourine',\n 'Tamb',\n\n '康加鼓',\n 'Conga',\n\n '邦戈鼓',\n 'Bongo',\n\n '钹',\n '镲',\n 'Cymbal',\n\n '锣',\n 'Gong',\n\n '沙锤',\n 'Shaker',\n\n '木琴',\n 'Xylophone',\n 'Xylo',\n\n '马林巴',\n 'Marimba',\n\n '颤音琴',\n 'Vibraphone',\n 'Vibes',\n 'Vib',\n\n '古琴',\n '瑶琴',\n '玉琴',\n 'Guqin',\n\n '古筝',\n 'Guzheng',\n\n '琵琶',\n 'Pipa',\n\n '二胡',\n 'Erhu',\n\n '扬琴',\n 'Yangqin',\n\n '阮',\n '中阮',\n 'Ruan',\n\n '箫',\n '笛萧',\n '洞萧',\n 'Xiao',\n\n '笙',\n 'Sheng',\n\n '唢呐',\n 'Suona',\n\n '巴乌',\n 'Bawu',\n\n '葫芦丝',\n 'Hulusi',\n\n '手风琴',\n 'Accordion',\n\n '口琴',\n 'Harmonica',\n\n '特雷门琴',\n 'Theremin',\n]\n\nexport const DEFAULT_CREATOR_RULES: MatchRule[] = [...CREATOR_RULES_ROLE, ...CREATOR_RULES_INST, 'PGM']\n","export const extractCreator = (line: string): [string, string] | null => {\n if (!line) {\n return null\n }\n\n const enColonIdx = line.indexOf(':')\n const cnColonIdx = line.indexOf(':')\n\n if (enColonIdx === -1 && cnColonIdx === -1) {\n return null\n }\n\n let splitIdx = -1\n if (enColonIdx !== -1 && cnColonIdx !== -1) {\n splitIdx = Math.min(enColonIdx, cnColonIdx)\n } else {\n splitIdx = enColonIdx !== -1 ? enColonIdx : cnColonIdx\n }\n\n const role = line.substring(0, splitIdx).trim()\n const name = line.substring(splitIdx + 1).trim()\n\n if (!role) {\n return null\n }\n\n return [role, name]\n}\n\nexport const splitNameWithRule = (name: string, rule: string | RegExp) => {\n return name\n .split(rule)\n .map((item) => item.trim())\n .filter((item) => !!item)\n}\n","import type { DeepPartial } from '@music-lyric-kit/utils'\nimport type { Line, Meta } from '@music-lyric-kit/lyric'\nimport type { ExtractCreatorConfig } from './config'\n\nimport { DEFAULT_CREATOR_CONFIG } from './config'\nimport { DEFAULT_CREATOR_RULES } from './constants'\n\nimport { ConfigManager, removeTextSpaceAll } from '@music-lyric-kit/utils'\nimport { Matcher } from '@root/utils/match'\n\nimport { ParserPlugin, ParserStage, ParserContext } from '@music-lyric-kit/core'\nimport { LineType, MetaCreator } from '@music-lyric-kit/lyric'\nimport { extractCreator, splitNameWithRule } from './utils'\n\nexport class ExtractCreatorPlugin extends ParserPlugin {\n private matcher: Matcher\n\n override config = new ConfigManager<ExtractCreatorConfig, DeepPartial<ExtractCreatorConfig>>(DEFAULT_CREATOR_CONFIG)\n\n override get id() {\n return 'TRANSFORM-EXTRACT'\n }\n\n override get name() {\n return 'TRANSFORM-EXTRACT'\n }\n\n override get stage() {\n return ParserStage.Transform\n }\n\n constructor() {\n super()\n this.matcher = new Matcher(this.config.current.match, DEFAULT_CREATOR_RULES)\n this.config.on((opt) => {\n this.matcher.update(opt.match)\n })\n }\n\n override check(ctx: ParserContext) {\n return true\n }\n\n override exec(ctx: ParserContext) {\n const lines = ctx.result.lines\n if (!lines.length) {\n return\n }\n\n const newMetas: Meta[] = [...ctx.result.metas]\n const newLines: Line[] = []\n\n for (const line of lines) {\n if (line.type != LineType.Normal) {\n newLines.push(line)\n continue\n }\n\n const target = extractCreator(line.content.original)\n if (!target) {\n newLines.push(line)\n continue\n }\n\n const [role, name] = target\n const result = this.matcher.match(removeTextSpaceAll(role))\n if (!result) {\n newLines.push(line)\n continue\n }\n\n const meta = new MetaCreator()\n meta.content.role = role\n meta.content.name = splitNameWithRule(name, this.config.current.split)\n\n if (!this.config.current.replace) {\n newLines.push(line)\n }\n newMetas.push(meta)\n }\n\n ctx.result.lines = newLines\n ctx.result.metas = newMetas\n }\n}\n\nexport type { ExtractCreatorConfig }\n"],"names":["DEFAULT_CONFIG","DEFAULT_RULES","Matcher","options","defaultRules","raw","rule","target","a","b","str","line","targetLine","i","thresholdPercent","targetMatchCount","matchedChars","matchedCount","ruleLen","postion","j","matchResult","matchLen","pos","CleanPlugin","ParserPlugin","ConfigManager","ParserStage","opt","ctx","lines","newLines","LineType","DEFAULT_CREATOR_CONFIG","CREATOR_RULES_ROLE","CREATOR_RULES_INST","DEFAULT_CREATOR_RULES","extractCreator","enColonIdx","cnColonIdx","splitIdx","role","name","splitNameWithRule","item","ExtractCreatorPlugin","newMetas","removeTextSpaceAll","meta","MetaCreator"],"mappings":"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AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEMC,IAAkC;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AACF,GAEaC,IAAqC,CAAC,GAAGF,GAAoB,GAAGC,GAAoB,KAAK,GCrnBzFE,IAAiB,CAAC1B,MAA0C;AACvE,MAAI,CAACA;AACH,WAAO;AAGT,QAAM2B,IAAa3B,EAAK,QAAQ,GAAG,GAC7B4B,IAAa5B,EAAK,QAAQ,GAAG;AAEnC,MAAI2B,MAAe,MAAMC,MAAe;AACtC,WAAO;AAGT,MAAIC,IAAW;AACf,EAAIF,MAAe,MAAMC,MAAe,KACtCC,IAAW,KAAK,IAAIF,GAAYC,CAAU,IAE1CC,IAAWF,MAAe,KAAKA,IAAaC;AAG9C,QAAME,IAAO9B,EAAK,UAAU,GAAG6B,CAAQ,EAAE,KAAA,GACnCE,IAAO/B,EAAK,UAAU6B,IAAW,CAAC,EAAE,KAAA;AAE1C,SAAKC,IAIE,CAACA,GAAMC,CAAI,IAHT;AAIX,GAEaC,IAAoB,CAACD,GAAcpC,MACvCoC,EACJ,MAAMpC,CAAI,EACV,IAAI,CAACsC,MAASA,EAAK,KAAA,CAAM,EACzB,OAAO,CAACA,MAAS,CAAC,CAACA,CAAI;ACnBrB,MAAMC,UAA6BpB,EAAa;AAAA,EAC7C;AAAA,EAEC,SAAS,IAAIC,EAAuEO,CAAsB;AAAA,EAEnH,IAAa,KAAK;AAChB,WAAO;AAAA,EACT;AAAA,EAEA,IAAa,OAAO;AAClB,WAAO;AAAA,EACT;AAAA,EAEA,IAAa,QAAQ;AACnB,WAAON,EAAY;AAAA,EACrB;AAAA,EAEA,cAAc;AACZ,UAAA,GACA,KAAK,UAAU,IAAIzB,EAAQ,KAAK,OAAO,QAAQ,OAAOkC,CAAqB,GAC3E,KAAK,OAAO,GAAG,CAACR,MAAQ;AACtB,WAAK,QAAQ,OAAOA,EAAI,KAAK;AAAA,IAC/B,CAAC;AAAA,EACH;AAAA,EAES,MAAMC,GAAoB;AACjC,WAAO;AAAA,EACT;AAAA,EAES,KAAKA,GAAoB;AAChC,UAAMC,IAAQD,EAAI,OAAO;AACzB,QAAI,CAACC,EAAM;AACT;AAGF,UAAMgB,IAAmB,CAAC,GAAGjB,EAAI,OAAO,KAAK,GACvCE,IAAmB,CAAA;AAEzB,eAAWpB,KAAQmB,GAAO;AACxB,UAAInB,EAAK,QAAQqB,EAAS,QAAQ;AAChC,QAAAD,EAAS,KAAKpB,CAAI;AAClB;AAAA,MACF;AAEA,YAAMJ,IAAS8B,EAAe1B,EAAK,QAAQ,QAAQ;AACnD,UAAI,CAACJ,GAAQ;AACX,QAAAwB,EAAS,KAAKpB,CAAI;AAClB;AAAA,MACF;AAEA,YAAM,CAAC8B,GAAMC,CAAI,IAAInC;AAErB,UAAI,CADW,KAAK,QAAQ,MAAMwC,EAAmBN,CAAI,CAAC,GAC7C;AACX,QAAAV,EAAS,KAAKpB,CAAI;AAClB;AAAA,MACF;AAEA,YAAMqC,IAAO,IAAIC,EAAA;AACjB,MAAAD,EAAK,QAAQ,OAAOP,GACpBO,EAAK,QAAQ,OAAOL,EAAkBD,GAAM,KAAK,OAAO,QAAQ,KAAK,GAEhE,KAAK,OAAO,QAAQ,WACvBX,EAAS,KAAKpB,CAAI,GAEpBmC,EAAS,KAAKE,CAAI;AAAA,IACpB;AAEA,IAAAnB,EAAI,OAAO,QAAQE,GACnBF,EAAI,OAAO,QAAQiB;AAAA,EACrB;AACF;"}
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@music-lyric-kit/plugin-transform-pure",
3
+ "version": "0.1.0",
4
+ "author": "folltoshe",
5
+ "type": "module",
6
+ "description": "Music Lyric Kit - Transform Pure Plugin",
7
+ "license": "MIT",
8
+ "homepage": "https://github.com/music-lyric/music-lyric-kit-node#readme",
9
+ "bugs": {
10
+ "url": "https://github.com/music-lyric/music-lyric-kit-node/issues"
11
+ },
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "https://github.com/music-lyric/music-lyric-kit-node.git",
15
+ "directory": "plugins/transform-pure"
16
+ },
17
+ "main": "./dist/index.comm.js",
18
+ "module": "./dist/index.ecma.js",
19
+ "types": "./dist/index.ecma.d.ts",
20
+ "exports": {
21
+ ".": {
22
+ "types": "./dist/index.ecma.d.ts",
23
+ "import": "./dist/index.ecma.js",
24
+ "require": "./dist/index.comm.js"
25
+ }
26
+ },
27
+ "files": [
28
+ "dist"
29
+ ],
30
+ "dependencies": {
31
+ "@music-lyric-kit/core": "0.3.1",
32
+ "@music-lyric-kit/utils": "0.3.0",
33
+ "@music-lyric-kit/lyric": "0.2.1"
34
+ },
35
+ "scripts": {
36
+ "build": "vite build"
37
+ }
38
+ }