@temperlang/std 0.0.5 → 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/all-exports.js +3 -0
- package/package.json +7 -2
- package/regex.js +577 -805
- package/regex.js.map +1 -1
- package/temporal.js +55 -0
- package/temporal.js.map +1 -0
- package/testing.js +214 -53
- package/testing.js.map +1 -1
- package/config.js +0 -33
- package/config.js.map +0 -1
- package/regex__preface.js +0 -3
- package/regex__preface.js.map +0 -1
- package/testing__preface.js +0 -3
- package/testing__preface.js.map +0 -1
package/regex.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{ "version": 3, "file": "OUTPUT_ROOT/temper-std/js/regex.js", "sources": [ "std/regex.temper.md" ], "sourcesContent": [ "# Regex Data Model and Functionality\n\nThe structural data model for regex patterns enables direct construction, and\nthe Temper regex dialect compiles static regex text patterns to these objects.\n\nA focus here is on providing tools people can actually reach for when they need\nto do text processing. The execution should be faster on backends like Python\nthan writing raw code, and the implementation in backends like C should\napproximate what you'd like to have written manually.\n\nDue to inadequate and distinct Unicode handling in backend regex engines, the\ninitial feature set avoids character classes and properties but is still aware\nof code points. Parsing focused on limited sets of delimiters works best for\nnow.\n\nThe core feature set here focuses on both the data model and utility functions,\nsuch as matching regexes against strings.\n\n## Regex Data Model\n\nAll regexes are composed hierarchically of `Regex` nodes. Regexes are a\nsequence of component parts. For example, `/hi./` is a sequence of\n[CodePoint](#codepoint) `/h/` and `/i/` and dot `/./`.\n\nAnd perhaps the most fundamental `Regex` is the [Sequence](#sequence),\nbecause it enables multiple regex components to be strung together.\n\n```\nexport /*sealed*/ interface Regex {\n```\n\nBefore a regex is used, it must be compiled. Some helper functions compile on\nthe fly, although it is faster to reuse a pre-compiled regex.\n\n```\n // TODO(tjp, regex): Make this into a macro behind the scenes.\n // TODO(tjp, regex): `compiled\u003cT\u003e(): CompiledRegex\u003cT\u003e`\n public compiled(): CompiledRegex { new CompiledRegex(this) }\n```\n\nThe simplest use of a regular expression is if it is found in a string.\nRepeatedly calling these methods on a single `Regex` instance is inefficient.\nBetter for reuse is to compile in advance.\n\n```\n public found(text: String): Boolean { compiled().found(text) }\n```\n\nYou can also return match details or perform text replacement. The returned\ngroups map contains an entry for each key in the order defined in the regex\npattern. If no \u0022full\u0022 group is defined, one is added automatically to capture\nthe full matched text.\n\nIn the future, we intend to support customized match types with fields to match\ncapture groups, statically checked where possible.\n\n```\n // TODO(tjp, regex): Also macro because reification.\n // TODO(tjp, regex): `find\u003cT = Map\u003cString, Group\u003e\u003e(): T | NoResult`\n public find(text: String): Map\u003cString, Group\u003e | NoResult {\n compiled().find(text)\n }\n\n public replace(\n text: String, format: fn (Map\u003cString, Group\u003e): String\n ): String {\n compiled().replace(text, format)\n }\n```\n\nThat's it for what you can do with regex patterns in Temper today, but there's\nmuch more to say on what kinds of regexes can be built.\n\n```\n}\n```\n\n## Regex Item Types\n\nA `Regex` is composed of a potential variety of subtypes.\n\n### Groups\n\nMultiple types of groups exist:\n\n- [Capture](#capture) `/(?\u003cname\u003e...)/` to remember match groups for later use.\n- Non-capturing group syntax `/(?:...)/`, which is simply a [Regex](#regex)\n instance in the data model.\n\n### Capture\n\nTODO(tjp, regex): Change to named captures only!\n\n`Capture` is a [group](#groups) that remembers the matched text for later\naccess. Temper supports only named matches, with current intended syntax\n`/(?name = ...)/`.\n\n```\nexport class Capture extends Regex {\n public name: String;\n public /*early*/ item: Regex;\n}\n```\n\n### CodePart\n\nA component of a [CodeSet][#codeset], aka character class, which applies to a\nsubset of regex data types.\n\nHere, \u0022code\u0022 is short for \u0022code point\u0022 although \u0022char\u0022 might work better,\ndepending on expectations.\n\n```\nexport /*sealed*/ interface CodePart extends Regex {}\n```\n\n### CodePoints\n\nOne or more verbatim code points, where the sequence matters if within a\n[Regex](#regex) or not if within a [CodeSet](#codeset). Some escapes in\ntextual regex source, such as `/\\t/`, can be stored as raw code points.\n\nThe `String` here can enable more efficient storage than individual code\npoints, although the source text may require non-capture grouping. For example,\n`/(?:abc)?/` optionally matches the string `\u0022abc\u0022`, whereas `/abc?/` matches\n`\u0022ab\u0022` with an optional `\u0022c\u0022`.\n\n```\nexport class CodePoints extends CodePart {\n public value: String;\n}\n```\n\n### Specials\n\nA number of special match forms exist. In the data model, these are empty\nclasses.\n\n- `.` - `Dot` In default mode, matches any Unicode code point except newline.\n- `^` - `Begin` in default mode matches zero-length at the beginning of a\n string.\n- `\u0024` - `End` in default mode matches zero-length at the end of a string.\n- `\\b` - `WordBoundary` matches zero-length at the boundary between word and\n non-word code points. More sophisticated Unicode compliance is TBD.\n- `\\s` (negated as `\\S`) - `Space` matches any horizontal space code point.\n Details are TBD.\n- `\\w` (negated as `\\W`) - `Word` matches any word code point. Details are TBD.\n This is currently defined in terms of old ASCII definitions because those are\n clear. Perhaps this will stay that way, and Unicode properties like `\\p{L}`\n will be used for human language needs.\n- `\\X` - `GraphemeCluster` might not be supported, but [here is some discussion\n of how to implement it](\n https://github.com/rust-lang/regex/issues/54#issuecomment-661905060).\n\n\u003cdetails\u003e\n\n```\nexport /*sealed*/ interface Special extends Regex {}\nexport let Begin = do { class Begin extends Special {}; new Begin() };\nexport let Dot = do { class Dot extends Special {}; new Dot() };\nexport let End = do { class End extends Special {}; new End() };\n// TODO(tjp, regex): We can't easily support this at present across backends.\n// export let GraphemeCluster = do {\n// class GraphemeCluster extends Special {}; new GraphemeCluster()\n// };\nexport let WordBoundary = do {\n class WordBoundary extends Special {}; new WordBoundary()\n};\n\nexport /*sealed*/ interface SpecialSet extends CodePart \u0026 Special {}\nexport let Digit = do { class Digit extends SpecialSet {}; new Digit() };\nexport let Space = do { class Space extends SpecialSet {}; new Space() };\nexport let Word = do { class Word extends SpecialSet {}; new Word() };\n```\n\n\u003c/details\u003e\n\n### CodeRange\n\nA code point range matches any code point in its inclusive bounds, such as\n`/[a-c]/`. In source, `-` is included in a code set either by escaping or by\nincluding it as the first or last character. A `CodeRange` is usually contained\ninside a [CodeSet](#codeset), and syntactically always is.\n\n```\nexport class CodeRange extends CodePart {\n public min: Int;\n public max: Int;\n}\n```\n\n### CodeSet\n\nA set of code points, any of which can match, such as `/[abc]/` matching any of\n`\u0022a\u0022`, `\u0022b\u0022`, or `\u0022c\u0022`. Alternatively, a negated set is the inverse of the code\npoints given, such as `/[^abc]/`, matching any code point that's not any of\nthese. This is also often called a character class.\n\nFurther, a subset of [specials](#specials) can also be used in code sets. A\nnegated code set of just a special set often has custom syntax. For example,\nnon-space can be said as either `/[^\\s]/` or `/\\S/`.\n\n```\nexport class CodeSet extends Regex {\n public items: List\u003cCodePart\u003e;\n public negated: Boolean = false;\n}\n```\n\n### Or\n\n`Or` matches any one of multiple options, such as `/ab|cd|e*/`.\n\n```\nexport class Or extends Regex {\n public /*early*/ items: List\u003cRegex\u003e;\n}\n```\n\n### Repeat\n\n`Repeat` matches from an minimum to a maximum number of repeats of a\nsubregex. This can be represented in regex source in a number of ways:\n\n- `?` matches 0 or 1.\n- `*` matches 0 or more.\n- `+` matches 1 or more.\n- `{m}` matches exactly `m` repetitions.\n- `{m,n}` matches between `m` and `n`. Missing `n` is a max of infinity. For\n example, `{0,1}` is equivalent to `?`, and `{1,}` is equivalent to `+`.\n\nBy default, repetitions are greedy, matching as many repetitions as possible.\nIn regex source, any of the above can have `?` appended to indicated reluctant\n(aka non-greedy), matching as few repetitions as possible.\n\n```\nexport class Repeat extends Regex {\n public /*early*/ item: Regex;\n public min: Int;\n public max: Int | Null; // where null means infinite\n public reluctant: Boolean = false;\n}\n```\n\nWe also have convenience builders.\n\n```\nexport let entire(item: Regex): Regex {\n new Sequence([Begin, item, End])\n}\n\nexport let oneOrMore(item: Regex, reluctant: Boolean = false): Repeat {\n { item, min: 1, max: null, reluctant }\n}\n\nexport let optional(item: Regex, reluctant: Boolean = false): Repeat {\n { item, min: 0, max: 1, reluctant }\n}\n```\n\n### Sequence\n\n`Sequence` strings along multiple other regexes in order.\n\n```\nexport class Sequence extends Regex {\n public /*early*/ items: List\u003cRegex\u003e;\n}\n```\n\n## Match Objects\n\nFor detailed match results, call `find` on a regex to get a `Map` object from\n`String` keys to `Group` values.\n\n```\n// TODO Go back to a `Match` object with `groups` as a member so we can also\n// TODO easily return metadata alongside groups? Or is simpler better?\n// export class Match { // interface ... \u003cT = Map\u003cString, Group\u003e\u003e {\n// public let groups: Map\u003cString, Group\u003e;\n// }\n\nexport class Group {\n public let name: String;\n public let value: String;\n public let codePointsBegin: Int;\n}\n```\n\n## Compiled Regex Objects\n\nThe compiled form of a regex is mostly opaque, but it can be cached for more\nefficient reuse than working from a source [Regex](#regex-data-model).\n\n\u003cdetails\u003e\n\n```\n// Provides a workaround for access to std/regex from extension methods.\nclass RegexRefs {\n public let codePoints: CodePoints = new CodePoints(\u0022\u0022);\n public let group: Group = { name: \u0022\u0022, value: \u0022\u0022, codePointsBegin: 0 }\n public let orObject: Or = new Or([]);\n}\n\nlet regexRefs = new RegexRefs();\n```\n\n\u003c/details\u003e\n\n```\n// TODO(tjp, regex): Generate subtypes of this interface later.\nexport class CompiledRegex { // interface ... \u003cT\u003e {\n```\n\nThe source `Regex` data is still available on compiled objects in case it's\nneeded for composition or other purposes.\n\n```\n public let data: Regex;\n\n public constructor(data: Regex) {\n this.data = data;\n compiled = compileFormatted(format());\n }\n```\n\nA compiled regex exposes many of the same capabilities as `Regex`, but they are\nmore efficient to use repeatedly.\n\n```\n public found(text: String): Boolean { compiledFound(compiled, text) }\n\n public find(text: String): Map\u003cString, Group\u003e | NoResult {\n compiledFind(compiled, text, regexRefs)\n }\n\n public replace(\n text: String, format: fn (Map\u003cString, Group\u003e): String\n ): String {\n compiledReplace(compiled, text, format, regexRefs)\n }\n```\n\nTODO(tjp, regex): Public method for replace with named references.\nTODO(tjp, regex): Any static checking?\n\n\u003cdetails\u003e\n\n```\n let compiled: AnyValue;\n\n // Extension functions on some backends need the private `compiled` value\n // passed in directly.\n @connected(\u0022CompiledRegex::compiledFound\u0022)\n compiledFound(compiled: AnyValue, text: String): Boolean;\n\n @connected(\u0022CompiledRegex::compiledFind\u0022)\n compiledFind(\n compiled: AnyValue, text: String, regexRefs: RegexRefs\n ): Map\u003cString, Group\u003e | NoResult;\n\n @connected(\u0022CompiledRegex::compileFormatted\u0022)\n compileFormatted(formatted: String): AnyValue;\n\n @connected(\u0022CompiledRegex::compiledReplace\u0022)\n compiledReplace(\n compiled: AnyValue,\n text: String,\n format: fn (Map\u003cString, Group\u003e): String,\n regexRefs: RegexRefs,\n ): String;\n\n @connected(\u0022CompiledRegex::format\u0022)\n format(): String { new RegexFormatter().format(data) }\n```\n\n\u003c/details\u003e\n\n```\n}\n```\n\n## Private implementation matters\n\nSome regex logic can be shared across backends. These features aren't directly\nexported to the user, however.\n\nThe intent is that these support features only get included in compiled Temper\ncode if usage depends on dynamically constructed regexes. If all regex building\nis done as stable values, we hope to generated backend compiled regexes purely\nat Temper compile time.\n\n### RegexFormatter\n\n\u003cdetails\u003e\n\n```\nclass RegexFormatter {\n let out: ListBuilder\u003cString\u003e = new ListBuilder\u003cString\u003e();\n\n public format(regex: Regex): String {\n pushRegex(regex)\n out.join(\u0022\u0022) { (x);; x }\n }\n\n pushRegex(regex: Regex): Void {\n match (regex) {\n // Aggregate types.\n is Capture -\u003e pushCapture(regex);\n is CodePoints -\u003e pushCodePoints(regex, false);\n is CodeRange -\u003e pushCodeRange(regex);\n is CodeSet -\u003e pushCodeSet(regex);\n is Or -\u003e pushOr(regex);\n is Repeat -\u003e pushRepeat(regex);\n is Sequence -\u003e pushSequence(regex);\n // Specials.\n // Some of these will need to be customized on future backends.\n Begin -\u003e out.add(\u0022^\u0022);\n Dot -\u003e out.add(\u0022.\u0022);\n End -\u003e out.add(\u0022\u0024\u0022);\n WordBoundary -\u003e out.add(\u0022\\\\b\u0022);\n // Special sets.\n Digit -\u003e out.add(\u0022\\\\d\u0022);\n Space -\u003e out.add(\u0022\\\\s\u0022);\n Word -\u003e out.add(\u0022\\\\w\u0022);\n // ...\n }\n }\n\n pushCapture(capture: Capture): Void {\n out.add(\u0022(\u0022);\n // TODO(tjp, regex): Consistent name validation rules for all backends???\n // TODO(tjp, regex): Validate here or in `Capture` constructor???\n // TODO(tjp, regex): Validate here or where against reused names???\n pushCaptureName(out, capture.name);\n pushRegex(capture.item);\n out.add(\u0022)\u0022);\n }\n\n @connected(\u0022RegexFormatter::pushCaptureName\u0022)\n pushCaptureName(out: ListBuilder\u003cString\u003e, name: String): Void {\n // All so far except Python use this form.\n out.add(\u0022?\u003c\u0024{name}\u003e\u0022);\n }\n\n pushCode(code: Int, insideCodeSet: Boolean): Void {\n // Expose private property to extension.\n pushCodeTo(out, code, insideCodeSet);\n // TODO(tjp, regex): Implement more in Temper once we can.\n // if (escapeCodes[code] \u0026\u0026 false) {\n // out.add(\u0022\\\\\u0022);\n // // TODO(tjp, regex): How to convert back to strings?\n // }\n }\n\n @connected(\u0022RegexFormatter::pushCodeTo\u0022)\n pushCodeTo(out: ListBuilder\u003cString\u003e, code: Int, insideCodeSet: Boolean): Void;\n\n pushCodePoints(codePoints: CodePoints, insideCodeSet: Boolean): Void {\n for (\n var slice = codePoints.value.codePoints;\n !slice.isEmpty;\n slice = slice.advance(1)\n ) {\n pushCode(slice.read(), insideCodeSet);\n }\n }\n\n pushCodeRange(codeRange: CodeRange): Void {\n out.add(\u0022[\u0022);\n pushCodeRangeUnwrapped(codeRange);\n out.add(\u0022]\u0022);\n }\n\n pushCodeRangeUnwrapped(codeRange: CodeRange): Void {\n pushCode(codeRange.min, true);\n out.add(\u0022-\u0022);\n pushCode(codeRange.max, true);\n }\n\n pushCodeSet(codeSet: CodeSet): Void {\n let adjusted = adjustCodeSet(codeSet, regexRefs);\n match (adjusted) {\n is CodeSet -\u003e do {\n out.add(\u0022[\u0022);\n if (adjusted.negated) {\n out.add(\u0022^\u0022);\n }\n for (var i = 0; i \u003c adjusted.items.length; i += 1) {\n pushCodeSetItem(adjusted.items[i]);\n }\n out.add(\u0022]\u0022);\n }\n else -\u003e pushRegex(adjusted);\n }\n }\n\n @connected(\u0022RegexFormatter::adjustCodeSet\u0022)\n adjustCodeSet(codeSet: CodeSet, regexRefs: RegexRefs): Regex { codeSet }\n\n pushCodeSetItem(codePart: CodePart): Void {\n match (codePart) {\n is CodePoints -\u003e pushCodePoints(codePart, true);\n is CodeRange -\u003e pushCodeRangeUnwrapped(codePart);\n is SpecialSet -\u003e pushRegex(codePart);\n }\n }\n\n pushOr(or: Or): Void {\n if (!or.items.isEmpty) {\n out.add(\u0022(?:\u0022);\n // TODO(tjp, regex): See #822. Until `this` works better, no this in funs.\n // TODO(tjp, regex): So just manually loop here. Sometimes faster, anyway?\n pushRegex(or.items[0]);\n for (var i = 1; i \u003c or.items.length; i += 1) {\n out.add(\u0022|\u0022);\n pushRegex(or.items[i]);\n }\n out.add(\u0022)\u0022);\n }\n }\n\n pushRepeat(repeat: Repeat): Void {\n // Always wrap the main sub-pattern here to make life easy\n out.add(\u0022(?:\u0022);\n pushRegex(repeat.item);\n out.add(\u0022)\u0022);\n // Then add the repetition part.\n let min = repeat.min;\n let max = repeat.max;\n if (false) {\n } else if (min == 0 \u0026\u0026 max == 1) {\n out.add(\u0022?\u0022);\n } else if (min == 0 \u0026\u0026 max == null) {\n out.add(\u0022*\u0022);\n } else if (min == 1 \u0026\u0026 max == null) {\n out.add(\u0022+\u0022);\n } else {\n out.add(\u0022{\u0024{min.toString()}\u0022);\n if (min != max) {\n out.add(\u0022,\u0022);\n if (max != null) {\n out.add(max.as\u003cInt\u003e().toString());\n }\n }\n out.add(\u0022}\u0022);\n }\n if (repeat.reluctant) {\n out.add(\u0022?\u0022);\n }\n }\n\n pushSequence(sequence: Sequence): Void {\n // TODO(tjp, regex): Foreach loop/function would be nice.\n for (var i = 0; i \u003c sequence.items.length; i += 1) {\n pushRegex(sequence.items[i]);\n }\n }\n\n // Put this here instead of the data model for now because I'm not sure this\n // makes sense to be part of the public api right now.\n public maxCode(codePart: CodePart): Int | Null {\n match (codePart) {\n is CodePoints -\u003e do {\n // Iterating code points is the hardest of the current cases.\n let value = codePart.value;\n if (value.isEmpty) {\n null\n } else {\n // My kingdom for a fold, or even just a max, in builtins.\n var max = 0;\n for (\n var slice = value.codePoints;\n !slice.isEmpty;\n slice = slice.advance(1)\n ) {\n let next = slice.read();\n if (next \u003e max) {\n max = next;\n }\n }\n max\n }\n }\n // Others below are easy for now.\n is CodeRange -\u003e codePart.max;\n Digit -\u003e \u00229\u0022.codePoints.read();\n Space -\u003e \u0022 \u0022.codePoints.read();\n Word -\u003e \u0022z\u0022.codePoints.read();\n // Actually unexpected, ever, but eh.\n else -\u003e null;\n }\n }\n}\n\n// // TODO(tjp, regex): Delete all the below (comment included) if unused.\n// // TODO(tjp, regex): Replace all this with a compile-time regex once we can.\n// let escapeCodeList = [\n// \u0022\\\\\u0022.codePoints.read(),\n// \u0022^\u0022.codePoints.read(),\n// \u0022\u0024\u0022.codePoints.read(),\n// \u0022{\u0022.codePoints.read(),\n// \u0022[\u0022.codePoints.read(),\n// \u0022(\u0022.codePoints.read(),\n// \u0022}\u0022.codePoints.read(),\n// \u0022]\u0022.codePoints.read(),\n// \u0022)\u0022.codePoints.read(),\n// \u0022|\u0022.codePoints.read(),\n// \u0022+\u0022.codePoints.read(),\n// \u0022?\u0022.codePoints.read(),\n// \u0022/\u0022.codePoints.read(),\n// \u0022*\u0022.codePoints.read(),\n// ];\n// let escapeCodes = new DenseBitVector(128);\n// // This `for` loop has to be after type definitions for now because\n// // https://github.com/temper-lang/temper/issues/817\n// for (var i = 0; i \u003c escapeCodeList.length; i += 1) {\n// escapeCodes[i] = true;\n// }\n```\n\n\u003c/details\u003e\n" ], "names": [ "return", "CompiledRegex", "text", "format", "Regex", "compiled", "found", "find", "replace", "Capture", "name", "item", "CodePart", "CodePoints", "value", "Special", "SpecialSet", "CodeRange", "min", "max", "CodeSet", "items", "negated", "Or", "Repeat", "reluctant", "Sequence", "Group", "codePointsBegin", "RegexRefs", "codePoints", "group", "orObject", "data", "regexRefs", "RegexFormatter", "out", "regex", "fn", "x", "Begin", "Dot", "End", "WordBoundary", "Digit", "Space", "Word", "capture", "code", "insideCodeSet", "slice", "codeRange", "codeSet", "adjusted", "i", "codePart", "or", "repeat", "sequence", "next", "entire", "oneOrMore", "optional" ], "mappings": "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" }
|
|
1
|
+
{ "version": 3, "file": "js/std/regex.js", "sources": [ "std/regex.temper.md" ], "sourcesContent": [ "# Regex Data Model and Functionality\n\nThe structural data model for regex patterns enables direct construction, and\nthe Temper regex dialect compiles static regex text patterns to these objects.\n\nA focus here is on providing tools people can actually reach for when they need\nto do text processing. The execution should be faster on backends like Python\nthan writing raw code, and the implementation in backends like C should\napproximate what you'd like to have written manually.\n\nDue to inadequate and distinct Unicode handling in backend regex engines, the\ninitial feature set avoids character classes and properties but is still aware\nof code points. Parsing focused on limited sets of delimiters works best for\nnow.\n\nThe core feature set here focuses on both the data model and utility functions,\nsuch as matching regexes against strings.\n\n## Regex Data Model\n\nAll regexes are composed hierarchically of `Regex` nodes. Regexes are a\nsequence of component parts. For example, `/hi./` is a sequence of\n[CodePoint](#codepoint) `/h/` and `/i/` and dot `/./`.\n\nAnd perhaps the most fundamental `Regex` is the [Sequence](#sequence),\nbecause it enables multiple regex components to be strung together.\n\n```\nexport /*sealed*/ interface Regex {\n```\n\nBefore a regex is used, it must be compiled. Some helper functions compile on\nthe fly, although it is faster to reuse a pre-compiled regex.\n\n```\n // TODO(tjp, regex): Make this into a macro behind the scenes.\n // TODO(tjp, regex): `compiled\u003cT\u003e(): CompiledRegex\u003cT\u003e`\n public compiled(): CompiledRegex { new CompiledRegex(this) }\n```\n\nThe simplest use of a regular expression is if it is found in a string.\nRepeatedly calling these methods on a single `Regex` instance is inefficient.\nBetter for reuse is to compile in advance.\n\n```\n public found(text: String): Boolean { compiled().found(text) }\n```\n\nYou can also return match details or perform text replacement. The returned\ngroups map contains an entry for each key in the order defined in the regex\npattern. If no \u0022full\u0022 group is defined, one is added automatically to capture\nthe full matched text.\n\nIn the future, we intend to support customized match types with fields to match\ncapture groups, statically checked where possible.\n\n```\n // TODO(tjp, regex): Also macro because reification.\n\n public find(text: String): Map\u003cString, Group\u003e | Bubble {\n compiled().find(text)\n }\n\n public replace(\n text: String, format: fn (Map\u003cString, Group\u003e): String\n ): String {\n compiled().replace(text, format)\n }\n```\n\nThat's it for what you can do with regex patterns in Temper today, but there's\nmuch more to say on what kinds of regexes can be built.\n\n```\n}\n```\n\n## Regex Item Types\n\nA `Regex` is composed of a potential variety of subtypes.\n\n### Groups\n\nMultiple types of groups exist:\n\n- [Capture](#capture) `/(?\u003cname\u003e...)/` to remember match groups for later use.\n- Non-capturing group syntax `/(?:...)/`, which is simply a [Regex](#regex)\n instance in the data model.\n\n### Capture\n\nTODO(tjp, regex): Change to named captures only!\n\n`Capture` is a [group](#groups) that remembers the matched text for later\naccess. Temper supports only named matches, with current intended syntax\n`/(?name = ...)/`.\n\n```\nexport class Capture extends Regex {\n public name: String;\n public /*early*/ item: Regex;\n}\n```\n\n### CodePart\n\nA component of a [CodeSet][#codeset], aka character class, which applies to a\nsubset of regex data types.\n\nHere, \u0022code\u0022 is short for \u0022code point\u0022 although \u0022char\u0022 might work better,\ndepending on expectations.\n\n```\nexport /*sealed*/ interface CodePart extends Regex {}\n```\n\n### CodePoints\n\nOne or more verbatim code points, where the sequence matters if within a\n[Regex](#regex) or not if within a [CodeSet](#codeset). Some escapes in\ntextual regex source, such as `/\\t/`, can be stored as raw code points.\n\nThe `String` here can enable more efficient storage than individual code\npoints, although the source text may require non-capture grouping. For example,\n`/(?:abc)?/` optionally matches the string `\u0022abc\u0022`, whereas `/abc?/` matches\n`\u0022ab\u0022` with an optional `\u0022c\u0022`.\n\n```\nexport class CodePoints extends CodePart {\n public value: String;\n}\n```\n\n### Specials\n\nA number of special match forms exist. In the data model, these are empty\nclasses.\n\n- `.` - `Dot` In default mode, matches any Unicode code point except newline.\n- `^` - `Begin` in default mode matches zero-length at the beginning of a\n string.\n- `\u0024` - `End` in default mode matches zero-length at the end of a string.\n- `\\b` - `WordBoundary` matches zero-length at the boundary between word and\n non-word code points. More sophisticated Unicode compliance is TBD.\n- `\\s` (negated as `\\S`) - `Space` matches any horizontal space code point.\n Details are TBD.\n- `\\w` (negated as `\\W`) - `Word` matches any word code point. Details are TBD.\n This is currently defined in terms of old ASCII definitions because those are\n clear. Perhaps this will stay that way, and Unicode properties like `\\p{L}`\n will be used for human language needs.\n- `\\X` - `GraphemeCluster` might not be supported, but [here is some discussion\n of how to implement it](\n https://github.com/rust-lang/regex/issues/54#issuecomment-661905060).\n\n\u003cdetails\u003e\n\n```\nexport /*sealed*/ interface Special extends Regex {}\nexport let Begin: Special = do { class Begin extends Special {}; new Begin() };\nexport let Dot: Special = do { class Dot extends Special {}; new Dot() };\nexport let End: Special = do { class End extends Special {}; new End() };\n// TODO(tjp, regex): We can't easily support this at present across backends.\n// export let GraphemeCluster = do {\n// class GraphemeCluster extends Special {}; new GraphemeCluster()\n// };\nexport let WordBoundary: Special = do {\n class WordBoundary extends Special {}; new WordBoundary()\n};\n\nexport /*sealed*/ interface SpecialSet extends CodePart \u0026 Special {}\nexport let Digit: SpecialSet = do {\n class Digit extends SpecialSet {}; new Digit()\n};\nexport let Space: SpecialSet = do {\n class Space extends SpecialSet {}; new Space()\n};\nexport let Word: SpecialSet = do {\n class Word extends SpecialSet {}; new Word()\n};\n```\n\n\u003c/details\u003e\n\n### CodeRange\n\nA code point range matches any code point in its inclusive bounds, such as\n`/[a-c]/`. In source, `-` is included in a code set either by escaping or by\nincluding it as the first or last character. A `CodeRange` is usually contained\ninside a [CodeSet](#codeset), and syntactically always is.\n\n```\nexport class CodeRange extends CodePart {\n public min: Int;\n public max: Int;\n}\n```\n\n### CodeSet\n\nA set of code points, any of which can match, such as `/[abc]/` matching any of\n`\u0022a\u0022`, `\u0022b\u0022`, or `\u0022c\u0022`. Alternatively, a negated set is the inverse of the code\npoints given, such as `/[^abc]/`, matching any code point that's not any of\nthese. This is also often called a character class.\n\nFurther, a subset of [specials](#specials) can also be used in code sets. A\nnegated code set of just a special set often has custom syntax. For example,\nnon-space can be said as either `/[^\\s]/` or `/\\S/`.\n\n```\nexport class CodeSet extends Regex {\n public items: List\u003cCodePart\u003e;\n public negated: Boolean = false;\n}\n```\n\n### Or\n\n`Or` matches any one of multiple options, such as `/ab|cd|e*/`.\n\n```\nexport class Or extends Regex {\n public /*early*/ items: List\u003cRegex\u003e;\n}\n```\n\n### Repeat\n\n`Repeat` matches from an minimum to a maximum number of repeats of a\nsubregex. This can be represented in regex source in a number of ways:\n\n- `?` matches 0 or 1.\n- `*` matches 0 or more.\n- `+` matches 1 or more.\n- `{m}` matches exactly `m` repetitions.\n- `{m,n}` matches between `m` and `n`. Missing `n` is a max of infinity. For\n example, `{0,1}` is equivalent to `?`, and `{1,}` is equivalent to `+`.\n\nBy default, repetitions are greedy, matching as many repetitions as possible.\nIn regex source, any of the above can have `?` appended to indicated reluctant\n(aka non-greedy), matching as few repetitions as possible.\n\n```\nexport class Repeat extends Regex {\n public /*early*/ item: Regex;\n public min: Int;\n public max: Int | Null; // where null means infinite\n public reluctant: Boolean = false;\n}\n```\n\nWe also have convenience builders.\n\n```\nexport let entire(item: Regex): Regex {\n new Sequence([Begin, item, End])\n}\n\nexport let oneOrMore(item: Regex, reluctant: Boolean = false): Repeat {\n { item, min: 1, max: null, reluctant }\n}\n\nexport let optional(item: Regex, reluctant: Boolean = false): Repeat {\n { item, min: 0, max: 1, reluctant }\n}\n```\n\n### Sequence\n\n`Sequence` strings along multiple other regexes in order.\n\n```\nexport class Sequence extends Regex {\n public /*early*/ items: List\u003cRegex\u003e;\n}\n```\n\n## Match Objects\n\nFor detailed match results, call `find` on a regex to get a `Map` object from\n`String` keys to `Group` values.\n\n```\n// TODO Go back to a `Match` object with `groups` as a member so we can also\n// TODO easily return metadata alongside groups? Or is simpler better?\n// export class Match { // interface ... \u003cT = Map\u003cString, Group\u003e\u003e {\n// public let groups: Map\u003cString, Group\u003e;\n// }\n\nexport class Group {\n public let name: String;\n public let value: String;\n public let codePointsBegin: Int;\n}\n```\n\n## Compiled Regex Objects\n\nThe compiled form of a regex is mostly opaque, but it can be cached for more\nefficient reuse than working from a source [Regex](#regex-data-model).\n\n\u003cdetails\u003e\n\n```\n// Provides a workaround for access to std/regex from extension methods.\nclass RegexRefs {\n public let codePoints: CodePoints = new CodePoints(\u0022\u0022);\n public let group: Group = { name: \u0022\u0022, value: \u0022\u0022, codePointsBegin: 0 }\n public let orObject: Or = new Or([]);\n}\n\nlet regexRefs = new RegexRefs();\n```\n\n\u003c/details\u003e\n\n```\n// TODO(tjp, regex): Generate subtypes of this interface later.\nexport class CompiledRegex { // interface ... \u003cT\u003e {\n```\n\nThe source `Regex` data is still available on compiled objects in case it's\nneeded for composition or other purposes.\n\n```\n public let data: Regex;\n\n public constructor(data: Regex) {\n this.data = data;\n compiled = compileFormatted(format());\n }\n```\n\nA compiled regex exposes many of the same capabilities as `Regex`, but they are\nmore efficient to use repeatedly.\n\n```\n public found(text: String): Boolean { compiledFound(compiled, text) }\n\n public find(text: String): Map\u003cString, Group\u003e | Bubble {\n compiledFind(compiled, text, regexRefs)\n }\n\n public replace(\n text: String, format: fn (Map\u003cString, Group\u003e): String\n ): String {\n compiledReplace(compiled, text, format, regexRefs)\n }\n```\n\nTODO(tjp, regex): Public method for replace with named references.\nTODO(tjp, regex): Any static checking?\n\n\u003cdetails\u003e\n\n```\n let compiled: AnyValue;\n\n // Extension functions on some backends need the private `compiled` value\n // passed in directly.\n @connected(\u0022CompiledRegex::compiledFound\u0022)\n compiledFound(compiled: AnyValue, text: String): Boolean;\n\n @connected(\u0022CompiledRegex::compiledFind\u0022)\n compiledFind(\n compiled: AnyValue, text: String, regexRefs: RegexRefs\n ): Map\u003cString, Group\u003e | Bubble;\n\n @connected(\u0022CompiledRegex::compileFormatted\u0022)\n compileFormatted(formatted: String): AnyValue;\n\n @connected(\u0022CompiledRegex::compiledReplace\u0022)\n compiledReplace(\n compiled: AnyValue,\n text: String,\n format: fn (Map\u003cString, Group\u003e): String,\n regexRefs: RegexRefs,\n ): String;\n\n @connected(\u0022CompiledRegex::format\u0022)\n format(): String { new RegexFormatter().format(data) }\n```\n\n\u003c/details\u003e\n\n```\n}\n```\n\n## Private implementation matters\n\nSome regex logic can be shared across backends. These features aren't directly\nexported to the user, however.\n\nThe intent is that these support features only get included in compiled Temper\ncode if usage depends on dynamically constructed regexes. If all regex building\nis done as stable values, we hope to generated backend compiled regexes purely\nat Temper compile time.\n\n### RegexFormatter\n\n\u003cdetails\u003e\n\n```\nclass RegexFormatter {\n let out: ListBuilder\u003cString\u003e = new ListBuilder\u003cString\u003e();\n\n public format(regex: Regex): String {\n pushRegex(regex)\n out.join(\u0022\u0022) { (x);; x }\n }\n\n pushRegex(regex: Regex): Void {\n match (regex) {\n // Aggregate types.\n is Capture -\u003e pushCapture(regex);\n is CodePoints -\u003e pushCodePoints(regex, false);\n is CodeRange -\u003e pushCodeRange(regex);\n is CodeSet -\u003e pushCodeSet(regex);\n is Or -\u003e pushOr(regex);\n is Repeat -\u003e pushRepeat(regex);\n is Sequence -\u003e pushSequence(regex);\n // Specials.\n // Some of these will need to be customized on future backends.\n Begin -\u003e out.add(\u0022^\u0022);\n Dot -\u003e out.add(\u0022.\u0022);\n End -\u003e out.add(\u0022\u0024\u0022);\n WordBoundary -\u003e out.add(\u0022\\\\b\u0022);\n // Special sets.\n Digit -\u003e out.add(\u0022\\\\d\u0022);\n Space -\u003e out.add(\u0022\\\\s\u0022);\n Word -\u003e out.add(\u0022\\\\w\u0022);\n // ...\n }\n }\n\n pushCapture(capture: Capture): Void {\n out.add(\u0022(\u0022);\n // TODO(tjp, regex): Consistent name validation rules for all backends???\n // TODO(tjp, regex): Validate here or in `Capture` constructor???\n // TODO(tjp, regex): Validate here or where against reused names???\n pushCaptureName(out, capture.name);\n pushRegex(capture.item);\n out.add(\u0022)\u0022);\n }\n\n @connected(\u0022RegexFormatter::pushCaptureName\u0022)\n pushCaptureName(out: ListBuilder\u003cString\u003e, name: String): Void {\n // All so far except Python use this form.\n out.add(\u0022?\u003c\u0024{name}\u003e\u0022);\n }\n\n pushCode(code: Int, insideCodeSet: Boolean): Void {\n // Expose private property to extension.\n pushCodeTo(out, code, insideCodeSet);\n // TODO(tjp, regex): Implement more in Temper once we can.\n // if (escapeCodes[code] \u0026\u0026 false) {\n // out.add(\u0022\\\\\u0022);\n // // TODO(tjp, regex): How to convert back to strings?\n // }\n }\n\n @connected(\u0022RegexFormatter::pushCodeTo\u0022)\n pushCodeTo(out: ListBuilder\u003cString\u003e, code: Int, insideCodeSet: Boolean): Void;\n\n pushCodePoints(codePoints: CodePoints, insideCodeSet: Boolean): Void {\n for (\n var slice = codePoints.value.codePoints;\n !slice.isEmpty;\n slice = slice.advance(1)\n ) {\n pushCode(slice.read(), insideCodeSet);\n }\n }\n\n pushCodeRange(codeRange: CodeRange): Void {\n out.add(\u0022[\u0022);\n pushCodeRangeUnwrapped(codeRange);\n out.add(\u0022]\u0022);\n }\n\n pushCodeRangeUnwrapped(codeRange: CodeRange): Void {\n pushCode(codeRange.min, true);\n out.add(\u0022-\u0022);\n pushCode(codeRange.max, true);\n }\n\n pushCodeSet(codeSet: CodeSet): Void {\n let adjusted = adjustCodeSet(codeSet, regexRefs);\n match (adjusted) {\n is CodeSet -\u003e do {\n out.add(\u0022[\u0022);\n if (adjusted.negated) {\n out.add(\u0022^\u0022);\n }\n for (var i = 0; i \u003c adjusted.items.length; i += 1) {\n pushCodeSetItem(adjusted.items[i]);\n }\n out.add(\u0022]\u0022);\n }\n else -\u003e pushRegex(adjusted);\n }\n }\n\n @connected(\u0022RegexFormatter::adjustCodeSet\u0022)\n adjustCodeSet(codeSet: CodeSet, regexRefs: RegexRefs): Regex { codeSet }\n\n pushCodeSetItem(codePart: CodePart): Void {\n match (codePart) {\n is CodePoints -\u003e pushCodePoints(codePart, true);\n is CodeRange -\u003e pushCodeRangeUnwrapped(codePart);\n is SpecialSet -\u003e pushRegex(codePart);\n }\n }\n\n pushOr(or: Or): Void {\n if (!or.items.isEmpty) {\n out.add(\u0022(?:\u0022);\n // TODO(tjp, regex): See #822. Until `this` works better, no this in funs.\n // TODO(tjp, regex): So just manually loop here. Sometimes faster, anyway?\n pushRegex(or.items[0]);\n for (var i = 1; i \u003c or.items.length; i += 1) {\n out.add(\u0022|\u0022);\n pushRegex(or.items[i]);\n }\n out.add(\u0022)\u0022);\n }\n }\n\n pushRepeat(repeat: Repeat): Void {\n // Always wrap the main sub-pattern here to make life easy\n out.add(\u0022(?:\u0022);\n pushRegex(repeat.item);\n out.add(\u0022)\u0022);\n // Then add the repetition part.\n let min = repeat.min;\n let max = repeat.max;\n if (false) {\n } else if (min == 0 \u0026\u0026 max == 1) {\n out.add(\u0022?\u0022);\n } else if (min == 0 \u0026\u0026 max == null) {\n out.add(\u0022*\u0022);\n } else if (min == 1 \u0026\u0026 max == null) {\n out.add(\u0022+\u0022);\n } else {\n out.add(\u0022{\u0024{min.toString()}\u0022);\n if (min != max) {\n out.add(\u0022,\u0022);\n if (max != null) {\n out.add(max.as\u003cInt\u003e().toString());\n }\n }\n out.add(\u0022}\u0022);\n }\n if (repeat.reluctant) {\n out.add(\u0022?\u0022);\n }\n }\n\n pushSequence(sequence: Sequence): Void {\n // TODO(tjp, regex): Foreach loop/function would be nice.\n for (var i = 0; i \u003c sequence.items.length; i += 1) {\n pushRegex(sequence.items[i]);\n }\n }\n\n // Put this here instead of the data model for now because I'm not sure this\n // makes sense to be part of the public api right now.\n public maxCode(codePart: CodePart): Int | Null {\n match (codePart) {\n is CodePoints -\u003e do {\n // Iterating code points is the hardest of the current cases.\n let value = codePart.value;\n if (value.isEmpty) {\n null\n } else {\n // My kingdom for a fold, or even just a max, in builtins.\n var max = 0;\n for (\n var slice = value.codePoints;\n !slice.isEmpty;\n slice = slice.advance(1)\n ) {\n let next = slice.read();\n if (next \u003e max) {\n max = next;\n }\n }\n max\n }\n }\n // Others below are easy for now.\n is CodeRange -\u003e codePart.max;\n Digit -\u003e \u00229\u0022.codePoints.read();\n Space -\u003e \u0022 \u0022.codePoints.read();\n Word -\u003e \u0022z\u0022.codePoints.read();\n // Actually unexpected, ever, but eh.\n else -\u003e null;\n }\n }\n}\n```\n\n\u003c/details\u003e\n" ], "names": [ "CompiledRegex", "text", "format", "Regex", "compiled", "found", "find", "replace", "Capture", "name", "item", "CodePart", "CodePoints", "value", "Special", "SpecialSet", "CodeRange", "min", "max", "CodeSet", "items", "negated", "Or", "Repeat", "reluctant", "Sequence", "Group", "codePointsBegin", "RegexRefs", "codePoints", "group", "orObject", "data", "regexRefs", "RegexFormatter", "out", "regex", "fn", "x", "return", "Begin", "Dot", "End", "WordBoundary", "Digit", "Space", "Word", "capture", "code", "insideCodeSet", "slice", "codeRange", "codeSet", "adjusted", "i", "codePart", "or", "repeat", "sequence", "next", "entire", "oneOrMore", "optional" ], "mappings": "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" }
|
package/temporal.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import {
|
|
2
|
+
modIntInt as modIntInt_298, listify as listify_42, intToString as intToString_252, stringCodePoints as stringCodePoints_201, strCat as strCat_57
|
|
3
|
+
} from "@temperlang/core";
|
|
4
|
+
// Type nym`std//temporal.temper.md`.Date connected to globalThis.Date
|
|
5
|
+
/** @type {Array<number>} */
|
|
6
|
+
const daysInMonth_293 = listify_42(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
|
|
7
|
+
/**
|
|
8
|
+
* @param {number} year_295
|
|
9
|
+
* @returns {boolean}
|
|
10
|
+
*/
|
|
11
|
+
function isLeapYear_294(year_295) {
|
|
12
|
+
let return_296;
|
|
13
|
+
let t_297;
|
|
14
|
+
if (modIntInt_298(year_295, 4) === 0) {
|
|
15
|
+
if (modIntInt_298(year_295, 100) !== 0) {
|
|
16
|
+
return_296 = true;
|
|
17
|
+
} else {
|
|
18
|
+
t_297 = modIntInt_298(year_295, 400);
|
|
19
|
+
return_296 = t_297 === 0;
|
|
20
|
+
}
|
|
21
|
+
} else {
|
|
22
|
+
return_296 = false;
|
|
23
|
+
}
|
|
24
|
+
return return_296;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* @param {string} padding_300
|
|
28
|
+
* @param {number} num_301
|
|
29
|
+
* @returns {string}
|
|
30
|
+
*/
|
|
31
|
+
function pad_299(padding_300, num_301) {
|
|
32
|
+
let return_302;
|
|
33
|
+
let t_303;
|
|
34
|
+
const decimal_304 = intToString_252(num_301, 10);
|
|
35
|
+
let t_305 = stringCodePoints_201(decimal_304);
|
|
36
|
+
let decimalCodePoints_306 = t_305;
|
|
37
|
+
let sign_307;
|
|
38
|
+
if (decimalCodePoints_306.read() === 45) {
|
|
39
|
+
sign_307 = "-";
|
|
40
|
+
t_303 = decimalCodePoints_306.advance(1);
|
|
41
|
+
decimalCodePoints_306 = t_303;
|
|
42
|
+
} else {
|
|
43
|
+
sign_307 = "";
|
|
44
|
+
}
|
|
45
|
+
const paddingCp_308 = stringCodePoints_201(padding_300);
|
|
46
|
+
const nNeeded_309 = paddingCp_308.length - decimalCodePoints_306.length;
|
|
47
|
+
if (nNeeded_309 <= 0) {
|
|
48
|
+
return_302 = decimal_304;
|
|
49
|
+
} else {
|
|
50
|
+
const pad_310 = paddingCp_308.limit(nNeeded_309).toString();
|
|
51
|
+
const decimalOnly_311 = decimalCodePoints_306.toString();
|
|
52
|
+
return_302 = strCat_57(sign_307, pad_310, decimalOnly_311);
|
|
53
|
+
}
|
|
54
|
+
return return_302;
|
|
55
|
+
}
|
package/temporal.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "version": 3, "file": "js/std/temporal.js", "sources": [ "std/temporal.temper.md" ], "sourcesContent": [ "# Temporal\n\nWe're creating an initial Date type to help with developing\nTemper's machinery to connect to existing Date types in\ntarget languages.\n\nSome facts about the Gregorian calendar.\n\n /** Indexed by the month number: 1 = January */\n let daysInMonth = [\n 0,\n /* January */ 31,\n /* February */ 28, // Special case leap days\n /* March */ 31,\n /* April */ 30,\n /* May */ 31,\n /* June */ 30,\n /* July */ 31,\n /* August */ 31,\n /* September */ 30,\n /* October */ 31,\n /* November */ 30,\n /* December */ 31,\n ];\n\n let isLeapYear(year: Int): Boolean {\n year % 4 == 0 \u0026\u0026 (year % 100 != 0 || year % 400 == 0)\n }\n\n /**\n * If the decimal representation of \\|num\\| is longer than [padding],\n * then that representation.\n * Otherwise any sign for [num] followed by the prefix of [padding]\n * that would bring the integer portion up to the length of [padding].\n *\n * ```temper\n * pad(\u00220000\u0022, 123) == \u00220123\u0022) \u0026\u0026\n * pad(\u0022000\u0022, 123) == \u0022123\u0022) \u0026\u0026\n * pad(\u002200\u0022, 123) == \u0022123\u0022) \u0026\u0026\n * pad(\u00220000\u0022, -123) == \u0022-0123\u0022) \u0026\u0026\n * pad(\u0022000\u0022, -123) == \u0022-123\u0022) \u0026\u0026\n * pad(\u002200\u0022, -123) == \u0022-123\u0022)\n * ```\n */\n let pad(padding: String, num: Int): String {\n let decimal = num.toString(10);\n var decimalCodePoints = decimal.codePoints;\n let sign: String;\n if (decimalCodePoints.read() == 45 /* - */) {\n sign = \u0022-\u0022;\n decimalCodePoints = decimalCodePoints.advance(1);\n } else {\n sign = \u0022\u0022;\n }\n let paddingCp = padding.codePoints;\n let nNeeded = paddingCp.length - decimalCodePoints.length;\n if (nNeeded \u003c= 0) {\n decimal\n } else {\n let pad = paddingCp.limit(nNeeded).toString();\n let decimalOnly = decimalCodePoints.toString();\n \u0022\u0024{sign}\u0024{pad}\u0024{decimalOnly}\u0022\n }\n }\n\nHere's just enough of a Date type to get us started.\n\n /**\n * A Date identifies a day in the proleptic Gregorian calendar.\n * It is unconnected to a time of day or a timezone.\n */\n @connected(\u0022Date\u0022)\n export class Date {\n /** The year. 1900 means 1900. */\n @connected(\u0022Date::getYear\u0022)\n public year: Int;\n /** The month of the year in [1, 12]. */\n @connected(\u0022Date::getMonth\u0022)\n public month: Int;\n /**\n * The day of the month in [1, 31]\n * additionally constrained by the length of [month].\n */\n @connected(\u0022Date::getDay\u0022)\n public day: Int;\n\n @connected(\u0022Date::constructor\u0022)\n public constructor(year: Int, month: Int, day: Int): Void | Bubble {\n if (1 \u003c= month \u0026\u0026 month \u003c= 12 \u0026\u0026\n 1 \u003c= day \u0026\u0026 (\n (month != 2 || day != 29)\n ? day \u003c= daysInMonth[month]\n : isLeapYear(year))) {\n this.year = year;\n this.month = month;\n this.day = day;\n } else {\n bubble();\n }\n }\n\n /** An ISO 8601 Date string with dashes like \u00222000-12-31\u0022. */\n @connected(\u0022Date::toString\u0022)\n public toString(): String {\n \u0022\u0024{pad(\u00220000\u0022, year)\n }-\u0024{pad(\u002200\u0022, month)\n }-\u0024{pad(\u002200\u0022, day)}\u0022\n }\n\n /**\n * The count of whole years between the two dates.\n *\n * Think of this as floor of the magnitude of a range:\n *\n * ⌊ [start, end] ⌋\n *\n * If you think of it as subtraction, you have to reverse\n * the order of arguments.\n *\n * ⌊ end - start ⌋, NOT ⌊ start - end ⌋\n *\n * \u0022Whole year\u0022 is based on month/day calculations, not\n * day-of-year. This means that there is one full year\n * between 2020-03-01 and 2021-03-01 even though, because\n * February of 2020 has 29 days, 2020-03-01 is the 61st\n * day of 2020 but 2021-03-01 is only the 60th day of\n * that year.\n */\n @connected(\u0022Date::yearsBetween\u0022)\n public static let yearsBetween(start: Date, end: Date): Int {\n let yearDelta = end.year - start.year;\n let monthDelta = end.month - start.month;\n yearDelta - (\n // If the end month/day is before the start's then we\n // don't have a full year.\n (monthDelta \u003c 0 || monthDelta == 0 \u0026\u0026 end.day \u003c start.day)\n ? 1 : 0)\n }\n\n /** Today's date in UTC */\n // TODO: take a zone\n @connected(\u0022Date::today\u0022)\n public static let today(): Date;\n };\n\nTODO: an auto-balancing Date builder.\nParse from ISO\nOther temporal values\nDay of week\n" ], "names": [ "daysInMonth", "isLeapYear", "year", "return", "pad", "padding", "num", "decimal", "decimalCodePoints", "sign", "paddingCp", "nNeeded", "decimalOnly" ], "mappings": "AASI;AAAA;AAAA;AA+Da,sEAsEoB;AArI7B,4BAAW;AAAf,KAAI,CAAAA,eAAW,EAAG,WAAC,CACjB,CAAC,CACe,GAAE,CACF,GAAE,CACF,GAAE,CACF,GAAE,CACF,GAAE,CACF,GAAE,CACF,GAAE,CACF,GAAE,CACF,GAAE,CACF,GAAE,CACF,GAAE,CACF,GAAE,CACnB;AAED,yDAEC;AAFD,QAAI,CAAAC,cAAU,AAAd,CAAeC,QAAS,CAEvB,AAFkC,EAAA;AAAR,MAAAC,UAAO;AACM,WAAU,CAAA;AAA/C,MAAK,aAAC,CAAA,AAAND,QAAI,CAAG,EAAC,KAAI,EAAC;AAAK,QAAK,aAAC,CAAA,AAANA,QAAI,CAAG,IAAG,KAAI,EAAC;AAAA,MAAAC,UAAA;AAAA;AAAI,aAAU,AAAL,cAAC,CAAA,AAAND,QAAI,CAAG,IAAG,EAAA;AAAV,MAAAC,UAAA,EAAe,AAAf,MAAU,IAAI,EAAC;AAAA;AAAA;AAAC,IAAAA,UAAA;AAAA;AACvD,QAAA,AAF0B,CAAAA,UAAA;AAE1B;AAiBD,sFAmBC;AAnBD,QAAI,CAAAC,OAAG,AAAP,CAAQC,WAAe,CAAE,CAAAC,OAAQ,CAmBhC,AAnB0C,EAAA;AAAP,MAAAH,UAAM;AAMlB,WAA4B,CAAA;AALlD,OAAI,CAAAI,WAAO,EAAO,gBAAQ,CAAA,AAAZD,OAAG,CAAU,GAAE,CAAC;AACN,WAAkB,EAAA,AAAV,qBAAU,CAAA,AAAlBC,WAAO,CAAW,CAAA;AAAvC,KAAC,CAAAC,qBAAiB,EAAG,MAAkB;AAC1C,KAAI,CAAAC,QAAY;AACZ,MAAkB,AAAlBD,qBAAiB,CAAC,IAAI,EAAE,IAAI,GAAE;AAChC,IAAAC,QAAI,AAAJ,EAAU,AAAH,IAAG;AACU,WAA4B,AAA5B,CAAAD,qBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAAhD,IAAAA,qBAAiB,AAAjB,EAAgD,AAA5B,MAA4B;AACjD;AACC,IAAAC,QAAI,AAAJ,EAAS,AAAF,GAAE;AAAA;AAEX,OAAI,CAAAC,aAAS,EAAW,qBAAU,CAAA,AAAlBL,WAAO,CAAW;AAClC,OAAI,CAAAM,WAAO,EAAG,CAAAD,aAAS,CAAO,MAAA,AAAhB,EAAmB,CAAAF,qBAAiB,CAAO;AAAA,MACrDG,WAAO,GAAI,EAAC;AACd,IAAAR,UAAA,EAAO,AAAP,CAAAI,WAAO;AAAA;AAEP,SAAI,CAAAH,OAAG,EAA4B,AAAzB,CAAAM,aAAS,CAAC,KAAK,CAACC,WAAO,CAAC,CAAC,QAAQ,EAAE;AAC7C,SAAI,CAAAC,eAAW,EAAqB,AAAlB,CAAAJ,qBAAiB,CAAC,QAAQ,EAAE;AAC9C,IAAAL,UAAA,EAA6B,AAA7B,WAAGM,QAAI,CAAG,CAAAL,OAAG,CAAG,CAAAQ,eAAW,CAAE;AAC9B;AACF,QAAA,AAnBmC,CAAAT,UAAA;AAmBnC" }
|
package/testing.js
CHANGED
|
@@ -1,62 +1,223 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
2
|
+
strict as strict__10
|
|
3
|
+
} from "assert";
|
|
4
|
+
import {
|
|
5
|
+
listBuilderAdd as listBuilderAdd_4, listBuilderToList as listBuilderToList_14, listJoin as listJoin_24, listify as listify_42, pairConstructor as pairConstructor_44, listMap as listMap_45, listGet as listGet_53, globalConsole as vGlobalConsole__47_56, strCat as strCat_57
|
|
3
6
|
} from "@temperlang/core";
|
|
7
|
+
export class Test {
|
|
8
|
+
/**
|
|
9
|
+
* @param {boolean} success_1
|
|
10
|
+
* @param {() => string} message_2
|
|
11
|
+
*/
|
|
12
|
+
assert(success_1, message_2) {
|
|
13
|
+
if (! success_1) {
|
|
14
|
+
this.#_passing_3 = false;
|
|
15
|
+
listBuilderAdd_4(this.#_messages_5, message_2());
|
|
16
|
+
} else {
|
|
17
|
+
void 0;
|
|
18
|
+
}
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* @param {boolean} success_7
|
|
23
|
+
* @param {() => string} message_8
|
|
24
|
+
* @returns {void}
|
|
25
|
+
*/
|
|
26
|
+
assertHard(success_7, message_8) {
|
|
27
|
+
this.assert(success_7, message_8);
|
|
28
|
+
if (! success_7) {
|
|
29
|
+
this.#_failedOnAssert_9 = true;
|
|
30
|
+
strict__10.fail(this.messagesCombined());
|
|
31
|
+
} else {
|
|
32
|
+
void 0;
|
|
33
|
+
}
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
/** @returns {void} */
|
|
37
|
+
softFailToHard() {
|
|
38
|
+
if (this.hasUnhandledFail) {
|
|
39
|
+
this.#_failedOnAssert_9 = true;
|
|
40
|
+
strict__10.fail(this.messagesCombined());
|
|
41
|
+
} else {
|
|
42
|
+
void 0;
|
|
43
|
+
}
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
/** @returns {boolean} */
|
|
47
|
+
get passing() {
|
|
48
|
+
return this.#_passing_3;
|
|
49
|
+
}
|
|
50
|
+
/** @returns {Array<string>} */
|
|
51
|
+
messages() {
|
|
52
|
+
return listBuilderToList_14(this.#_messages_5);
|
|
53
|
+
}
|
|
54
|
+
/** @returns {boolean} */
|
|
55
|
+
get failedOnAssert() {
|
|
56
|
+
return this.#_failedOnAssert_9;
|
|
57
|
+
}
|
|
58
|
+
/** @returns {boolean} */
|
|
59
|
+
get hasUnhandledFail() {
|
|
60
|
+
let t_17;
|
|
61
|
+
if (this.#_failedOnAssert_9) {
|
|
62
|
+
t_17 = true;
|
|
63
|
+
} else {
|
|
64
|
+
t_17 = this.#_passing_3;
|
|
65
|
+
}
|
|
66
|
+
return ! t_17;
|
|
67
|
+
}
|
|
68
|
+
/** @returns {string | null} */
|
|
69
|
+
messagesCombined() {
|
|
70
|
+
let return_19;
|
|
71
|
+
let t_20;
|
|
72
|
+
let t_21;
|
|
73
|
+
if (! this.#_messages_5.length) {
|
|
74
|
+
return_19 = null;
|
|
75
|
+
} else {
|
|
76
|
+
t_20 = this.#_messages_5;
|
|
77
|
+
function fn_22(it_23) {
|
|
78
|
+
return it_23;
|
|
79
|
+
}
|
|
80
|
+
t_21 = listJoin_24(t_20, ", ", fn_22);
|
|
81
|
+
return_19 = t_21;
|
|
82
|
+
}
|
|
83
|
+
return return_19;
|
|
84
|
+
}
|
|
85
|
+
/** @type {boolean} */
|
|
86
|
+
#_failedOnAssert_9;
|
|
87
|
+
/** @type {boolean} */
|
|
88
|
+
#_passing_3;
|
|
89
|
+
/** @type {Array<string>} */
|
|
90
|
+
#_messages_5;
|
|
91
|
+
/**
|
|
92
|
+
* @param {boolean} _failedOnAssert_25
|
|
93
|
+
* @param {boolean} _passing_26
|
|
94
|
+
* @param {Array<string>} _messages_27
|
|
95
|
+
*/
|
|
96
|
+
constructor(_failedOnAssert_25, _passing_26, _messages_27) {
|
|
97
|
+
let t_28;
|
|
98
|
+
if (!(_failedOnAssert_25 !== void 0)) {
|
|
99
|
+
_failedOnAssert_25 = false;
|
|
100
|
+
}
|
|
101
|
+
if (!(_passing_26 !== void 0)) {
|
|
102
|
+
_passing_26 = true;
|
|
103
|
+
}
|
|
104
|
+
if (!(_messages_27 !== void 0)) {
|
|
105
|
+
t_28 = [];
|
|
106
|
+
_messages_27 = t_28;
|
|
107
|
+
}
|
|
108
|
+
this.#_failedOnAssert_9 = _failedOnAssert_25;
|
|
109
|
+
this.#_passing_3 = _passing_26;
|
|
110
|
+
this.#_messages_5 = _messages_27;
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
/** @type {Type_29} */
|
|
115
|
+
export const TestName = "String: Type";
|
|
116
|
+
/** @type {Type_29} */
|
|
117
|
+
export const TestFun = "fn (Test): (Void | Bubble): Type";
|
|
118
|
+
/** @type {Type_29} */
|
|
119
|
+
export const TestCase = "Pair\u003cString, fn (Test): (Void | Bubble)\u003e: Type";
|
|
120
|
+
/** @type {Type_29} */
|
|
121
|
+
export const TestFailureMessage = "String: Type";
|
|
122
|
+
/** @type {Type_29} */
|
|
123
|
+
export const TestResult = "Pair\u003cString, List\u003cString\u003e\u003e: Type";
|
|
4
124
|
/**
|
|
5
|
-
* @
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
export const TestFixtureBase = new InterfaceType_1("TestFixtureBase", [], [], 1);
|
|
9
|
-
;
|
|
10
|
-
/** @type {boolean} */
|
|
11
|
-
let passing_352 = true;
|
|
12
|
-
/** @type {Array<string>} */
|
|
13
|
-
let t_353 = [];
|
|
14
|
-
/** @type {Array<string>} */
|
|
15
|
-
let messages_354 = t_353;
|
|
16
|
-
/**
|
|
17
|
-
* @param {string} name_355
|
|
18
|
-
* @param {() => void} body_356
|
|
19
|
-
* @returns {void}
|
|
125
|
+
* @param {Array<Pair_46<string, (arg0: Test) => void>>} testCases_30
|
|
126
|
+
* @returns {Array<Pair_46<string, Array<string>>>}
|
|
20
127
|
*/
|
|
21
|
-
export function
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
128
|
+
export function processTestCases(testCases_30) {
|
|
129
|
+
function fn_31(testCase_32) {
|
|
130
|
+
let t_33;
|
|
131
|
+
let t_34;
|
|
132
|
+
let t_35;
|
|
133
|
+
const key_36 = testCase_32.key;
|
|
134
|
+
const fun_37 = testCase_32.value;
|
|
135
|
+
const test_38 = new Test();
|
|
136
|
+
let hadBubble_39;
|
|
137
|
+
try {
|
|
138
|
+
fun_37(test_38);
|
|
139
|
+
hadBubble_39 = false;
|
|
140
|
+
} catch {
|
|
141
|
+
hadBubble_39 = true;
|
|
142
|
+
}
|
|
143
|
+
const messages_40 = test_38.messages();
|
|
144
|
+
let failures_41;
|
|
145
|
+
if (test_38.passing) {
|
|
146
|
+
failures_41 = listify_42();
|
|
147
|
+
} else {
|
|
148
|
+
if (hadBubble_39) {
|
|
149
|
+
t_33 = test_38.failedOnAssert;
|
|
150
|
+
t_35 = ! t_33;
|
|
151
|
+
} else {
|
|
152
|
+
t_35 = false;
|
|
153
|
+
}
|
|
154
|
+
if (t_35) {
|
|
155
|
+
const allMessages_43 = messages_40.slice();
|
|
156
|
+
{
|
|
157
|
+
listBuilderAdd_4(allMessages_43, "Bubble");
|
|
158
|
+
t_34 = listBuilderToList_14(allMessages_43);
|
|
159
|
+
failures_41 = t_34;
|
|
160
|
+
}
|
|
161
|
+
} else {
|
|
162
|
+
failures_41 = messages_40;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return pairConstructor_44(key_36, failures_41);
|
|
166
|
+
}
|
|
167
|
+
return listMap_45(testCases_30, fn_31);
|
|
168
|
+
};
|
|
169
|
+
/** @param {Array<Pair_46<string, Array<string>>>} testResults_47 */
|
|
170
|
+
export function reportTestResults(testResults_47) {
|
|
171
|
+
let return_48;
|
|
172
|
+
let t_49;
|
|
173
|
+
let t_50;
|
|
174
|
+
let i_51 = 0;
|
|
175
|
+
s__1248_52: {
|
|
176
|
+
while (true) {
|
|
177
|
+
t_49 = testResults_47.length;
|
|
178
|
+
if (i_51 < t_49) {
|
|
179
|
+
try {
|
|
180
|
+
t_50 = listGet_53(testResults_47, i_51);
|
|
181
|
+
} catch {
|
|
182
|
+
break;
|
|
183
|
+
}
|
|
184
|
+
const testResult_54 = t_50;
|
|
185
|
+
const failureMessages_55 = testResult_54.value;
|
|
186
|
+
if (! failureMessages_55.length) {
|
|
187
|
+
vGlobalConsole__47_56.log(strCat_57(testResult_54.key, ": Passed"));
|
|
188
|
+
} else {
|
|
189
|
+
function fn_58(it_59) {
|
|
190
|
+
return it_59;
|
|
191
|
+
}
|
|
192
|
+
const message_60 = listJoin_24(failureMessages_55, ", ", fn_58);
|
|
193
|
+
vGlobalConsole__47_56.log(strCat_57(testResult_54.key, ": Failed ", message_60));
|
|
194
|
+
}
|
|
195
|
+
i_51 = i_51 + 1;
|
|
196
|
+
} else {
|
|
197
|
+
return_48 = void 0;
|
|
198
|
+
break s__1248_52;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
throw Error();
|
|
202
|
+
}
|
|
203
|
+
return return_48;
|
|
204
|
+
};
|
|
205
|
+
/** @param {Array<Pair_46<string, (arg0: Test) => void>>} testCases_61 */
|
|
206
|
+
export function runTestCases(testCases_61) {
|
|
207
|
+
reportTestResults(processTestCases(testCases_61));
|
|
208
|
+
return;
|
|
43
209
|
};
|
|
44
210
|
/**
|
|
45
|
-
* @param {
|
|
46
|
-
* @param {() => string} message_365
|
|
211
|
+
* @param {(arg0: Test) => void} testFun_62
|
|
47
212
|
* @returns {void}
|
|
48
213
|
*/
|
|
49
|
-
export function
|
|
50
|
-
let
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
return return_366;
|
|
214
|
+
export function runTest(testFun_62) {
|
|
215
|
+
let return_63;
|
|
216
|
+
const test_64 = new Test();
|
|
217
|
+
{
|
|
218
|
+
testFun_62(test_64);
|
|
219
|
+
test_64.softFailToHard();
|
|
220
|
+
return_63 = void 0;
|
|
221
|
+
}
|
|
222
|
+
return return_63;
|
|
59
223
|
};
|
|
60
|
-
/** @type {void} */
|
|
61
|
-
const return_368 = void 0;
|
|
62
|
-
export default return_368;
|
package/testing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{ "version": 3, "file": "OUTPUT_ROOT/temper-std/js/testing.js", "sources": [ "std/testing.temper.md" ], "sourcesContent": [ "For now, we use mutable global state to track test results in the interpreter.\n\n private var passing: Boolean = true;\n private var messages = new ListBuilder\u003cString\u003e();\n\nTODO We looked at the idea of test blocks, but do we still support this?\n\n @connected(\u0022::test\u0022)\n export let test(name: String, body: fn (): Void): Void {\n passing = true;\n messages = new ListBuilder\u003cString\u003e();\n // TODO exception handling?\n body();\n if (passing) {\n console.log(\u0022\u0024{name}: Passed\u0022);\n } else {\n console.log(\u0022\u0024{name}: Failed \u0024{messages.join(\u0022\\n\u0022) { (it);; it }}\u0022);\n }\n }\n\nCurrently for tests, you should extend `TestFixtureBase` and then decorate test\nmethods inside your test class with `@test`.\n\n export interface TestFixtureBase {\n\n }\n\nWe currently support a single `assert` method, for which we still need to refine\nhow we provide failure messages.\n\n @connected(\u0022::assert\u0022)\n export let assert(success: Boolean, message: fn (): String): Void {\n if (!success) {\n passing = false;\n messages.add(message());\n }\n }\n" ], "names": [ "TestFixtureBase", "passing", "messages", "test", "name", "body", "return", "fn", "it", "assert", "success", "message" ], "mappings": "AAEI;AAAA;AAAA;AAqBiB,2CAAgB;AAAhB,aAAAA,eAAA,wCAAgB,CAAA,AAAhB,GAAgB,CAAA,AAAhB,GAAgB,CAAA,AAAhB,EAAgB;AAAA,CAAA;AArBZ,sBAAO;AAAjB,GAAC,CAAAC,WAAO,EAAY,KAAI;AACZ,4BAAyB;AAAzB,SAAyB,EAAA,AAAzB,GAAyB,CAAA;AAApC,4BAAQ;AAAT,GAAC,CAAAC,YAAQ,EAAG,MAAyB;AAKzC;AAUN,MAAA,AAVM,SAAI,CAAAC,IAAI,AAAR,CAASC,QAAY,CAAE,CAAAC,QAAiB,CAU9C,AAVsD,EAAA;AAAL,MAAAC,UAAI;AAQc,YAAA;AAAjC,WAAiC;AAEnE,EAAAA,UAAA,UAAA;AATC,EAAAL,WAAO,AAAP,EAAc,AAAJ,KAAI;AACH,WAAyB,EAAA,AAAzB,GAAyB,CAAA;AAApC,EAAAC,YAAQ,AAAR,EAAoC,AAAzB,MAAyB;AAEpC,EAAAG,QAAI,EAAE;AAAA,MACFJ,WAAO;AACT,0BAAO,CAAC,GAAsB,CAAA,AAAlB,UAAGG,QAAI,CAAC,WAAQ,CAAC,CAAC;AAAA;AAEqB,aAAAG,MAAA,CAAGC,MAAE,CAAQ,AAAJ;AAAA,UAAAF,UAAA;AAAA,MAAAA,UAAA,EAAE,AAAF,CAAAE,MAAE;AAAA,YAAA,AAAF,CAAAF,UAAA;AAAE,KAAA;AAAE,YAAAC,MAAA,CAAA;AAAjC,WAAiC,AAAxB,WAAI,CAAA,AAAbL,YAAQ,CAAM,KAAI,CAAE,MAAa,EAAA;AAAhE,0BAAO,CAAC,GAA2D,CAAA,AAAvD,UAAGE,QAAI,CAAC,YAAS,CAAE,MAAiC,CAAE,CAAC;AAAA;AAEtE,QAAA,AAViD,CAAAE,UAAA;AAUjD;AAaM;AAKN,MAAA,AALM,SAAI,CAAAG,MAAM,AAAV,CAAWC,WAAgB,CAAE,CAAAC,WAAsB,CAKzD,AALiE,EAAA;AAAL,MAAAL,UAAI;AAGhD,WAAS;AAEzB,EAAAA,UAAA,UAAA;AALiE,MAC5D,CAAC,CAAAI,WAAO;AACV,IAAAT,WAAO,AAAP,EAAe,AAAL,MAAK;AACF,WAAS,AAAT,CAAAU,WAAO,EAAE,CAAA;AAAb,oBAAG,CAAA,AAAZT,YAAQ,CAAK,MAAS,CAAC;AAE1B;AAAA,QAAA,AAL4D,CAAAI,UAAA;AAK5D,EAAA;AAlCD;AAAA,MAAAA,UAAA,EAkCC,OAAA,AAlCD;AAkCC,eAAAA,UAAA" }
|
|
1
|
+
{ "version": 3, "file": "js/std/testing.js", "sources": [ "std/testing.temper.md" ], "sourcesContent": [ "# Temper test framework\n\n## Test instance\n\nWe currently convert assert and check macro calls into method calls on a `Test`\ninstance.\n\n export class Test {\n\nRecommended default Temper assert is soft, meaning that it records failures for\nreporting but doesn't immediately end test execution on a false value. This lets\nyou check multiple conditions more easily.\n\n @connected(\u0022Test::assert\u0022)\n public assert(success: Boolean, message: fn (): String): Void {\n if (!success) {\n _passing = false;\n _messages.add(message());\n }\n }\n\nTypical hard asserts that end the test on false condition also are available.\n\n @connected(\u0022Test::assertHard\u0022)\n public assertHard(\n success: Boolean,\n message: fn (): String,\n ): Void | Bubble {\n assert(success, message);\n if (!success) {\n // Attempt to distinguish assert fails from others.\n // Sadly, they can still orelse an assert failure, so this isn't\n // flawless.\n _failedOnAssert = true;\n bail();\n }\n }\n\nHarden and end current test on any pending failure if not previously hardened.\nBackends typically insert calls to this if needed, but you can also call it\nmanually at any desired point in your test.\n\n public softFailToHard(): Void | Bubble {\n if (hasUnhandledFail) {\n _failedOnAssert = true;\n bail();\n }\n }\n\nProvide a bailing `Bubble` method here that enables backends to customize\nmessage delivery on failure.\n\n @connected(\u0022Test::bail\u0022)\n bail(): Bubble {\n bubble()\n }\n\nYou can check the current passing state of the test at any time. A test is\ncurrently passing if all soft checks and hard asserts have been succesful.\n\nTODO Does this need to be function call syntax for macro purposes?\n\n @connected(\u0022Test::passing\u0022)\n public get passing(): Boolean { _passing }\n\nMessages access is presented as a function because it likely allocates. Also,\nmessages might be automatically constructed in some cases, so it's possibly\nunwise to depend on their exact formatting.\n\n @connected(\u0022Test::messages\u0022)\n public messages(): List\u003cString\u003e { _messages.toList() }\n\n### Backend helper methods\n\nAvoid using backend helper methods in user code. Their behavior might be\nunreliable on some backends and/or have high risk of changing in future releases\nof Temper.\n\n @connected(\u0022Test::failedOnAssert\u0022)\n public get failedOnAssert(): Boolean { _failedOnAssert }\n\nAdditional helper methods to simplify backend code generation in some contexts.\n\n public get hasUnhandledFail(): Boolean { !(_failedOnAssert || _passing) }\n\nSimple helper to get multiple messages combined for now. We probably want to do\nfancier things in the future, but this can simplify backends for now.\n\n public messagesCombined(): String | Null {\n if (_messages.isEmpty) {\n // Unexpected, but most backends can do something with null.\n null\n } else {\n _messages.join(\u0022, \u0022) { (it);; it }\n }\n }\n\n private var _failedOnAssert: Boolean = false;\n private var _passing: Boolean = true;\n private _messages: ListBuilder\u003cString\u003e = new ListBuilder\u003cString\u003e();\n }\n\n## Interpreter testing support\n\nNOTICE: Don't directly anything in this section. It just exists for the\nimplementation of testing within the interpreter.\n\n export let TestCase = Pair\u003cTestName, TestFun\u003e;\n export let TestFailureMessage = String;\n export let TestFun = fn (Test): Void | Bubble;\n export let TestName = String;\n export let TestResult = Pair\u003cTestName, List\u003cTestFailureMessage\u003e\u003e;\n\n @connected(\u0022::processTestCases\u0022)\n export let processTestCases(testCases: List\u003cTestCase\u003e): List\u003cTestResult\u003e {\n testCases.map { (testCase): TestResult;;\n let { key, value as fun } = testCase;\n let test = new Test();\n // Actually call the test.\n let hadBubble = do {\n fun(test);\n false\n } orelse true;\n // Now get the messages.\n let messages = test.messages();\n let failures: List\u003cTestFailureMessage\u003e = if (test.passing) {\n []\n } else if (hadBubble \u0026\u0026 !test.failedOnAssert) {\n // Despite having 1+ failure messages, we seem to have failed on some\n // Bubble separate from asserts, so add that on.\n let allMessages = messages.toListBuilder();\n allMessages.add(\u0022Bubble\u0022);\n allMessages.toList()\n } else {\n messages\n };\n // Package up with test name.\n new Pair(key, failures)\n }\n }\n\n @connected(\u0022::reportTestResults\u0022)\n export let reportTestResults(testResults: List\u003cTestResult\u003e): Void {\n // TODO Write as junit xml (or tap if we switch to that).\n for (var i = 0; i \u003c testResults.length; i += 1) {\n let testResult = testResults[i];\n let failureMessages = testResult.value;\n if (failureMessages.isEmpty) {\n console.log(\u0022\u0024{testResult.key}: Passed\u0022);\n } else {\n let message = failureMessages.join(\u0022, \u0022) { (it);; it };\n console.log(\u0022\u0024{testResult.key}: Failed \u0024{message}\u0022);\n }\n }\n }\n\n @connected(\u0022::runTestCases\u0022)\n export let runTestCases(testCases: List\u003cTestCase\u003e): Void {\n reportTestResults(processTestCases(testCases));\n }\n\nTODO Is this a better idea than inlining each case? We'd need to generate\n`fun testFunction() { runTest(originalFunctionAsCallback) }` or some such.\n\n export let runTest(testFun: TestFun): Void | Bubble {\n let test = new Test();\n testFun(test);\n test.softFailToHard();\n }\n" ], "names": [ "Test", "success", "message", "_passing", "_messages", "_failedOnAssert", "return", "fn", "it", "TestName", "TestFun", "TestCase", "TestFailureMessage", "TestResult", "processTestCases", "testCases", "testCase", "key", "fun", "test", "hadBubble", "messages", "failures", "allMessages", "reportTestResults", "testResults", "i", "testResult", "failureMessages", "runTestCases", "runTest", "testFun" ], "mappings": "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" }
|
package/config.js
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/** @type {string} */
|
|
2
|
-
export const name = "temper-std";
|
|
3
|
-
;
|
|
4
|
-
/** @type {string} */
|
|
5
|
-
export const version = "0.0.5";
|
|
6
|
-
;
|
|
7
|
-
/** @type {string} */
|
|
8
|
-
export const authors = "Temper Contributors";
|
|
9
|
-
;
|
|
10
|
-
/** @type {string} */
|
|
11
|
-
export const description = "Optional support library provided with Temper";
|
|
12
|
-
;
|
|
13
|
-
/** @type {string} */
|
|
14
|
-
export const homepage = "https://temperlang.dev/";
|
|
15
|
-
;
|
|
16
|
-
/** @type {string} */
|
|
17
|
-
export const license = "Apache-2.0";
|
|
18
|
-
;
|
|
19
|
-
/** @type {string} */
|
|
20
|
-
export const repository = "https://github.com/temper-lang/temper";
|
|
21
|
-
;
|
|
22
|
-
/** @type {string} */
|
|
23
|
-
export const javaGroup = "dev.temperlang";
|
|
24
|
-
;
|
|
25
|
-
/** @type {string} */
|
|
26
|
-
export const javaPackage = "temper.std";
|
|
27
|
-
;
|
|
28
|
-
/** @type {string} */
|
|
29
|
-
export const jsName = "@temperlang/std";
|
|
30
|
-
;
|
|
31
|
-
/** @type {void} */
|
|
32
|
-
const return_369 = void 0;
|
|
33
|
-
export default return_369;
|
package/config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{ "version": 3, "file": "OUTPUT_ROOT/temper-std/js/config.js", "sources": [ "std/config.temper.md" ], "sourcesContent": [ "# Temper Standard Library\n\nThis library holds code that we distribute with Temper but which can be broken\nout from core builtins and also implemented primarily in the Temper language.\n\n export let name = \u0022temper-std\u0022;\n export let version = \u00220.0.5\u0022;\n\n## Metadata\n\n export let authors = \u0022Temper Contributors\u0022;\n export let description = \u0022Optional support library provided with Temper\u0022;\n export let homepage = \u0022https://temperlang.dev/\u0022;\n export let license = \u0022Apache-2.0\u0022;\n export let repository = \u0022https://github.com/temper-lang/temper\u0022;\n\n## Imports\n\nWe might break these out into separate libraries in the future.\n\n import(\u0022./regex.temper.md\u0022);\n import(\u0022./testing.temper.md\u0022);\n\n## Java\n\nWe've chosen to use `temper` as a package prefix for official Temper packages,\nbut to conform to Maven standards, we use a reverse owned domain name for the\ngroup ID.\n\n export let javaGroup = \u0022dev.temperlang\u0022;\n export let javaPackage = \u0022temper.std\u0022;\n\n## JS\n\n export let jsName = \u0022@temperlang/std\u0022;\n" ], "names": [ "name", "version", "authors", "description", "homepage", "license", "repository", "javaGroup", "javaPackage", "jsName", "return" ], "mappings": "AAKe;AAAI,MAAA,AAAR,MAAI,CAAAA,IAAI,EAAG,aAAY;AAAA;AACnB;AAAO,MAAA,AAAX,MAAI,CAAAC,OAAO,EAAG,QAAO;AAAA;AAIjB;AAAO,MAAA,AAAX,MAAI,CAAAC,OAAO,EAAG,sBAAqB;AAAA;AAC/B;AAAW,MAAA,AAAf,MAAI,CAAAC,WAAW,EAAG,gDAA+C;AAAA;AAC7D;AAAQ,MAAA,AAAZ,MAAI,CAAAC,QAAQ,EAAG,0BAAyB;AAAA;AACpC;AAAO,MAAA,AAAX,MAAI,CAAAC,OAAO,EAAG,aAAY;AAAA;AACtB;AAAU,MAAA,AAAd,MAAI,CAAAC,UAAU,EAAG,wCAAuC;AAAA;AAepD;AAAS,MAAA,AAAb,MAAI,CAAAC,SAAS,EAAG,iBAAgB;AAAA;AAC5B;AAAW,MAAA,AAAf,MAAI,CAAAC,WAAW,EAAG,aAAY;AAAA;AAI1B;AAAM,MAAA,AAAV,MAAI,CAAAC,MAAM,EAAG,kBAAiB;AAAA,CAAA;AA7BrC;AAAA,MAAAC,UAAA,EA6BqC,OAAA,AA7BrC;AA6BsC,eAAAA,UAAA" }
|
package/regex__preface.js
DELETED