fretted-strings
Advanced tools
+113
| "use strict"; | ||
| var __defProp = Object.defineProperty; | ||
| var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | ||
| var __getOwnPropNames = Object.getOwnPropertyNames; | ||
| var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
| var __export = (target, all) => { | ||
| for (var name in all) | ||
| __defProp(target, name, { get: all[name], enumerable: true }); | ||
| }; | ||
| var __copyProps = (to, from, except, desc) => { | ||
| if (from && typeof from === "object" || typeof from === "function") { | ||
| for (let key of __getOwnPropNames(from)) | ||
| if (!__hasOwnProp.call(to, key) && key !== except) | ||
| __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); | ||
| } | ||
| return to; | ||
| }; | ||
| var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); | ||
| // src/index.ts | ||
| var src_exports = {}; | ||
| __export(src_exports, { | ||
| createExtractFn: () => createExtractFn, | ||
| default: () => src_default, | ||
| extract: () => extract | ||
| }); | ||
| module.exports = __toCommonJS(src_exports); | ||
| // src/position-converter.ts | ||
| function location2pos(content, location) { | ||
| let il = 0, ic = 0; | ||
| for (let i = 0; i < content.length; i++) { | ||
| const cc = content[i]; | ||
| if (il === location.line) { | ||
| if (ic === location.character) { | ||
| return i; | ||
| } | ||
| } | ||
| if (cc === "\n") { | ||
| ic = 0; | ||
| il++; | ||
| } else { | ||
| ic++; | ||
| } | ||
| } | ||
| return content.length; | ||
| } | ||
| // src/index.ts | ||
| function getCols(line, pre = 0) { | ||
| const idx = line.indexOf("^"); | ||
| if (idx === -1) { | ||
| return []; | ||
| } | ||
| return [idx + pre, ...getCols(line.slice(idx + 1), pre + idx + 1)]; | ||
| } | ||
| var DEFAULT_TAG_START = "%%%"; | ||
| var DEFAULT_TAG_END = "%%%"; | ||
| function createExtractFn(tagStart, tagEnd) { | ||
| const extract2 = (content) => { | ||
| const lines = content.split("\n"); | ||
| const actualLines = []; | ||
| const markInfos = []; | ||
| for (let i = 0; i < lines.length; ++i) { | ||
| const line = lines[i]; | ||
| const trimmed = line.trim(); | ||
| if (!trimmed.startsWith(tagStart) || !trimmed.endsWith(tagEnd)) { | ||
| actualLines.push(line); | ||
| continue; | ||
| } | ||
| const cols = getCols(line); | ||
| ++i; | ||
| if (!lines[i]) | ||
| break; | ||
| const trimmedNameLine = lines[i].trim(); | ||
| if (!trimmedNameLine.startsWith(tagStart) || !trimmedNameLine.endsWith(tagEnd)) { | ||
| continue; | ||
| } | ||
| const names = trimmedNameLine.slice(tagStart.length, trimmedNameLine.length - tagEnd.length).replace("\\", " ").trim().split(/\s+/); | ||
| for (let j = 0; j < Math.min(cols.length, names.length); ++j) { | ||
| markInfos.push({ | ||
| line: actualLines.length - 1, | ||
| col: cols[j], | ||
| name: names[j] | ||
| }); | ||
| } | ||
| } | ||
| const actualContent = actualLines.join("\n"); | ||
| const markers = markInfos.reduce( | ||
| (acc, { name, line, col: character }) => { | ||
| return { | ||
| ...acc, | ||
| [name]: { | ||
| line, | ||
| character, | ||
| pos: location2pos(actualContent, { line, character }) | ||
| } | ||
| }; | ||
| }, | ||
| {} | ||
| ); | ||
| markers; | ||
| return [actualContent, markers]; | ||
| }; | ||
| return extract2; | ||
| } | ||
| var extract = createExtractFn(DEFAULT_TAG_START, DEFAULT_TAG_END); | ||
| var src_default = extract; | ||
| // Annotate the CommonJS export names for ESM import in node: | ||
| 0 && (module.exports = { | ||
| createExtractFn, | ||
| extract | ||
| }); |
| type Fret = { | ||
| line: number; | ||
| character: number; | ||
| pos: number; | ||
| }; | ||
| type Frets<TKey extends string = string> = Record<TKey, Fret>; | ||
| type SplitByWS<TContent extends string, TAcc extends string[] = []> = TContent extends ` ${infer TRest}` ? SplitByWS<TRest, TAcc> : TContent extends `${infer TRest} ` ? SplitByWS<TRest, TAcc> : TContent extends `${infer THead} ${infer TRest}` ? SplitByWS<TRest, THead extends '^' ? TAcc : [...TAcc, THead]> : TContent extends '^' ? TAcc : [...TAcc, TContent]; | ||
| type ExtractKeys<TLine extends string, TTagStart extends string, TTagEnd extends string> = TLine extends ` ${infer TRest}` ? ExtractKeys<TRest, TTagStart, TTagEnd> : TLine extends `${infer TRest} ` ? ExtractKeys<TRest, TTagStart, TTagEnd> : TLine extends `${TTagStart} ${infer TBody} ${TTagEnd}` ? SplitByWS<TBody> : []; | ||
| type ToLines<TContent extends string, TTagStart extends string, TTagEnd extends string, TAcc extends string[] = []> = TContent extends `${infer THead}\n${infer TRest}` ? ToLines<TRest, TTagStart, TTagEnd, [...TAcc, ...ExtractKeys<THead, TTagStart, TTagEnd>]> : TContent extends `\n${infer TRest}` ? ToLines<TRest, TTagStart, TTagEnd, TAcc> : TContent extends `${infer TRest}\n` ? ToLines<TRest, TTagStart, TTagEnd, TAcc> : [...TAcc, ...ExtractKeys<TContent, TTagStart, TTagEnd>]; | ||
| type FretsKeys<TContent extends string, TTagStart extends string, TTagEnd extends string> = string extends TContent ? string : string extends TTagStart ? string : string extends TTagEnd ? string : ToLines<TContent, TTagStart, TTagEnd>[number]; | ||
| declare function createExtractFn<TTagStart extends string, TTagEnd extends string>(tagStart: TTagStart, tagEnd: TTagEnd): <TContent extends string>(content: TContent) => readonly [string, Frets<FretsKeys<TContent, TTagStart, TTagEnd>>]; | ||
| declare const extract: <TContent extends string>(content: TContent) => readonly [string, Frets<FretsKeys<TContent, "%%%", "%%%">>]; | ||
| export { type Fret, type Frets, createExtractFn, extract as default, extract }; |
| type Fret = { | ||
| line: number; | ||
| character: number; | ||
| pos: number; | ||
| }; | ||
| type Frets<TKey extends string = string> = Record<TKey, Fret>; | ||
| type SplitByWS<TContent extends string, TAcc extends string[] = []> = TContent extends ` ${infer TRest}` ? SplitByWS<TRest, TAcc> : TContent extends `${infer TRest} ` ? SplitByWS<TRest, TAcc> : TContent extends `${infer THead} ${infer TRest}` ? SplitByWS<TRest, THead extends '^' ? TAcc : [...TAcc, THead]> : TContent extends '^' ? TAcc : [...TAcc, TContent]; | ||
| type ExtractKeys<TLine extends string, TTagStart extends string, TTagEnd extends string> = TLine extends ` ${infer TRest}` ? ExtractKeys<TRest, TTagStart, TTagEnd> : TLine extends `${infer TRest} ` ? ExtractKeys<TRest, TTagStart, TTagEnd> : TLine extends `${TTagStart} ${infer TBody} ${TTagEnd}` ? SplitByWS<TBody> : []; | ||
| type ToLines<TContent extends string, TTagStart extends string, TTagEnd extends string, TAcc extends string[] = []> = TContent extends `${infer THead}\n${infer TRest}` ? ToLines<TRest, TTagStart, TTagEnd, [...TAcc, ...ExtractKeys<THead, TTagStart, TTagEnd>]> : TContent extends `\n${infer TRest}` ? ToLines<TRest, TTagStart, TTagEnd, TAcc> : TContent extends `${infer TRest}\n` ? ToLines<TRest, TTagStart, TTagEnd, TAcc> : [...TAcc, ...ExtractKeys<TContent, TTagStart, TTagEnd>]; | ||
| type FretsKeys<TContent extends string, TTagStart extends string, TTagEnd extends string> = string extends TContent ? string : string extends TTagStart ? string : string extends TTagEnd ? string : ToLines<TContent, TTagStart, TTagEnd>[number]; | ||
| declare function createExtractFn<TTagStart extends string, TTagEnd extends string>(tagStart: TTagStart, tagEnd: TTagEnd): <TContent extends string>(content: TContent) => readonly [string, Frets<FretsKeys<TContent, TTagStart, TTagEnd>>]; | ||
| declare const extract: <TContent extends string>(content: TContent) => readonly [string, Frets<FretsKeys<TContent, "%%%", "%%%">>]; | ||
| export { type Fret, type Frets, createExtractFn, extract as default, extract }; |
| // src/position-converter.ts | ||
| function location2pos(content, location) { | ||
| let il = 0, ic = 0; | ||
| for (let i = 0; i < content.length; i++) { | ||
| const cc = content[i]; | ||
| if (il === location.line) { | ||
| if (ic === location.character) { | ||
| return i; | ||
| } | ||
| } | ||
| if (cc === "\n") { | ||
| ic = 0; | ||
| il++; | ||
| } else { | ||
| ic++; | ||
| } | ||
| } | ||
| return content.length; | ||
| } | ||
| // src/index.ts | ||
| function getCols(line, pre = 0) { | ||
| const idx = line.indexOf("^"); | ||
| if (idx === -1) { | ||
| return []; | ||
| } | ||
| return [idx + pre, ...getCols(line.slice(idx + 1), pre + idx + 1)]; | ||
| } | ||
| var DEFAULT_TAG_START = "%%%"; | ||
| var DEFAULT_TAG_END = "%%%"; | ||
| function createExtractFn(tagStart, tagEnd) { | ||
| const extract2 = (content) => { | ||
| const lines = content.split("\n"); | ||
| const actualLines = []; | ||
| const markInfos = []; | ||
| for (let i = 0; i < lines.length; ++i) { | ||
| const line = lines[i]; | ||
| const trimmed = line.trim(); | ||
| if (!trimmed.startsWith(tagStart) || !trimmed.endsWith(tagEnd)) { | ||
| actualLines.push(line); | ||
| continue; | ||
| } | ||
| const cols = getCols(line); | ||
| ++i; | ||
| if (!lines[i]) | ||
| break; | ||
| const trimmedNameLine = lines[i].trim(); | ||
| if (!trimmedNameLine.startsWith(tagStart) || !trimmedNameLine.endsWith(tagEnd)) { | ||
| continue; | ||
| } | ||
| const names = trimmedNameLine.slice(tagStart.length, trimmedNameLine.length - tagEnd.length).replace("\\", " ").trim().split(/\s+/); | ||
| for (let j = 0; j < Math.min(cols.length, names.length); ++j) { | ||
| markInfos.push({ | ||
| line: actualLines.length - 1, | ||
| col: cols[j], | ||
| name: names[j] | ||
| }); | ||
| } | ||
| } | ||
| const actualContent = actualLines.join("\n"); | ||
| const markers = markInfos.reduce( | ||
| (acc, { name, line, col: character }) => { | ||
| return { | ||
| ...acc, | ||
| [name]: { | ||
| line, | ||
| character, | ||
| pos: location2pos(actualContent, { line, character }) | ||
| } | ||
| }; | ||
| }, | ||
| {} | ||
| ); | ||
| markers; | ||
| return [actualContent, markers]; | ||
| }; | ||
| return extract2; | ||
| } | ||
| var extract = createExtractFn(DEFAULT_TAG_START, DEFAULT_TAG_END); | ||
| var src_default = extract; | ||
| export { | ||
| createExtractFn, | ||
| src_default as default, | ||
| extract | ||
| }; |
+32
-54
| { | ||
| "name": "fretted-strings", | ||
| "version": "1.0.1", | ||
| "version": "2.0.0-alpha.0", | ||
| "description": "Mark on your strings and get it's position", | ||
| "main": "lib/index.js", | ||
| "types": "lib/index.d.ts", | ||
| "type": "module", | ||
| "main": "dist/index.cjs", | ||
| "types": "dist/index.d.ts", | ||
| "scripts": { | ||
| "test": "yarn format:check && yarn lint && yarn jest", | ||
| "clean": "rimraf lib e2e/*.log", | ||
| "compile": "tsc -p .", | ||
| "lint": "eslint \"src/**/*.{ts,tsx}\"", | ||
| "jest": "jest", | ||
| "prettier": "prettier \"*.js\" \"*.md\" \"*.json\" \"*.yml\" \"src/**/*\"", | ||
| "format": "yarn prettier --write", | ||
| "format:check": "yarn prettier --check" | ||
| "prepare": "husky", | ||
| "clean": "rimraf -g dist", | ||
| "build": "tsup", | ||
| "lint": "npm run format:check && tsc", | ||
| "prettier": "prettier .", | ||
| "format": "npm run prettier -- --write", | ||
| "format:check": "npm run prettier -- --check", | ||
| "test": "jest" | ||
| }, | ||
| "files": [ | ||
| "dist" | ||
| ], | ||
| "exports": { | ||
| ".": { | ||
| "import": "./dist/index.js", | ||
| "require": "./dist/index.cjs", | ||
| "default": "./dist/index.js" | ||
| } | ||
| }, | ||
| "repository": { | ||
@@ -31,46 +42,13 @@ "type": "git", | ||
| "devDependencies": { | ||
| "@types/jest": "^25.1.3", | ||
| "@types/node": "^13.7.7", | ||
| "@typescript-eslint/eslint-plugin": "^2.13.0", | ||
| "@typescript-eslint/parser": "^2.13.0", | ||
| "eslint": "^6.8.0", | ||
| "eslint-config-prettier": "^6.8.0", | ||
| "husky": "^4.0.2", | ||
| "jest": "^25.1.0", | ||
| "prettier": "^1.19.1", | ||
| "pretty-quick": "^2.0.1", | ||
| "ts-jest": "^25.2.1", | ||
| "typescript": "^3.8.3", | ||
| "typescript-eslint-language-service": "^2.0.3" | ||
| }, | ||
| "husky": { | ||
| "hooks": { | ||
| "pre-commit": "pretty-quick --staged" | ||
| } | ||
| }, | ||
| "jest": { | ||
| "globals": { | ||
| "ts-jest": { | ||
| "diagnostics": false | ||
| } | ||
| }, | ||
| "transform": { | ||
| "^.+\\.ts$": "ts-jest" | ||
| }, | ||
| "testRegex": "(src/.*\\.test)\\.ts$", | ||
| "testPathIgnorePatterns": [ | ||
| "/node_modules/", | ||
| "\\.d\\.ts$", | ||
| "lib/.*" | ||
| ], | ||
| "collectCoverageFrom": [ | ||
| "src/**/*.ts", | ||
| "!**/testing/**" | ||
| ], | ||
| "moduleFileExtensions": [ | ||
| "js", | ||
| "ts", | ||
| "json" | ||
| ] | ||
| "@types/jest": "29.5.12", | ||
| "@types/node": "20.12.2", | ||
| "husky": "9.0.11", | ||
| "jest": "^29.7.0", | ||
| "prettier": "3.2.5", | ||
| "pretty-quick": "4.0.0", | ||
| "rimraf": "5.0.5", | ||
| "ts-jest": "29.1.2", | ||
| "tsup": "8.0.2", | ||
| "typescript": "5.4.3" | ||
| } | ||
| } |
+9
-41
@@ -15,7 +15,6 @@ # fretted-strings | ||
| ```ts | ||
| const assert = require('assert'); | ||
| const { mark } = require('fretted-strings'); | ||
| import assert from 'node:assert'; | ||
| import { extract } from 'fretted-strings'; | ||
| const frets = {}; | ||
| const content = mark( | ||
| const [content, frets] = extract( | ||
| ` | ||
@@ -26,6 +25,5 @@ hogehoge | ||
| fooo`, | ||
| frets, | ||
| ); | ||
| // Function `mark` returns a string which is removed lines enclosed by '%%%' tags from the parameter. | ||
| // The 1st value of the tuple is a string which is removed lines enclosed by '%%%' tags from the parameter. | ||
| assert.equal( | ||
@@ -38,4 +36,4 @@ content, | ||
| // And this function assigns specified location whose name is represented | ||
| // as identifier under the `^` character to 2nd parameter. | ||
| // The 2nd value of the tuple is an object whose value represents location corresponding to "^" character. | ||
| // And names under "^" character are available to use as keys of the object. | ||
| assert.equal(frets.p1.pos, 7); | ||
@@ -53,12 +51,7 @@ assert.equal(frets.p1.line, 1); | ||
| ```ts | ||
| const { mark } = require('fretted-strings'); | ||
| import { createExtractFn } from 'fretted-strings'; | ||
| setOptions({ | ||
| tagStart: '<!--%%', | ||
| tagEnd: '%%-->', | ||
| }); | ||
| const extract = createExtractFn('<!--%%', '%%-->'); | ||
| const frets = {}; | ||
| mark( | ||
| const [content, frets] = extract( | ||
| ` | ||
@@ -71,32 +64,7 @@ <html> | ||
| `, | ||
| frets, | ||
| ); | ||
| ``` | ||
| Or | ||
| ```ts | ||
| const { mark } = require('fretted-strings'); | ||
| const marker = new FretsMarker({ | ||
| tagStart: '<!--%%', | ||
| tagEnd: '%%-->', | ||
| }); | ||
| const frets = {}; | ||
| marker.mark( | ||
| ` | ||
| <html> | ||
| <div>hogehoge</div> | ||
| <!--%% ^ %%--> | ||
| <!--%% p %%--> | ||
| </html> | ||
| `, | ||
| frets, | ||
| ); | ||
| ``` | ||
| ## LICENSE | ||
| MIT |
Sorry, the diff of this file is not supported yet
| export declare type Fret = { | ||
| line: number; | ||
| character: number; | ||
| pos: number; | ||
| }; | ||
| export declare type Frets = { | ||
| [key: string]: Fret; | ||
| }; | ||
| export declare type FretsMarkerOptions = { | ||
| tagStart?: string; | ||
| tagEnd?: string; | ||
| }; | ||
| export declare class FretsMarker { | ||
| private _opt; | ||
| constructor(options?: FretsMarkerOptions); | ||
| mark(content: string, frets: Frets): string; | ||
| } | ||
| export declare function setOptions(options: FretsMarkerOptions): void; | ||
| export declare function mark(content: string, frets: Frets): string; | ||
| export default mark; |
-75
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| const position_converter_1 = require("./position-converter"); | ||
| function getCols(line, pre = 0) { | ||
| const idx = line.indexOf('^'); | ||
| if (idx === -1) { | ||
| return []; | ||
| } | ||
| return [idx + pre, ...getCols(line.slice(idx + 1), pre + idx + 1)]; | ||
| } | ||
| const DEFAULT_TAG_START = '%%%'; | ||
| const DEFAULT_TAG_END = '%%%'; | ||
| let defaultOpts = { | ||
| tagStart: DEFAULT_TAG_START, | ||
| tagEnd: DEFAULT_TAG_END, | ||
| }; | ||
| class FretsMarker { | ||
| constructor(options = {}) { | ||
| this._opt = Object.assign({ tagStart: DEFAULT_TAG_START, tagEnd: DEFAULT_TAG_END }, options); | ||
| } | ||
| mark(content, frets) { | ||
| const lines = content.split('\n'); | ||
| const actualLines = []; | ||
| const markInfos = []; | ||
| for (let i = 0; i < lines.length; ++i) { | ||
| const line = lines[i]; | ||
| const trimmed = line.trim(); | ||
| if (!trimmed.startsWith(this._opt.tagStart) || !trimmed.endsWith(this._opt.tagEnd)) { | ||
| actualLines.push(line); | ||
| continue; | ||
| } | ||
| const cols = getCols(line); | ||
| ++i; | ||
| if (!lines[i]) | ||
| break; | ||
| const trimmedNameLine = lines[i].trim(); | ||
| if (!trimmedNameLine.startsWith(this._opt.tagStart) || !trimmedNameLine.endsWith(this._opt.tagEnd)) { | ||
| continue; | ||
| } | ||
| const names = trimmedNameLine | ||
| .slice(this._opt.tagStart.length, trimmedNameLine.length - this._opt.tagEnd.length) | ||
| .replace('\\', ' ') | ||
| .trim() | ||
| .split(/\s+/); | ||
| for (let j = 0; j < Math.min(cols.length, names.length); ++j) { | ||
| markInfos.push({ | ||
| line: actualLines.length - 1, | ||
| col: cols[j], | ||
| name: names[j], | ||
| }); | ||
| } | ||
| } | ||
| const actualContent = actualLines.join('\n'); | ||
| const markers = markInfos.reduce((acc, { name, line, col: character }) => { | ||
| return Object.assign(Object.assign({}, acc), { [name]: { | ||
| line, | ||
| character, | ||
| pos: position_converter_1.location2pos(actualContent, { line, character }), | ||
| } }); | ||
| }, {}); | ||
| Object.assign(frets, markers); | ||
| return actualContent; | ||
| } | ||
| } | ||
| exports.FretsMarker = FretsMarker; | ||
| function setOptions(options) { | ||
| defaultOpts = Object.assign(Object.assign({}, defaultOpts), options); | ||
| } | ||
| exports.setOptions = setOptions; | ||
| function mark(content, frets) { | ||
| return new FretsMarker(defaultOpts).mark(content, frets); | ||
| } | ||
| exports.mark = mark; | ||
| exports.default = mark; | ||
| //# sourceMappingURL=index.js.map |
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,6DAAoD;AAEpD,SAAS,OAAO,CAAC,IAAY,EAAE,GAAG,GAAG,CAAC;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;QACd,OAAO,EAAE,CAAC;KACX;IACD,OAAO,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACrE,CAAC;AAYD,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAChC,MAAM,eAAe,GAAG,KAAK,CAAC;AAO9B,IAAI,WAAW,GAAG;IAChB,QAAQ,EAAE,iBAAiB;IAC3B,MAAM,EAAE,eAAe;CACxB,CAAC;AAEF,MAAa,WAAW;IAEtB,YAAY,UAA8B,EAAE;QAC1C,IAAI,CAAC,IAAI,mBACP,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,eAAe,IACpB,OAAO,CACX,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,KAAY;QAChC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,WAAW,GAAG,EAAc,CAAC;QACnC,MAAM,SAAS,GAAG,EAAmD,CAAC;QACtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBAClF,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvB,SAAS;aACV;YACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAC3B,EAAE,CAAC,CAAC;YACJ,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAAE,MAAM;YACrB,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBAClG,SAAS;aACV;YACD,MAAM,KAAK,GAAG,eAAe;iBAC1B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;iBAClF,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;iBAClB,IAAI,EAAE;iBACN,KAAK,CAAC,KAAK,CAAC,CAAC;YAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE;gBAC5D,SAAS,CAAC,IAAI,CAAC;oBACb,IAAI,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC;oBAC5B,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;oBACZ,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;iBACf,CAAC,CAAC;aACJ;SACF;QACD,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE;YACvE,uCACK,GAAG,KACN,CAAC,IAAI,CAAC,EAAE;oBACN,IAAI;oBACJ,SAAS;oBACT,GAAG,EAAE,iCAAY,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;iBACtD,IACD;QACJ,CAAC,EAAE,EAAW,CAAC,CAAC;QAChB,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9B,OAAO,aAAa,CAAC;IACvB,CAAC;CACF;AAvDD,kCAuDC;AAED,SAAgB,UAAU,CAAC,OAA2B;IACpD,WAAW,mCACN,WAAW,GACX,OAAO,CACX,CAAC;AACJ,CAAC;AALD,gCAKC;AAED,SAAgB,IAAI,CAAC,OAAe,EAAE,KAAY;IAChD,OAAO,IAAI,WAAW,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC3D,CAAC;AAFD,oBAEC;AAED,kBAAe,IAAI,CAAC"} |
| export declare function pos2location(content: string, pos: number): { | ||
| line: number; | ||
| character: number; | ||
| }; | ||
| export declare function location2pos(content: string, location: { | ||
| line: number; | ||
| character: number; | ||
| }): number; |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| function pos2location(content, pos) { | ||
| let l = 0, c = 0; | ||
| for (let i = 0; i < content.length && i < pos; i++) { | ||
| const cc = content[i]; | ||
| if (cc === '\n') { | ||
| c = 0; | ||
| l++; | ||
| } | ||
| else { | ||
| c++; | ||
| } | ||
| } | ||
| return { line: l, character: c }; | ||
| } | ||
| exports.pos2location = pos2location; | ||
| function location2pos(content, location) { | ||
| let il = 0, ic = 0; | ||
| for (let i = 0; i < content.length; i++) { | ||
| const cc = content[i]; | ||
| if (il === location.line) { | ||
| if (ic === location.character) { | ||
| return i; | ||
| } | ||
| } | ||
| if (cc === '\n') { | ||
| ic = 0; | ||
| il++; | ||
| } | ||
| else { | ||
| ic++; | ||
| } | ||
| } | ||
| return content.length; | ||
| } | ||
| exports.location2pos = location2pos; | ||
| //# sourceMappingURL=position-converter.js.map |
| {"version":3,"file":"position-converter.js","sourceRoot":"","sources":["../src/position-converter.ts"],"names":[],"mappings":";;AAAA,SAAgB,YAAY,CAAC,OAAe,EAAE,GAAW;IACvD,IAAI,CAAC,GAAG,CAAC,EACP,CAAC,GAAG,CAAC,CAAC;IACR,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;QAClD,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,CAAC,GAAG,CAAC,CAAC;YACN,CAAC,EAAE,CAAC;SACL;aAAM;YACL,CAAC,EAAE,CAAC;SACL;KACF;IACD,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;AACnC,CAAC;AAbD,oCAaC;AAED,SAAgB,YAAY,CAAC,OAAe,EAAE,QAA6C;IACzF,IAAI,EAAE,GAAG,CAAC,EACR,EAAE,GAAG,CAAC,CAAC;IACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACvC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,EAAE,KAAK,QAAQ,CAAC,IAAI,EAAE;YACxB,IAAI,EAAE,KAAK,QAAQ,CAAC,SAAS,EAAE;gBAC7B,OAAO,CAAC,CAAC;aACV;SACF;QACD,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,EAAE,GAAG,CAAC,CAAC;YACP,EAAE,EAAE,CAAC;SACN;aAAM;YACL,EAAE,EAAE,CAAC;SACN;KACF;IACD,OAAO,OAAO,CAAC,MAAM,CAAC;AACxB,CAAC;AAlBD,oCAkBC"} |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
13268
2.78%10
-23.08%210
51.08%Yes
NaN7
-30%1
Infinity%66
-32.65%1
Infinity%