muggle-string 0.3.0 → 0.3.1

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/out/index.d.ts CHANGED
@@ -3,6 +3,7 @@ export * from './types';
3
3
  export * from './track';
4
4
  export declare function getLength(segments: Segment<any>[]): number;
5
5
  export declare function toString<T extends Segment<any>>(segments: T[]): string;
6
+ export declare function create(source: string): Segment[];
6
7
  export declare function replace<T extends Segment<any>>(segments: T[], pattern: string | RegExp, ...replacers: (T | ((match: string) => T))[]): void;
7
8
  export declare function replaceAll<T extends Segment<any>>(segments: T[], pattern: RegExp, ...replacers: (T | ((match: string) => T))[]): void;
8
9
  export declare function replaceSourceRange<T extends Segment<any>>(segments: T[], source: string | undefined, startOffset: number, endOffset: number, ...newSegments: T[]): boolean;
package/out/index.js CHANGED
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.replaceRange = exports.replaceSourceRange = exports.replaceAll = exports.replace = exports.toString = exports.getLength = void 0;
17
+ exports.replaceRange = exports.replaceSourceRange = exports.replaceAll = exports.replace = exports.create = exports.toString = exports.getLength = void 0;
18
18
  const binarySearch_1 = require("./binarySearch");
19
19
  const track_1 = require("./track");
20
20
  __exportStar(require("./types"), exports);
@@ -31,6 +31,10 @@ function toString(segments) {
31
31
  return segments.map(s => typeof s === 'string' ? s : s[0]).join('');
32
32
  }
33
33
  exports.toString = toString;
34
+ function create(source) {
35
+ return [[source, undefined, 0]];
36
+ }
37
+ exports.create = create;
34
38
  function replace(segments, pattern, ...replacers) {
35
39
  const str = toString(segments);
36
40
  const match = str.match(pattern);
package/out/track.d.ts CHANGED
@@ -2,4 +2,4 @@ import { Segment, StackNode } from "./types";
2
2
  export declare function setTracking(value: boolean): void;
3
3
  export declare function offsetStack(): void;
4
4
  export declare function resetOffsetStack(): void;
5
- export declare function track<T extends Segment<any>[]>(segments: T): [T, StackNode[]];
5
+ export declare function track<T extends Segment<any>[]>(segments: T, stacks?: StackNode[]): [T, StackNode[]];
package/out/track.js CHANGED
@@ -15,8 +15,7 @@ function resetOffsetStack() {
15
15
  stackOffset--;
16
16
  }
17
17
  exports.resetOffsetStack = resetOffsetStack;
18
- function track(segments) {
19
- const stacks = [];
18
+ function track(segments, stacks = []) {
20
19
  return [
21
20
  new Proxy(segments, {
22
21
  get(target, prop, receiver) {
@@ -77,29 +76,36 @@ function track(segments) {
77
76
  if (deleteCount === undefined) {
78
77
  deleteCount = segments.length - start;
79
78
  }
80
- let remainDeleteCount = deleteCount;
81
- let stacksDeleteStart;
82
- let stacksDeleteLength = 0;
83
- let stackEnd = 0;
79
+ let _stackStart = 0;
80
+ let operateIndex;
84
81
  for (let i = 0; i < stacks.length; i++) {
85
82
  const stack = stacks[i];
86
- const stackStart = stackEnd;
87
- stackEnd = stackStart + stack.length;
88
- while (start >= stackStart && start < stackEnd && remainDeleteCount && stack.length) {
89
- stack.length--;
90
- remainDeleteCount--;
91
- stackEnd--;
83
+ const stackStart = _stackStart;
84
+ const stackEnd = stackStart + stack.length;
85
+ _stackStart = stackEnd;
86
+ if (start >= stackStart) {
87
+ operateIndex = i + 1;
88
+ const originalLength = stack.length;
89
+ stack.length = start - stackStart;
90
+ stacks.splice(operateIndex, 0, { stack: stack.stack, length: originalLength - stack.length });
91
+ break;
92
92
  }
93
- if (!stack.length) {
94
- stacksDeleteStart !== null && stacksDeleteStart !== void 0 ? stacksDeleteStart : (stacksDeleteStart = i);
95
- stacksDeleteLength++;
93
+ }
94
+ if (operateIndex === undefined) {
95
+ throw new Error('Invalid splice operation');
96
+ }
97
+ let _deleteCount = deleteCount;
98
+ for (let i = operateIndex; i < stacks.length; i++) {
99
+ const stack = stacks[i];
100
+ while (_deleteCount > 0 && stack.length > 0) {
101
+ stack.length--;
102
+ _deleteCount--;
96
103
  }
97
- if (remainDeleteCount <= 0)
104
+ if (_deleteCount === 0) {
98
105
  break;
106
+ }
99
107
  }
100
- if (stacksDeleteStart !== undefined) {
101
- stacks.splice(stacksDeleteStart, stacksDeleteLength);
102
- }
108
+ stacks.splice(operateIndex, 0, { stack: getStack(), length: items.length });
103
109
  return segments.splice(start, deleteCount, ...items);
104
110
  }
105
111
  function sort(compareFn) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "muggle-string",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "main": "out/index.js",
5
5
  "license": "MIT",
6
6
  "files": [