Skip to content

Commit cfefb06

Browse files
committed
updateS
1 parent d8afa8e commit cfefb06

File tree

17 files changed

+160
-266
lines changed

17 files changed

+160
-266
lines changed

src/runtime/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,4 @@ THE SOFTWARE.
2626
2727
---------------------------------------------------------------------------*/
2828

29-
export * as Runtime from './runtime.ts'
29+
export * from './module.ts'

src/runtime/parse.ts

Lines changed: 0 additions & 163 deletions
This file was deleted.

src/runtime/runtime.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,6 @@ THE SOFTWARE.
2626
2727
---------------------------------------------------------------------------*/
2828

29-
export * from './types.ts'
29+
3030
export * from './module.ts'
31-
export * from './parse.ts'
31+

src/runtime/types.ts

Lines changed: 0 additions & 47 deletions
This file was deleted.

src/runtime/types/array.ts

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ THE SOFTWARE.
3131
import { Arguments } from '../../system/arguments/index.ts'
3232
import { Guard } from '../../guard/index.ts'
3333
import { type StaticParser, type StaticEnsure } from './static.ts'
34-
import { type IParser, type IMapping, Identity } from './parser.ts'
34+
import { type IParser, type IProperties, type IMapping, Identity } from './parser.ts'
35+
36+
import { ParseParser } from './parse.ts'
3537

3638
// ------------------------------------------------------------------
3739
// Static
@@ -49,11 +51,8 @@ export interface IArray<Output extends unknown = unknown> extends IParser<Output
4951
// ------------------------------------------------------------------
5052
// Factory
5153
// ------------------------------------------------------------------
52-
/** Creates an Array parser */
5354
export function Array<Parser extends IParser, Mapping extends IMapping = IMapping<StaticArray<Parser>>>(parser: Parser, mapping: Mapping): IArray<ReturnType<Mapping>>
54-
/** Creates an Array parser */
5555
export function Array<Parser extends IParser>(parser: Parser): IArray<StaticArray<Parser>>
56-
/** Creates an Array parser */
5756
export function Array(...args: unknown[]): never {
5857
const [parser, mapping] = Arguments.Match<[IParser, IMapping]>(args, {
5958
2: (parser, mapping) => [parser, mapping],
@@ -71,4 +70,18 @@ export function IsArray(value: unknown): value is IArray {
7170
&& Guard.HasPropertyKey(value, 'parser')
7271
&& Guard.IsEqual(value.type, 'Array')
7372
&& Guard.IsObject(value.parser)
73+
}
74+
// ------------------------------------------------------------------
75+
// Parse
76+
// ------------------------------------------------------------------
77+
export function ParseArray<Context extends IProperties, Parser extends IParser>(context: Context, parser: Parser, input: string): unknown[] {
78+
const buffer = [] as unknown[]
79+
let rest = input
80+
while (rest.length > 0) {
81+
const result = ParseParser(context, parser, rest)
82+
if (result.length === 0) return [buffer, rest]
83+
buffer.push(result[0])
84+
rest = result[1]
85+
}
86+
return [buffer, rest]
7487
}

src/runtime/types/const.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ THE SOFTWARE.
2828

2929
// deno-fmt-ignore-file
3030

31+
import * as Token from '../../token/index.ts'
32+
3133
import { Arguments } from '../../system/arguments/index.ts'
3234
import { Guard } from '../../guard/index.ts'
3335
import { type IParser, type IMapping, Identity } from './parser.ts'
@@ -42,11 +44,8 @@ export interface IConst<Output extends unknown = unknown> extends IParser<Output
4244
// ------------------------------------------------------------------
4345
// Factory
4446
// ------------------------------------------------------------------
45-
/** Creates a Const parser */
4647
export function Const<Value extends string, Mapping extends IMapping<Value>>(value: Value, mapping: Mapping): IConst<ReturnType<Mapping>>
47-
/** Creates a Const parser */
4848
export function Const<Value extends string>(value: Value): IConst<Value>
49-
/** Creates a Const parser */
5049
export function Const(...args: unknown[]): never {
5150
const [const_, mapping] = Arguments.Match<[string, IMapping]>(args, {
5251
2: (const_, mapping) => [const_, mapping],
@@ -57,11 +56,16 @@ export function Const(...args: unknown[]): never {
5756
// ------------------------------------------------------------------
5857
// Guard
5958
// ------------------------------------------------------------------
60-
/** True if the value is a Const parser */
6159
export function IsConst(value: unknown): value is IConst {
6260
return Guard.IsObject(value)
6361
&& Guard.HasPropertyKey(value, 'type')
6462
&& Guard.HasPropertyKey(value, 'const')
6563
&& Guard.IsEqual(value.type, 'Const')
6664
&& Guard.IsString(value.const)
65+
}
66+
// ------------------------------------------------------------------
67+
// Parse
68+
// ------------------------------------------------------------------
69+
export function ParseConst<Const extends string>(input: string, const_: Const): [] | [Const, string] {
70+
return Token.Const(const_, input) as never
6771
}

src/runtime/types/ident.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ THE SOFTWARE.
2828

2929
// deno-fmt-ignore-file
3030

31+
import * as Token from '../../token/index.ts'
32+
3133
import { Arguments } from '../../system/arguments/index.ts'
3234
import { Guard } from '../../guard/index.ts'
3335
import { type IParser, type IMapping, Identity } from './parser.ts'
@@ -41,11 +43,8 @@ export interface IIdent<Output extends unknown = unknown> extends IParser<Output
4143
// ------------------------------------------------------------------
4244
// Factory
4345
// ------------------------------------------------------------------
44-
/** Creates an Ident parser */
4546
export function Ident<Mapping extends IMapping<string>>(mapping: Mapping): IIdent<ReturnType<Mapping>>
46-
/** Creates an Ident parser */
4747
export function Ident(): IIdent<string>
48-
/** Creates an Ident parser */
4948
export function Ident(...args: unknown[]): never {
5049
const [mapping] = Arguments.Match<[IParser, IMapping]>(args, {
5150
1: (mapping) => [mapping],
@@ -56,9 +55,14 @@ export function Ident(...args: unknown[]): never {
5655
// ------------------------------------------------------------------
5756
// Guard
5857
// ------------------------------------------------------------------
59-
/** True if the value is a Ident parser */
6058
export function IsIdent(value: unknown): value is IIdent {
6159
return Guard.IsObject(value)
6260
&& Guard.HasPropertyKey(value, 'type')
6361
&& Guard.IsEqual(value.type, 'Ident')
62+
}
63+
// ------------------------------------------------------------------
64+
// Parse
65+
// ------------------------------------------------------------------
66+
export function ParseIdent(input: string): [] | [string, string] {
67+
return Token.Ident(input)
6468
}

src/runtime/types/number.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ THE SOFTWARE.
2828

2929
// deno-fmt-ignore-file
3030

31+
import * as Token from '../../token/index.ts'
32+
3133
import { Arguments } from '../../system/arguments/index.ts'
3234
import { Guard } from '../../guard/index.ts'
3335
import { type IParser, type IMapping, Identity } from './parser.ts'
@@ -41,11 +43,8 @@ export interface INumber<Output extends unknown = unknown> extends IParser<Outpu
4143
// ------------------------------------------------------------------
4244
// Factory
4345
// ------------------------------------------------------------------
44-
/** Creates a Number parser */
4546
export function Number<Mapping extends IMapping<string>>(mapping: Mapping): INumber<ReturnType<Mapping>>
46-
/** Creates a Number parser */
4747
export function Number(): INumber<string>
48-
/** Creates a Number parser */
4948
export function Number(...args: unknown[]): never {
5049
const [mapping] = Arguments.Match<[IParser, IMapping]>(args, {
5150
1: (mapping) => [mapping],
@@ -56,9 +55,14 @@ export function Number(...args: unknown[]): never {
5655
// ------------------------------------------------------------------
5756
// Guard
5857
// ------------------------------------------------------------------
59-
/** True if the value is a Number parser */
6058
export function IsNumber(value: unknown): value is INumber {
6159
return Guard.IsObject(value)
6260
&& Guard.HasPropertyKey(value, 'type')
6361
&& Guard.IsEqual(value.type, 'Number')
62+
}
63+
// ------------------------------------------------------------------
64+
// Parse
65+
// ------------------------------------------------------------------
66+
export function ParseNumber(input: string): [] | [string, string] {
67+
return Token.Number(input)
6468
}

0 commit comments

Comments
 (0)