Push current progress so I can work on my laptop.

This commit is contained in:
Joshua Bemenderfer
2023-02-05 07:44:11 -05:00
parent 94767772b4
commit 657c95a4c1
28 changed files with 2372 additions and 3468 deletions

View File

@@ -1 +1 @@
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const i=require("./parser.cjs");function f(r,c=" "){const e=i.createLineData("",c);let n=!1;async function o(t=-1){if(n)n=!1;else{const a=await r.next();if(a===null)return!1;e.line=a,i.parseLine(e)}return l()<=t?(n=!0,!1):!0}const l=()=>e.level,u=(t=e.offsetHead)=>e.line.slice(t),s=()=>e.line.slice(e.offsetHead,e.offsetTail);return{next:o,level:l,line:u,head:s,tail:()=>e.line.slice(e.offsetTail),match:t=>t===s()}}exports.useDocument=f;
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const i=require("./parser.cjs");function f(r,c=" "){const e=i.createLineData("",c);let n=!1;async function o(t=-1){if(n)n=!1;else{const a=await r();if(a==null)return!1;e.line=a,i.parseLine(e)}return l()<=t?(n=!0,!1):!0}const l=()=>e.level,u=(t=e.offsetHead)=>e.line.slice(t),s=()=>e.line.slice(e.offsetHead,e.offsetTail);return{next:o,level:l,line:u,head:s,tail:()=>e.line.slice(e.offsetTail),match:t=>t===s()}}exports.useDocument=f;

View File

@@ -6,8 +6,8 @@ function h(s, f = " ") {
if (n)
n = !1;
else {
const i = await s.next();
if (i === null)
const i = await s();
if (i == null)
return !1;
e.line = i, r(e);
}

View File

@@ -1 +1 @@
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});function t(e="",r=" "){return{line:e,indent:r,level:0,offsetHead:0,offsetTail:0}}function f(e){if(typeof e!="object"||!e||typeof e.level!="number")throw new Error("'lineData' must be an object with 'line' string, and 'type' and 'level' integer properties");if(typeof e.indent!="string"||e.indent.length===0||e.indent.length>1)throw new Error("'lineData.indent' must be a single-character string");if(typeof e.line!="string")throw new Error("'lineData.line' must be a string");let r=0;if(!e.line.length)e.level=e.level,e.offsetHead=0,e.offsetTail=0;else{for(;e.line[r]===e.indent&&r<=e.level+1;)++r;for(e.level=r,e.offsetHead=r,e.offsetTail=r;e.line[e.offsetTail]&&e.line[e.offsetTail]!==" ";)++e.offsetTail}return e}exports.createLineData=t;exports.parseLine=f;
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});function t(e="",r=" "){return{line:e,indent:r,level:0,offsetHead:0,offsetTail:0}}function f(e){if(typeof e!="object"||!e||typeof e.level!="number")throw new Error("'lineData' must be an object with string line and numeric level properties");if(typeof e.indent!="string"||e.indent.length===0||e.indent.length>1)throw new Error("'lineData.indent' must be a single-character string");if(typeof e.line!="string")throw new Error("'lineData.line' must be a string");let r=0;if(!e.line.length)e.level=e.level,e.offsetHead=0,e.offsetTail=0;else{for(;e.line[r]===e.indent&&r<=e.level+1;)++r;for(e.level=r,e.offsetHead=r,e.offsetTail=r;e.line[e.offsetTail]&&e.line[e.offsetTail]!==" ";)++e.offsetTail}return e}exports.createLineData=t;exports.parseLine=f;

View File

@@ -1,9 +1,9 @@
function f(e = "", r = " ") {
return { line: e, indent: r, level: 0, offsetHead: 0, offsetTail: 0 };
}
function t(e) {
function o(e) {
if (typeof e != "object" || !e || typeof e.level != "number")
throw new Error("'lineData' must be an object with 'line' string, and 'type' and 'level' integer properties");
throw new Error("'lineData' must be an object with string line and numeric level properties");
if (typeof e.indent != "string" || e.indent.length === 0 || e.indent.length > 1)
throw new Error("'lineData.indent' must be a single-character string");
if (typeof e.line != "string")
@@ -21,5 +21,5 @@ function t(e) {
}
export {
f as createLineData,
t as parseLine
o as parseLine
};

View File

@@ -1,2 +1,2 @@
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});function i(r,n=0){const t=Array.isArray(r)?r:r.split(`
`),e={index:n-1,next:()=>(e.index++,e.index>=t.length?null:t[e.index]),clone:l=>i(r,l==null?n:e.index)};return e}exports.createStringReader=i;
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});function n(r,e=0){const t=Array.isArray(r)?r:r.split(`
`);return e--,()=>(e++,e>=t.length?null:t[e])}exports.createStringReader=n;

View File

@@ -1,12 +1,8 @@
function l(e, r = 0) {
const t = Array.isArray(e) ? e : e.split(`
`), n = {
index: r - 1,
next: () => (n.index++, n.index >= t.length ? null : t[n.index]),
clone: (i) => l(e, i == null ? r : n.index)
};
return n;
function e(t, r = 0) {
const n = Array.isArray(t) ? t : t.split(`
`);
return r--, () => (r++, r >= n.length ? null : n[r]);
}
export {
l as createStringReader
e as createStringReader
};

View File

@@ -1 +1 @@
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e={};function r(t){const a=e.createInterface({input:e.createReadStream(t,"utf-8")})[Symbol.asyncIterator]();return async()=>(await a.next()).value}exports.createReadlineReader=r;
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("node:fs"),n=require("node:readline/promises"),t=e=>e&&typeof e=="object"&&"default"in e?e:{default:e},o=t(r),u=t(n);function d(e){const a=u.default.createInterface({input:o.default.createReadStream(e,"utf-8")})[Symbol.asyncIterator]();return async()=>(await a.next()).value}exports.createReadlineReader=d;

View File

@@ -1,10 +1,11 @@
const e = {};
function n(t) {
const a = e.createInterface({
input: e.createReadStream(t, "utf-8")
import r from "node:fs";
import a from "node:readline/promises";
function c(e) {
const t = a.createInterface({
input: r.createReadStream(e, "utf-8")
})[Symbol.asyncIterator]();
return async () => (await a.next()).value;
return async () => (await t.next()).value;
}
export {
n as createReadlineReader
c as createReadlineReader
};

View File

@@ -20,9 +20,9 @@ export function useDocument (reader: Reader, indent: string = ' '): Document {
if (repeat) repeat = false
// Otherwise parse the line normally.
else {
const line = await reader.next()
const line = await reader()
// If there are no more lines, bail out.
if (line === null) return false
if (line == null) return false
lineData.line = line
parseLine(lineData)

View File

@@ -3,15 +3,11 @@ import type { Reader } from './reader'
export function createStringReader(doc: string|string[], index = 0): Reader {
const lines = Array.isArray(doc) ? doc : doc.split('\n')
const reader = {
index: index - 1,
next: () => {
reader.index++
if (reader.index >= lines.length) return null
return lines[reader.index]
},
clone: (startIndex?: number) => createStringReader(doc, startIndex == null ? index : reader.index)
}
index--;
return reader
return () => {
index++
if (index >= lines.length) return null
return lines[index]
}
}

View File

@@ -1,7 +1,8 @@
import fs from 'node:fs'
import readline from 'node:readline/promises'
import type { Reader } from './reader'
export function createReadlineReader(path: string): () => Promise<string|null> {
export function createReadlineReader(path: string): Reader {
const it = readline.createInterface({
input: fs.createReadStream(path, 'utf-8'),
})[Symbol.asyncIterator]()

View File

@@ -1,5 +1 @@
export type Reader = {
index: number,
next: () => string|null|Promise<string|null>,
clone: (startIndex?: number) => Reader
}
export type Reader = () => string|null|Promise<string|null>

View File

@@ -12,6 +12,12 @@ export default defineConfig({
'readers/js-string': 'src/readers/js-string.ts',
'readers/node-readline': 'src/readers/node-readline.ts',
}
},
rollupOptions: {
external: [
`node:fs`,
`node:readline/promises`
]
}
}
})