@cratis/screenplay-language 4.171.0 → 4.172.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.
Files changed (69) hide show
  1. package/dist/bundles/compiler/Diagnostics/DiagnosticCodes.js +1 -1
  2. package/dist/bundles/compiler/Diagnostics/DiagnosticCodes.js.map +1 -1
  3. package/dist/bundles/compiler/Generation/BoundedRegexSamples.js +1 -0
  4. package/dist/bundles/compiler/Generation/FiniteGenerationRules.js +1 -0
  5. package/dist/bundles/compiler/Generation/FinitePatternContainment.js +1 -0
  6. package/dist/bundles/compiler/Generation/GenerationAssessmentCache.js +2 -0
  7. package/dist/bundles/compiler/Generation/GenerationAssessmentCache.js.map +1 -0
  8. package/dist/bundles/compiler/Generation/GenerationChecksum.js +2 -0
  9. package/dist/bundles/compiler/Generation/GenerationChecksum.js.map +1 -0
  10. package/dist/bundles/compiler/Generation/GenerationPattern.js +2 -0
  11. package/dist/bundles/compiler/Generation/GenerationPattern.js.map +1 -0
  12. package/dist/bundles/compiler/Generation/GenerationPatternAssessment.js +2 -0
  13. package/dist/bundles/compiler/Generation/GenerationPatternAssessment.js.map +1 -0
  14. package/dist/bundles/compiler/Generation/GenerationPatternParser.js +2 -0
  15. package/dist/bundles/compiler/Generation/GenerationPatternParser.js.map +1 -0
  16. package/dist/bundles/compiler/Generation/GenerationPatternToken.js +2 -0
  17. package/dist/bundles/compiler/Generation/GenerationPatternToken.js.map +1 -0
  18. package/dist/bundles/compiler/Generation/GenerationRuleProof.js +1 -0
  19. package/dist/bundles/compiler/Generation/InvalidGenerationPattern.js +2 -0
  20. package/dist/bundles/compiler/Generation/InvalidGenerationPattern.js.map +1 -0
  21. package/dist/bundles/compiler/Generation/RegexCharacters.js +2 -0
  22. package/dist/bundles/compiler/Generation/RegexCharacters.js.map +1 -0
  23. package/dist/bundles/compiler/Generation/RegexExpression.js +2 -0
  24. package/dist/bundles/compiler/Generation/RegexExpression.js.map +1 -0
  25. package/dist/bundles/compiler/Generation/RegexFragmentR.js +1 -0
  26. package/dist/bundles/compiler/Generation/RuleConsistency.js +1 -0
  27. package/dist/bundles/compiler/Generation/index.js +1 -0
  28. package/dist/bundles/compiler/Parsing/CommandParser.js +1 -1
  29. package/dist/bundles/compiler/Parsing/CommandParser.js.map +1 -1
  30. package/dist/bundles/compiler/Parsing/GenerationBodyParser.js +2 -0
  31. package/dist/bundles/compiler/Parsing/GenerationBodyParser.js.map +1 -0
  32. package/dist/bundles/compiler/Parsing/GenerationParser.js +1 -1
  33. package/dist/bundles/compiler/Parsing/GenerationParser.js.map +1 -1
  34. package/dist/bundles/compiler/Syntax/ScreenplaySyntaxWalker.js +1 -1
  35. package/dist/bundles/compiler/Syntax/ScreenplaySyntaxWalker.js.map +1 -1
  36. package/dist/bundles/compiler/Syntax/SyntaxCollections.js +1 -1
  37. package/dist/bundles/compiler/Syntax/SyntaxCollections.js.map +1 -1
  38. package/dist/bundles/compiler/Syntax/SyntaxInvariants.js +1 -1
  39. package/dist/bundles/compiler/Syntax/SyntaxInvariants.js.map +1 -1
  40. package/dist/bundles/compiler/Syntax/SyntaxJson.js +1 -1
  41. package/dist/bundles/compiler/Syntax/SyntaxJson.js.map +1 -1
  42. package/dist/bundles/completion-items.js +1 -1
  43. package/dist/bundles/completion-items.js.map +1 -1
  44. package/dist/bundles/completion-planner.js +2 -2
  45. package/dist/bundles/completion-planner.js.map +1 -1
  46. package/dist/bundles/diagnostic-codes.js +1 -1
  47. package/dist/bundles/diagnostic-codes.js.map +1 -1
  48. package/dist/bundles/generation-completions.js +1 -1
  49. package/dist/bundles/generation-completions.js.map +1 -1
  50. package/dist/bundles/hover-content.js +1 -1
  51. package/dist/bundles/hover-content.js.map +1 -1
  52. package/dist/bundles/keyword-docs.js +1 -1
  53. package/dist/bundles/keyword-docs.js.map +1 -1
  54. package/dist/bundles/language.js +1 -1
  55. package/dist/bundles/language.js.map +1 -1
  56. package/dist/bundles/tokens.js +1 -1
  57. package/dist/bundles/tokens.js.map +1 -1
  58. package/dist/bundles/validation.js +1 -1
  59. package/dist/bundles/validation.js.map +1 -1
  60. package/dist/completion-items.d.ts.map +1 -1
  61. package/dist/completion-planner.d.ts.map +1 -1
  62. package/dist/diagnostic-codes.d.ts +2 -0
  63. package/dist/diagnostic-codes.d.ts.map +1 -1
  64. package/dist/generation-completions.d.ts.map +1 -1
  65. package/dist/hover-content.d.ts.map +1 -1
  66. package/dist/keyword-docs.d.ts.map +1 -1
  67. package/dist/language.d.ts.map +1 -1
  68. package/dist/tokens.d.ts.map +1 -1
  69. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"CommandParser.js","names":["header","pattern","routeHeader","sourceStreamPattern","severityPattern","messagePattern","stringBodyPattern","rulePattern","operandPattern","ruleNamePattern","optionalReads","operandKinds","severities","opaqueDirectives","propertyShapedDirectives","names","lookahead","ParserContext","context","line","name","DiagnosticCodes","locationOf","properties","responses","identifier","validations","produces","reads","referenceReads","concurrency","description","documentation","authorize","handler","stream","streamCandidates","child","keyword","firstWord","asProperty","tryParseProperty","scalar","scalarResponsePattern","responseNames","parseCommandResponse","reportInvalidModifierOrder","source","streamName","ambiguous","route","parseCommandStream","isReactionIdentityLine","misplacedReactionIdentity","parseDescription","parseDocumentation","combineAuthorize","parseAuthorize","validate","production","parseProduces","parseHandler","reference","parseReads","captureConcurrency","read","candidates","entry","property","discoveredNames","response","removed","parsed","syntax","commandReadSources","dependencySources","reportLegacyOptionalSuffix","commandName","fence","code","parseCode","rules","requirements","wrapperIndent","owner","condition","parseCondition","message","severity","hasSeverity","directive","matched","unescapeString","rule","valueContext","withSeverity","match","body","wrapped","commandOwner","parseImplementationWrapper","isFile","parseFile","isCode","extra","content","text","operand","parseMappingSource"],"sources":["../../../../../../Compiler/Parsing/CommandParser.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { DiagnosticCodes } from '../Diagnostics/DiagnosticCodes';\nimport { RequirementSyntax } from '../Syntax/Conditions';\nimport { parseCondition } from './ConditionParser';\nimport { AuthorizeSyntax } from '../Syntax/Authorization';\nimport { CommandSyntax, ValidateSyntax, ValidationRuleKind, ValidationRuleSyntax, ValidationSeverity } from '../Syntax/Commands';\nimport { PropertySyntax } from '../Syntax/Declarations';\nimport { CommandStreamSyntax } from '../Syntax/EventSources';\nimport { parseCommandStream } from './EventSourceParser';\nimport { ExpressionSyntax } from '../Syntax/Expressions';\nimport { ProducesSyntax } from '../Syntax/Reactions';\nimport { CommandResponseSyntax } from '../Syntax/Responses';\nimport { pattern } from '../Text/patterns';\nimport { sourceStreamPattern } from '../Text/SourceStreamNames';\nimport { stringBodyPattern, unescapeString } from '../Text/StringLiteral';\nimport { combineAuthorize, parseAuthorize } from './AuthorizeParser';\nimport { parseCommandResponse, scalarResponsePattern } from './CommandResponseParser';\nimport { parseDescription } from './DescriptionParser';\nimport { parseDocumentation } from './DocumentationParser';\nimport { isCode, isFile, parseCode, parseFile, parseHandler, parseImplementationWrapper } from './ImplementationParser';\nimport { CodeBlockSyntax, FileReferenceSyntax, HandlerSyntax, ImplementationSyntax } from '../Syntax/Implementations';\nimport { parseMappingSource } from './ExpressionParser';\nimport { firstWord } from './LineText';\nimport { ParserContext } from './ParserContext';\nimport { isReactionIdentityLine, misplacedReactionIdentity } from './ReactionIdentityParser';\nimport { commandReadSources } from './CommandReadSources';\nimport { dependencySources, ReadsSyntax, ConcurrencySyntax } from '../Syntax/DependencySources';\nimport { captureConcurrency } from './DependencySourceParser';\nimport { parseReads } from './ReadsParser';\nimport { parseProduces } from './ProducesParser';\nimport { reportInvalidModifierOrder, reportLegacyOptionalSuffix, tryParseProperty } from './PropertyLineParser';\nimport { locationOf, SourceLine } from './SourceLine';\n\nconst header = pattern('^command\\\\s+([A-Za-z_]\\\\w*)$');\nconst routeHeader = sourceStreamPattern('^stream\\\\s+[A-Za-z_]\\\\w*\\\\.[A-Za-z_]\\\\w*$');\nconst severityPattern = pattern('\\\\bseverity\\\\s+(\\\\S+)$');\nconst messagePattern = pattern(`\\\\bmessage\\\\s+(?:\"(${stringBodyPattern})\"|(\\\\$strings\\\\.\\\\S*))$`);\nconst rulePattern = pattern('^([\\\\w.]+)\\\\s+(.+)$');\nconst operandPattern = pattern('^(not empty|length ==|all >=|all >|matches|max|min|rule|>=|<=|==|!=|>|<)\\\\s*(.*)$');\nconst ruleNamePattern = sourceStreamPattern('^[A-Za-z_]\\\\w*$');\nconst optionalReads = pattern('^reads\\\\s+[A-Z]\\\\w*\\\\s+optional(?:\\\\s|$)');\n\n// Every operand the pattern matches has a kind, so an operand never goes unrecognized here.\nconst operandKinds: Record<string, ValidationRuleKind> = {\n max: 'Max',\n min: 'Min',\n '>': 'GreaterThan',\n '>=': 'GreaterThanOrEqual',\n '<': 'LessThan',\n '<=': 'LessThanOrEqual',\n '==': 'Equal',\n '!=': 'NotEqual',\n 'length ==': 'Length',\n matches: 'Matches',\n 'all >': 'AllGreaterThan',\n 'all >=': 'AllGreaterThanOrEqual',\n};\n\nconst severities: Record<string, ValidationSeverity> = { information: 'Information', warning: 'Warning', error: 'Error' };\n\n// Command directives this compiler does not model. They are skipped whole.\nconst opaqueDirectives = new Set(['reads', 'concurrency']);\n\n// The bare directives cannot take a type reference, so a line with property shape is a property whatever\n// keyword it starts with - 'description String' declares a property called description.\nconst propertyShapedDirectives = new Set(['description', 'documentation', 'handler', 'concurrency']);\n\nexport function parseCommand(context: ParserContext, line: SourceLine): CommandSyntax {\n // Properties are leaves, not indentation owners. Resolve ambiguous returns spelling\n // before the committed pass decides whether its deeper lines belong to a response.\n const names = new Set<string>();\n const lookahead = new ParserContext(context.reader.fork(), context.path, context.languages);\n lookahead.sourceOptions = context.sourceOptions;\n lookahead.streamCandidates = context.streamCandidates;\n parseCommandBody(lookahead, line, undefined, names);\n return parseCommandBody(context, line, names);\n}\n\nfunction parseCommandBody(context: ParserContext, line: SourceLine, responseNames?: ReadonlySet<string>, discoveredNames?: Set<string>): CommandSyntax {\n const name = header.exec(line.content)?.[1] ?? '';\n if (name === '') {\n context.error(DiagnosticCodes.InvalidCommandDeclaration, `Invalid command declaration '${line.content}' - expected 'command <Name>'`, locationOf(line));\n }\n const properties: PropertySyntax[] = [];\n const responses: { line: SourceLine; candidate: PropertySyntax | null; response: CommandResponseSyntax | null }[] = [];\n let identifier: PropertySyntax | undefined;\n const validations: ValidateSyntax[] = [];\n const produces: ProducesSyntax[] = [];\n const reads: { readModel: string; alias: string | null }[] = [];\n const referenceReads: ReadsSyntax[] = [];\n let concurrency: ConcurrencySyntax | undefined;\n let description: string | null = null;\n let documentation: string | null = null;\n let authorize: AuthorizeSyntax | null = null;\n let handler: HandlerSyntax | null = null;\n let stream: CommandStreamSyntax | null = null;\n const streamCandidates: CommandStreamSyntax[] = [];\n for (let child = context.peekChild(line.indent); child !== undefined; child = context.peekChild(line.indent)) {\n context.reader.takeSignificant();\n const keyword = firstWord(child.content);\n const asProperty = tryParseProperty(child);\n if (asProperty !== undefined && (propertyShapedDirectives.has(keyword) || (keyword === 'validate' && child.content !== 'validate csharp'))) {\n identifier = addProperty(context, properties, asProperty, name, child, identifier);\n } else if (keyword === 'returns') {\n const scalar = scalarResponsePattern.exec(child.content);\n if (scalar !== null && !scalar[1].startsWith('@') && asProperty !== undefined) {\n if (responseNames === undefined) {\n properties.push(asProperty);\n responses.push({ line: child, candidate: asProperty, response: null });\n } else if (responseNames.has(asProperty.type.name)) {\n responses.push({ line: child, candidate: null, response: parseCommandResponse(context, child) });\n } else {\n identifier = addProperty(context, properties, asProperty, name, child, identifier);\n }\n } else if (asProperty !== undefined) {\n identifier = addProperty(context, properties, asProperty, name, child, identifier);\n } else if (reportInvalidModifierOrder(context, child)) {\n context.skipBlock(child.indent);\n } else {\n responses.push({ line: child, candidate: null, response: parseCommandResponse(context, child) });\n }\n } else if (keyword === 'stream' && routeHeader.test(child.content) && asProperty !== undefined && context.streamCandidates?.hasSource(asProperty.type.name.split('.')[0]) === true) {\n const [source, streamName] = asProperty.type.name.split('.');\n const ambiguous = context.streamCandidates.hasPropertyType(asProperty.type.name) && context.streamCandidates.hasUniqueStream(source, streamName);\n const route = parseCommandStream(context, child, asProperty, ambiguous);\n if (stream !== null || streamCandidates.length > 0) context.error(DiagnosticCodes.InvalidCommandStream, 'A command declares at most one stream route.', locationOf(child));\n if (ambiguous || stream !== null) streamCandidates.push(route);\n else stream = route;\n } else if (keyword === 'runs' && isReactionIdentityLine(child)) {\n misplacedReactionIdentity(context, child);\n } else if (keyword === 'description') {\n description = parseDescription(context, child, description, `Command '${name}'`);\n } else if (keyword === 'documentation') {\n documentation = parseDocumentation(context, child, documentation, `Command '${name}'`);\n } else if (keyword === 'authorize') {\n authorize = combineAuthorize(authorize, parseAuthorize(context, child));\n } else if (keyword === 'validate') {\n const validate = parseValidate(context, child, 'command');\n if (validate !== undefined) {\n validations.push(validate);\n }\n } else if (keyword === 'produces') {\n const production = parseProduces(context, child, true);\n if (production !== undefined) produces.push(production);\n } else if (keyword === 'handler') {\n handler = parseHandler(context, child);\n } else if (opaqueDirectives.has(keyword)) {\n const reference = keyword === 'reads' ? parseReads(context, child) : undefined;\n if (reference !== undefined) referenceReads.push(reference);\n if (keyword === 'concurrency' && concurrency === undefined) concurrency = captureConcurrency(context, child);\n const read = /^reads\\s+([A-Z]\\w*)(?:\\s+as\\s+([a-z_]\\w*))?(?:\\s+by\\s+([a-z_]\\w*))?$/.exec(child.content);\n if (read !== null) reads.push({ readModel: read[1], alias: read[2] ?? null });\n if (optionalReads.test(child.content)) {\n context.error(DiagnosticCodes.OptionalReadsNotSupported, 'Optional reads are not yet supported (see #308).', locationOf(child));\n }\n context.skipOpaqueBlock(child.indent);\n } else if (asProperty !== undefined) {\n identifier = addProperty(context, properties, asProperty, name, child, identifier);\n } else {\n reportInvalidModifierOrder(context, child);\n context.error(DiagnosticCodes.UnknownCommandDirective, `Unexpected '${child.content}' in command body`, locationOf(child));\n context.skipBlock(child.indent);\n }\n }\n const candidates = new Set(responses.flatMap(entry => entry.candidate === null ? [] : [entry.candidate]));\n const names = new Set(properties.filter(property => !candidates.has(property)).map(property => property.name));\n if (responses.some(entry => entry.candidate !== null && !names.has(entry.candidate.type.name) && entry.candidate.type.name !== 'returns')) names.add('returns');\n for (const name of names) discoveredNames?.add(name);\n let response: CommandResponseSyntax | null = null;\n const removed = new Set<PropertySyntax>();\n for (const entry of responses) {\n let parsed = entry.response;\n if (entry.candidate !== null) {\n if (!names.has(entry.candidate.type.name)) continue;\n removed.add(entry.candidate);\n parsed = { kind: 'ScalarCommandResponseSyntax', source: { kind: 'PropertyResponseSourceSyntax', property: entry.candidate.type.name, location: entry.candidate.type.location }, location: locationOf(entry.line) };\n }\n if (parsed === null) continue;\n if (response !== null) {\n context.error(DiagnosticCodes.InvalidCommandResponse, 'A command declares at most one unconditional response.', locationOf(entry.line));\n } else {\n response = parsed;\n }\n }\n if (handler !== null && produces.length > 0) {\n context.error(DiagnosticCodes.CommandWithProducesAndHandler, `Command '${name}' cannot declare both 'produces' and 'handler'`, locationOf(line));\n }\n const syntax: CommandSyntax = { kind: 'CommandSyntax', name, description, documentation, authorize, properties: properties.filter(property => !removed.has(property)), validations, produces, handler, response, stream, streamCandidates, location: locationOf(line) };\n commandReadSources.set(syntax, reads);\n dependencySources.set(syntax, { reads: referenceReads, concurrency });\n return syntax;\n}\n\nfunction addProperty(context: ParserContext, properties: PropertySyntax[], property: PropertySyntax, commandName: string, line: SourceLine, identifier: PropertySyntax | undefined): PropertySyntax | undefined {\n reportLegacyOptionalSuffix(context, property.type, line);\n if (property.isIdentifier && identifier !== undefined) {\n context.error(DiagnosticCodes.DuplicateCommandIdentifier, `Command '${commandName}' already marks '${identifier.name}' as identifier - only one property can be the identifier`, property.location);\n property = { ...property, isIdentifier: false };\n }\n properties.push(property);\n return identifier ?? (property.isIdentifier ? property : undefined);\n}\n\n// Reads a 'validate' block: declarative rules, or code - which is recognized but not modeled.\nexport function parseValidate(context: ParserContext, line: SourceLine, owner: 'command' | 'concept'): ValidateSyntax | undefined {\n if (line.content === 'validate') {\n const fence = context.peekChild(line.indent);\n if (fence !== undefined && fence.content.startsWith('```')) {\n context.reader.takeSignificant();\n const code = parseCode(context.valueContext, fence);\n if (code === null) context.skipFencedBody();\n return { kind: 'CodeValidateSyntax', code, location: locationOf(line) };\n }\n const rules: ValidationRuleSyntax[] = [];\n const requirements: RequirementSyntax[] = [];\n let wrapperIndent: number | undefined;\n for (let child = context.peekChild(line.indent); child !== undefined; child = context.peekChild(line.indent)) {\n context.reader.takeSignificant();\n if (owner === 'concept') {\n if (context.sourceOptions.numericMode === 'legacy' && child.content.startsWith('```')) { context.skipFencedBody(); continue; }\n if (wrapperIndent !== undefined && child.indent <= wrapperIndent) wrapperIndent = undefined;\n if (wrapperIndent !== undefined || firstWord(child.content) === 'implementation') {\n context.error(DiagnosticCodes.InvalidValidationRule, `Invalid validation rule '${child.content}'`, locationOf(child));\n wrapperIndent ??= child.indent;\n continue;\n }\n }\n if (firstWord(child.content) === 'require') {\n const condition = parseCondition(owner === 'concept' ? context.valueContext : context, child.content.substring('require'.length).trim(), locationOf(child));\n let message: string | null = null;\n let severity: ValidationSeverity = 'Error';\n let hasSeverity = false;\n for (let directive = context.peekChild(child.indent); directive !== undefined; directive = context.peekChild(child.indent)) {\n context.reader.takeSignificant();\n const matched = messagePattern.exec(directive.content);\n if (matched !== null && matched.index === 0) message = matched[1] !== undefined ? unescapeString(matched[1]) : matched[2];\n else if (firstWord(directive.content) === 'severity') {\n if (!hasSeverity) severity = severities[directive.content.substring('severity'.length).trim()] ?? 'Error';\n hasSeverity = true;\n } else context.skipOpaqueBlock(directive.indent);\n }\n if (condition !== null) requirements.push({ kind: 'RequirementSyntax', condition, message, severity, location: locationOf(child) });\n continue;\n }\n const rule = parseValidationRule(context, owner === 'concept' ? { ...child, content: `value ${child.content}` } : child, owner);\n if (rule !== undefined) {\n rules.push(rule);\n }\n }\n return { kind: 'DeclarativeValidateSyntax', rules, requirements, location: locationOf(line) };\n }\n if (line.content === 'validate csharp') {\n const code = parseCode(context.valueContext, { ...line, content: 'csharp' });\n if (code === null) context.skipOpaqueBlock(line.indent);\n return { kind: 'CodeValidateSyntax', code, location: locationOf(line) };\n }\n context.error(DiagnosticCodes.InvalidValidateDeclaration, `Invalid validate declaration '${line.content}' - expected 'validate' or 'validate csharp'`, locationOf(line));\n context.skipBlock(line.indent);\n return undefined;\n}\n\nfunction parseValidationRule(context: ParserContext, line: SourceLine, owner: 'command' | 'concept'): ValidationRuleSyntax | undefined {\n const valueContext = owner === 'concept' ? context.valueContext : context;\n const { content: withSeverity, message } = splitMessage(line.content);\n const severity = splitSeverity(valueContext, line, withSeverity);\n if (severity === undefined) {\n return undefined;\n }\n const match = rulePattern.exec(severity.content);\n if (match === null) {\n valueContext.error(DiagnosticCodes.InvalidValidationRule, `Invalid validation rule '${line.content}'`, locationOf(line));\n return undefined;\n }\n const parsed = parseRule(valueContext, match[2], line);\n if (parsed === undefined) {\n return undefined;\n }\n const source = parsed.kind === 'Rule' ? parseRuleImplementation(context, line, owner === 'command') : { file: null, code: null, implementation: null };\n return {\n kind: 'ValidationRuleSyntax',\n property: match[1],\n rule: parsed.kind,\n value: parsed.value,\n message,\n severity: severity.severity,\n ...source,\n location: locationOf(line),\n };\n}\n\nfunction parseRuleImplementation(context: ParserContext, rule: SourceLine, commandOwner: boolean): { file: FileReferenceSyntax | null; code: CodeBlockSyntax | null; implementation: ImplementationSyntax | null } {\n const body = context.peekChild(rule.indent);\n if (body === undefined) return { file: null, code: null, implementation: null };\n context.reader.takeSignificant();\n const wrapped = commandOwner && firstWord(body.content) === 'implementation';\n const source = wrapped ? parseImplementationWrapper(context, body) : {\n file: isFile(body) ? parseFile(context, body) : null,\n code: !isFile(body) && isCode(context, body) ? parseCode(context, body) : null,\n implementation: null,\n };\n if (!wrapped && source.file === null && source.code === null) {\n context.error(DiagnosticCodes.UnknownRuleImplementationDirective, `Unexpected '${body.content}' in rule implementation - expected 'file <path>' or an inline code block`, locationOf(body));\n context.skipBlock(body.indent);\n }\n for (let extra = context.peekChild(rule.indent); extra !== undefined && (wrapped || (commandOwner && firstWord(extra.content) === 'implementation')); extra = context.peekChild(rule.indent)) {\n context.reader.takeSignificant();\n context.error(wrapped && firstWord(extra.content) === 'implementation' ? DiagnosticCodes.InvalidImplementationBlock : DiagnosticCodes.ConflictingImplementationSources,\n 'A named rule has one implementation wrapper and cannot mix wrapped and direct sources.', locationOf(extra));\n if (isCode(context, extra)) parseCode(context, extra);\n else context.skipBlock(extra.indent);\n }\n return source;\n}\n\nfunction splitMessage(content: string): { content: string; message: string | null } {\n const match = messagePattern.exec(content);\n if (match === null) {\n return { content, message: null };\n }\n const message = match[1] !== undefined ? unescapeString(match[1]) : match[2];\n return { content: content.substring(0, match.index).trimEnd(), message };\n}\n\nfunction splitSeverity(context: ParserContext, line: SourceLine, text: string): { content: string; severity: ValidationSeverity } | undefined {\n const match = severityPattern.exec(text);\n if (match === null) {\n return { content: text, severity: 'Error' };\n }\n const severity = severities[match[1]];\n if (severity === undefined) {\n context.error(DiagnosticCodes.InvalidValidationSeverity, `Unknown validation severity '${match[1]}' - expected information, warning or error`, locationOf(line));\n return undefined;\n }\n return { content: text.substring(0, match.index).trimEnd(), severity };\n}\n\nfunction parseRule(context: ParserContext, rule: string, line: SourceLine): { kind: ValidationRuleKind; value: ExpressionSyntax | null } | undefined {\n if (rule === 'not empty') {\n return { kind: 'NotEmpty', value: null };\n }\n const operand = operandPattern.exec(rule);\n if (operand === null) {\n context.error(DiagnosticCodes.InvalidValidationRule, `Invalid validation rule '${line.content}'`, locationOf(line));\n return undefined;\n }\n if (operand[1] === 'rule') {\n const name = operand[2].trim();\n if (!ruleNamePattern.test(name)) {\n context.error(DiagnosticCodes.InvalidRuleName, `Invalid rule name '${name}' in '${line.content}' - expected 'rule <Name>' with an identifier`, locationOf(line));\n return undefined;\n }\n return { kind: 'Rule', value: { kind: 'PathExpressionSyntax', path: name, location: locationOf(line) } };\n }\n return { kind: operandKinds[operand[1]], value: parseMappingSource(operand[2], locationOf(line), context) };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"CommandParser.js","names":["header","pattern","routeHeader","sourceStreamPattern","severityPattern","messagePattern","stringBodyPattern","rulePattern","operandPattern","ruleNamePattern","optionalReads","operandKinds","severities","opaqueDirectives","propertyShapedDirectives","names","lookahead","ParserContext","context","line","name","DiagnosticCodes","locationOf","properties","responses","identifier","validations","produces","reads","referenceReads","concurrency","description","documentation","authorize","handler","stream","streamCandidates","child","keyword","firstWord","asProperty","tryParseProperty","scalar","scalarResponsePattern","responseNames","parseCommandResponse","reportInvalidModifierOrder","source","streamName","ambiguous","route","parseCommandStream","isReactionIdentityLine","misplacedReactionIdentity","parseDescription","parseDocumentation","combineAuthorize","parseAuthorize","validate","production","parseProduces","parseHandler","reference","parseReads","captureConcurrency","read","candidates","entry","property","discoveredNames","response","removed","parsed","syntax","commandReadSources","dependencySources","reportLegacyOptionalSuffix","commandName","fence","code","parseCode","rules","requirements","wrapperIndent","owner","condition","parseCondition","message","severity","hasSeverity","directive","matched","unescapeString","rule","checksum","valueContext","withSeverity","match","body","wrapped","commandOwner","parseImplementationWrapper","isFile","parseFile","isCode","extra","content","text","algorithm","operand","parseMappingSource"],"sources":["../../../../../../Compiler/Parsing/CommandParser.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { DiagnosticCodes } from '../Diagnostics/DiagnosticCodes';\nimport { RequirementSyntax } from '../Syntax/Conditions';\nimport { parseCondition } from './ConditionParser';\nimport { AuthorizeSyntax } from '../Syntax/Authorization';\nimport { CommandSyntax, ValidateSyntax, ValidationRuleKind, ValidationRuleSyntax, ValidationSeverity } from '../Syntax/Commands';\nimport { PropertySyntax } from '../Syntax/Declarations';\nimport { CommandStreamSyntax } from '../Syntax/EventSources';\nimport { parseCommandStream } from './EventSourceParser';\nimport { ExpressionSyntax } from '../Syntax/Expressions';\nimport { ProducesSyntax } from '../Syntax/Reactions';\nimport { CommandResponseSyntax } from '../Syntax/Responses';\nimport { pattern } from '../Text/patterns';\nimport { sourceStreamPattern } from '../Text/SourceStreamNames';\nimport { stringBodyPattern, unescapeString } from '../Text/StringLiteral';\nimport { combineAuthorize, parseAuthorize } from './AuthorizeParser';\nimport { parseCommandResponse, scalarResponsePattern } from './CommandResponseParser';\nimport { parseDescription } from './DescriptionParser';\nimport { parseDocumentation } from './DocumentationParser';\nimport { isCode, isFile, parseCode, parseFile, parseHandler, parseImplementationWrapper } from './ImplementationParser';\nimport { CodeBlockSyntax, FileReferenceSyntax, HandlerSyntax, ImplementationSyntax } from '../Syntax/Implementations';\nimport { parseMappingSource } from './ExpressionParser';\nimport { firstWord } from './LineText';\nimport { ParserContext } from './ParserContext';\nimport { isReactionIdentityLine, misplacedReactionIdentity } from './ReactionIdentityParser';\nimport { commandReadSources } from './CommandReadSources';\nimport { dependencySources, ReadsSyntax, ConcurrencySyntax } from '../Syntax/DependencySources';\nimport { captureConcurrency } from './DependencySourceParser';\nimport { parseReads } from './ReadsParser';\nimport { parseProduces } from './ProducesParser';\nimport { reportInvalidModifierOrder, reportLegacyOptionalSuffix, tryParseProperty } from './PropertyLineParser';\nimport { locationOf, SourceLine } from './SourceLine';\n\nconst header = pattern('^command\\\\s+([A-Za-z_]\\\\w*)$');\nconst routeHeader = sourceStreamPattern('^stream\\\\s+[A-Za-z_]\\\\w*\\\\.[A-Za-z_]\\\\w*$');\nconst severityPattern = pattern('\\\\bseverity\\\\s+(\\\\S+)$');\nconst messagePattern = pattern(`\\\\bmessage\\\\s+(?:\"(${stringBodyPattern})\"|(\\\\$strings\\\\.\\\\S*))$`);\nconst rulePattern = pattern('^([\\\\w.]+)\\\\s+(.+)$');\nconst operandPattern = pattern('^(not empty|length ==|all >=|all >|matches|max|min|rule|>=|<=|==|!=|>|<)\\\\s*(.*)$');\nconst ruleNamePattern = sourceStreamPattern('^[A-Za-z_]\\\\w*$');\nconst optionalReads = pattern('^reads\\\\s+[A-Z]\\\\w*\\\\s+optional(?:\\\\s|$)');\n\n// Every operand the pattern matches has a kind, so an operand never goes unrecognized here.\nconst operandKinds: Record<string, ValidationRuleKind> = {\n max: 'Max',\n min: 'Min',\n '>': 'GreaterThan',\n '>=': 'GreaterThanOrEqual',\n '<': 'LessThan',\n '<=': 'LessThanOrEqual',\n '==': 'Equal',\n '!=': 'NotEqual',\n 'length ==': 'Length',\n matches: 'Matches',\n 'all >': 'AllGreaterThan',\n 'all >=': 'AllGreaterThanOrEqual',\n};\n\nconst severities: Record<string, ValidationSeverity> = { information: 'Information', warning: 'Warning', error: 'Error' };\n\n// Command directives this compiler does not model. They are skipped whole.\nconst opaqueDirectives = new Set(['reads', 'concurrency']);\n\n// The bare directives cannot take a type reference, so a line with property shape is a property whatever\n// keyword it starts with - 'description String' declares a property called description.\nconst propertyShapedDirectives = new Set(['description', 'documentation', 'handler', 'concurrency']);\n\nexport function parseCommand(context: ParserContext, line: SourceLine): CommandSyntax {\n // Properties are leaves, not indentation owners. Resolve ambiguous returns spelling\n // before the committed pass decides whether its deeper lines belong to a response.\n const names = new Set<string>();\n const lookahead = new ParserContext(context.reader.fork(), context.path, context.languages);\n lookahead.sourceOptions = context.sourceOptions;\n lookahead.streamCandidates = context.streamCandidates;\n parseCommandBody(lookahead, line, undefined, names);\n return parseCommandBody(context, line, names);\n}\n\nfunction parseCommandBody(context: ParserContext, line: SourceLine, responseNames?: ReadonlySet<string>, discoveredNames?: Set<string>): CommandSyntax {\n const name = header.exec(line.content)?.[1] ?? '';\n if (name === '') {\n context.error(DiagnosticCodes.InvalidCommandDeclaration, `Invalid command declaration '${line.content}' - expected 'command <Name>'`, locationOf(line));\n }\n const properties: PropertySyntax[] = [];\n const responses: { line: SourceLine; candidate: PropertySyntax | null; response: CommandResponseSyntax | null }[] = [];\n let identifier: PropertySyntax | undefined;\n const validations: ValidateSyntax[] = [];\n const produces: ProducesSyntax[] = [];\n const reads: { readModel: string; alias: string | null }[] = [];\n const referenceReads: ReadsSyntax[] = [];\n let concurrency: ConcurrencySyntax | undefined;\n let description: string | null = null;\n let documentation: string | null = null;\n let authorize: AuthorizeSyntax | null = null;\n let handler: HandlerSyntax | null = null;\n let stream: CommandStreamSyntax | null = null;\n const streamCandidates: CommandStreamSyntax[] = [];\n for (let child = context.peekChild(line.indent); child !== undefined; child = context.peekChild(line.indent)) {\n context.reader.takeSignificant();\n const keyword = firstWord(child.content);\n const asProperty = tryParseProperty(child);\n if (asProperty !== undefined && (propertyShapedDirectives.has(keyword) || (keyword === 'validate' && child.content !== 'validate csharp'))) {\n identifier = addProperty(context, properties, asProperty, name, child, identifier);\n } else if (keyword === 'returns') {\n const scalar = scalarResponsePattern.exec(child.content);\n if (scalar !== null && !scalar[1].startsWith('@') && asProperty !== undefined) {\n if (responseNames === undefined) {\n properties.push(asProperty);\n responses.push({ line: child, candidate: asProperty, response: null });\n } else if (responseNames.has(asProperty.type.name)) {\n responses.push({ line: child, candidate: null, response: parseCommandResponse(context, child) });\n } else {\n identifier = addProperty(context, properties, asProperty, name, child, identifier);\n }\n } else if (asProperty !== undefined) {\n identifier = addProperty(context, properties, asProperty, name, child, identifier);\n } else if (reportInvalidModifierOrder(context, child)) {\n context.skipBlock(child.indent);\n } else {\n responses.push({ line: child, candidate: null, response: parseCommandResponse(context, child) });\n }\n } else if (keyword === 'stream' && routeHeader.test(child.content) && asProperty !== undefined && context.streamCandidates?.hasSource(asProperty.type.name.split('.')[0]) === true) {\n const [source, streamName] = asProperty.type.name.split('.');\n const ambiguous = context.streamCandidates.hasPropertyType(asProperty.type.name) && context.streamCandidates.hasUniqueStream(source, streamName);\n const route = parseCommandStream(context, child, asProperty, ambiguous);\n if (stream !== null || streamCandidates.length > 0) context.error(DiagnosticCodes.InvalidCommandStream, 'A command declares at most one stream route.', locationOf(child));\n if (ambiguous || stream !== null) streamCandidates.push(route);\n else stream = route;\n } else if (keyword === 'runs' && isReactionIdentityLine(child)) {\n misplacedReactionIdentity(context, child);\n } else if (keyword === 'description') {\n description = parseDescription(context, child, description, `Command '${name}'`);\n } else if (keyword === 'documentation') {\n documentation = parseDocumentation(context, child, documentation, `Command '${name}'`);\n } else if (keyword === 'authorize') {\n authorize = combineAuthorize(authorize, parseAuthorize(context, child));\n } else if (keyword === 'validate') {\n const validate = parseValidate(context, child, 'command');\n if (validate !== undefined) {\n validations.push(validate);\n }\n } else if (keyword === 'produces') {\n const production = parseProduces(context, child, true);\n if (production !== undefined) produces.push(production);\n } else if (keyword === 'handler') {\n handler = parseHandler(context, child);\n } else if (opaqueDirectives.has(keyword)) {\n const reference = keyword === 'reads' ? parseReads(context, child) : undefined;\n if (reference !== undefined) referenceReads.push(reference);\n if (keyword === 'concurrency' && concurrency === undefined) concurrency = captureConcurrency(context, child);\n const read = /^reads\\s+([A-Z]\\w*)(?:\\s+as\\s+([a-z_]\\w*))?(?:\\s+by\\s+([a-z_]\\w*))?$/.exec(child.content);\n if (read !== null) reads.push({ readModel: read[1], alias: read[2] ?? null });\n if (optionalReads.test(child.content)) {\n context.error(DiagnosticCodes.OptionalReadsNotSupported, 'Optional reads are not yet supported (see #308).', locationOf(child));\n }\n context.skipOpaqueBlock(child.indent);\n } else if (asProperty !== undefined) {\n identifier = addProperty(context, properties, asProperty, name, child, identifier);\n } else {\n reportInvalidModifierOrder(context, child);\n context.error(DiagnosticCodes.UnknownCommandDirective, `Unexpected '${child.content}' in command body`, locationOf(child));\n context.skipBlock(child.indent);\n }\n }\n const candidates = new Set(responses.flatMap(entry => entry.candidate === null ? [] : [entry.candidate]));\n const names = new Set(properties.filter(property => !candidates.has(property)).map(property => property.name));\n if (responses.some(entry => entry.candidate !== null && !names.has(entry.candidate.type.name) && entry.candidate.type.name !== 'returns')) names.add('returns');\n for (const name of names) discoveredNames?.add(name);\n let response: CommandResponseSyntax | null = null;\n const removed = new Set<PropertySyntax>();\n for (const entry of responses) {\n let parsed = entry.response;\n if (entry.candidate !== null) {\n if (!names.has(entry.candidate.type.name)) continue;\n removed.add(entry.candidate);\n parsed = { kind: 'ScalarCommandResponseSyntax', source: { kind: 'PropertyResponseSourceSyntax', property: entry.candidate.type.name, location: entry.candidate.type.location }, location: locationOf(entry.line) };\n }\n if (parsed === null) continue;\n if (response !== null) {\n context.error(DiagnosticCodes.InvalidCommandResponse, 'A command declares at most one unconditional response.', locationOf(entry.line));\n } else {\n response = parsed;\n }\n }\n if (handler !== null && produces.length > 0) {\n context.error(DiagnosticCodes.CommandWithProducesAndHandler, `Command '${name}' cannot declare both 'produces' and 'handler'`, locationOf(line));\n }\n const syntax: CommandSyntax = { kind: 'CommandSyntax', name, description, documentation, authorize, properties: properties.filter(property => !removed.has(property)), validations, produces, handler, response, stream, streamCandidates, location: locationOf(line) };\n commandReadSources.set(syntax, reads);\n dependencySources.set(syntax, { reads: referenceReads, concurrency });\n return syntax;\n}\n\nfunction addProperty(context: ParserContext, properties: PropertySyntax[], property: PropertySyntax, commandName: string, line: SourceLine, identifier: PropertySyntax | undefined): PropertySyntax | undefined {\n reportLegacyOptionalSuffix(context, property.type, line);\n if (property.isIdentifier && identifier !== undefined) {\n context.error(DiagnosticCodes.DuplicateCommandIdentifier, `Command '${commandName}' already marks '${identifier.name}' as identifier - only one property can be the identifier`, property.location);\n property = { ...property, isIdentifier: false };\n }\n properties.push(property);\n return identifier ?? (property.isIdentifier ? property : undefined);\n}\n\n// Reads a 'validate' block: declarative rules, or code - which is recognized but not modeled.\nexport function parseValidate(context: ParserContext, line: SourceLine, owner: 'command' | 'concept'): ValidateSyntax | undefined {\n if (line.content === 'validate') {\n const fence = context.peekChild(line.indent);\n if (fence !== undefined && fence.content.startsWith('```')) {\n context.reader.takeSignificant();\n const code = parseCode(context.valueContext, fence);\n if (code === null) context.skipFencedBody();\n return { kind: 'CodeValidateSyntax', code, location: locationOf(line) };\n }\n const rules: ValidationRuleSyntax[] = [];\n const requirements: RequirementSyntax[] = [];\n let wrapperIndent: number | undefined;\n for (let child = context.peekChild(line.indent); child !== undefined; child = context.peekChild(line.indent)) {\n context.reader.takeSignificant();\n if (owner === 'concept') {\n if (context.sourceOptions.numericMode === 'legacy' && child.content.startsWith('```')) { context.skipFencedBody(); continue; }\n if (wrapperIndent !== undefined && child.indent <= wrapperIndent) wrapperIndent = undefined;\n if (wrapperIndent !== undefined || firstWord(child.content) === 'implementation') {\n context.error(DiagnosticCodes.InvalidValidationRule, `Invalid validation rule '${child.content}'`, locationOf(child));\n wrapperIndent ??= child.indent;\n continue;\n }\n }\n if (firstWord(child.content) === 'require') {\n const condition = parseCondition(owner === 'concept' ? context.valueContext : context, child.content.substring('require'.length).trim(), locationOf(child));\n let message: string | null = null;\n let severity: ValidationSeverity = 'Error';\n let hasSeverity = false;\n for (let directive = context.peekChild(child.indent); directive !== undefined; directive = context.peekChild(child.indent)) {\n context.reader.takeSignificant();\n const matched = messagePattern.exec(directive.content);\n if (matched !== null && matched.index === 0) message = matched[1] !== undefined ? unescapeString(matched[1]) : matched[2];\n else if (firstWord(directive.content) === 'severity') {\n if (!hasSeverity) severity = severities[directive.content.substring('severity'.length).trim()] ?? 'Error';\n hasSeverity = true;\n } else context.skipOpaqueBlock(directive.indent);\n }\n if (condition !== null) requirements.push({ kind: 'RequirementSyntax', condition, message, severity, location: locationOf(child) });\n continue;\n }\n const rule = parseValidationRule(context, owner === 'concept' ? { ...child, content: `value ${child.content}` } : child, owner);\n if (rule !== undefined) {\n rules.push(rule);\n }\n }\n return { kind: 'DeclarativeValidateSyntax', rules, requirements, location: locationOf(line) };\n }\n if (owner === 'concept' && firstWord(line.content.substring('validate'.length).trimStart()) === 'checksum') {\n const ruleLine = { ...line, content: `value ${line.content.substring('validate'.length).trimStart()}` };\n const rule = parseValidationRule(context, ruleLine, owner);\n return rule === undefined ? undefined : { kind: 'DeclarativeValidateSyntax', rules: [rule], requirements: [], location: locationOf(line) };\n }\n if (line.content === 'validate csharp') {\n const code = parseCode(context.valueContext, { ...line, content: 'csharp' });\n if (code === null) context.skipOpaqueBlock(line.indent);\n return { kind: 'CodeValidateSyntax', code, location: locationOf(line) };\n }\n context.error(DiagnosticCodes.InvalidValidateDeclaration, `Invalid validate declaration '${line.content}' - expected 'validate' or 'validate csharp'`, locationOf(line));\n context.skipBlock(line.indent);\n return undefined;\n}\n\nfunction parseValidationRule(context: ParserContext, line: SourceLine, owner: 'command' | 'concept'): ValidationRuleSyntax | undefined {\n // Checksum is a new declaration, not enrichment of a formerly opaque Legacy rule.\n const checksum = firstWord(rulePattern.exec(line.content)?.[2] ?? '') === 'checksum';\n const valueContext = owner === 'concept' && !checksum ? context.valueContext : context;\n const { content: withSeverity, message } = splitMessage(line.content);\n const severity = splitSeverity(valueContext, line, withSeverity);\n if (severity === undefined) {\n return undefined;\n }\n const match = rulePattern.exec(severity.content);\n if (match === null) {\n valueContext.error(DiagnosticCodes.InvalidValidationRule, `Invalid validation rule '${line.content}'`, locationOf(line));\n return undefined;\n }\n const parsed = parseRule(valueContext, match[2], line);\n if (parsed === undefined) {\n return undefined;\n }\n const source = parsed.kind === 'Rule' ? parseRuleImplementation(context, line, owner === 'command') : { file: null, code: null, implementation: null };\n return {\n kind: 'ValidationRuleSyntax',\n property: match[1],\n rule: parsed.kind,\n value: parsed.value,\n message,\n severity: severity.severity,\n ...source,\n location: locationOf(line),\n };\n}\n\nfunction parseRuleImplementation(context: ParserContext, rule: SourceLine, commandOwner: boolean): { file: FileReferenceSyntax | null; code: CodeBlockSyntax | null; implementation: ImplementationSyntax | null } {\n const body = context.peekChild(rule.indent);\n if (body === undefined) return { file: null, code: null, implementation: null };\n context.reader.takeSignificant();\n const wrapped = commandOwner && firstWord(body.content) === 'implementation';\n const source = wrapped ? parseImplementationWrapper(context, body) : {\n file: isFile(body) ? parseFile(context, body) : null,\n code: !isFile(body) && isCode(context, body) ? parseCode(context, body) : null,\n implementation: null,\n };\n if (!wrapped && source.file === null && source.code === null) {\n context.error(DiagnosticCodes.UnknownRuleImplementationDirective, `Unexpected '${body.content}' in rule implementation - expected 'file <path>' or an inline code block`, locationOf(body));\n context.skipBlock(body.indent);\n }\n for (let extra = context.peekChild(rule.indent); extra !== undefined && (wrapped || (commandOwner && firstWord(extra.content) === 'implementation')); extra = context.peekChild(rule.indent)) {\n context.reader.takeSignificant();\n context.error(wrapped && firstWord(extra.content) === 'implementation' ? DiagnosticCodes.InvalidImplementationBlock : DiagnosticCodes.ConflictingImplementationSources,\n 'A named rule has one implementation wrapper and cannot mix wrapped and direct sources.', locationOf(extra));\n if (isCode(context, extra)) parseCode(context, extra);\n else context.skipBlock(extra.indent);\n }\n return source;\n}\n\nfunction splitMessage(content: string): { content: string; message: string | null } {\n const match = messagePattern.exec(content);\n if (match === null) {\n return { content, message: null };\n }\n const message = match[1] !== undefined ? unescapeString(match[1]) : match[2];\n return { content: content.substring(0, match.index).trimEnd(), message };\n}\n\nfunction splitSeverity(context: ParserContext, line: SourceLine, text: string): { content: string; severity: ValidationSeverity } | undefined {\n const match = severityPattern.exec(text);\n if (match === null) {\n return { content: text, severity: 'Error' };\n }\n const severity = severities[match[1]];\n if (severity === undefined) {\n context.error(DiagnosticCodes.InvalidValidationSeverity, `Unknown validation severity '${match[1]}' - expected information, warning or error`, locationOf(line));\n return undefined;\n }\n return { content: text.substring(0, match.index).trimEnd(), severity };\n}\n\nfunction parseRule(context: ParserContext, rule: string, line: SourceLine): { kind: ValidationRuleKind; value: ExpressionSyntax | null } | undefined {\n if (rule === 'not empty') {\n return { kind: 'NotEmpty', value: null };\n }\n if (firstWord(rule) === 'checksum') {\n const algorithm = rule.substring('checksum'.length).trim();\n if (algorithm !== 'luhn' && algorithm !== 'mod11' && algorithm !== 'mod97') {\n context.error(DiagnosticCodes.InvalidGenerationArgument, 'Checksum validation requires luhn, mod11 or mod97.', locationOf(line));\n return undefined;\n }\n return { kind: 'Checksum', value: { kind: 'LiteralExpressionSyntax', value: algorithm, location: locationOf(line) } };\n }\n const operand = operandPattern.exec(rule);\n if (operand === null) {\n context.error(DiagnosticCodes.InvalidValidationRule, `Invalid validation rule '${line.content}'`, locationOf(line));\n return undefined;\n }\n if (operand[1] === 'rule') {\n const name = operand[2].trim();\n if (!ruleNamePattern.test(name)) {\n context.error(DiagnosticCodes.InvalidRuleName, `Invalid rule name '${name}' in '${line.content}' - expected 'rule <Name>' with an identifier`, locationOf(line));\n return undefined;\n }\n return { kind: 'Rule', value: { kind: 'PathExpressionSyntax', path: name, location: locationOf(line) } };\n }\n return { kind: operandKinds[operand[1]], value: parseMappingSource(operand[2], locationOf(line), context) };\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import"../../_virtual/_virtual/_rolldown/runtime.js";import{DiagnosticCodes as e}from"../Diagnostics/DiagnosticCodes.js";import{locationOf as t}from"./SourceLine.js";import{isFile as n,parseCode as r,parseFile as i}from"./ImplementationParser.js";function parseGenerationBody(a,o,s){let c=!1,l;for(;(l=a.peekChild(o.indent))!==void 0;){a.reader.takeSignificant();let o=n(l),u=l.content.startsWith("```");if(s.strategy!==`rule`||!o&&!u){a.error(e.UnknownRuleImplementationDirective,`Generation rule bodies accept only one 'file <path>' or tagged inline fence.`,t(l)),a.skipBlock(l.indent);continue}c&&a.error(e.ConflictingImplementationSources,`A generation rule has exactly one file or inline payload.`,t(l));let d=o?i(a,l):null,f=u?r(a,l):null;c||(s={...s,file:d,code:f}),c=!0;let p=o?a.peekChild(l.indent):void 0;p!==void 0&&(a.error(e.UnknownRuleImplementationDirective,`A generation file directive cannot have children.`,t(p)),a.skipBlock(l.indent))}return s}export{parseGenerationBody};
2
+ //# sourceMappingURL=GenerationBodyParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GenerationBodyParser.js","names":["hasBody","child","context","line","file","isFile","fence","generation","DiagnosticCodes","locationOf","parsedFile","parseFile","parsedCode","parseCode","nested"],"sources":["../../../../../../Compiler/Parsing/GenerationBodyParser.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { DiagnosticCodes } from '../Diagnostics/DiagnosticCodes';\nimport { GenerationSyntax } from '../Syntax/GenerationSyntax';\nimport { isFile, parseCode, parseFile } from './ImplementationParser';\nimport { ParserContext } from './ParserContext';\nimport { locationOf, SourceLine } from './SourceLine';\n\nexport function parseGenerationBody(context: ParserContext, line: SourceLine, generation: GenerationSyntax): GenerationSyntax {\n let hasBody = false;\n let child: SourceLine | undefined;\n while ((child = context.peekChild(line.indent)) !== undefined) {\n context.reader.takeSignificant();\n const file = isFile(child);\n const fence = child.content.startsWith('```');\n if (generation.strategy !== 'rule' || (!file && !fence)) {\n context.error(DiagnosticCodes.UnknownRuleImplementationDirective, \"Generation rule bodies accept only one 'file <path>' or tagged inline fence.\", locationOf(child));\n context.skipBlock(child.indent);\n continue;\n }\n if (hasBody) context.error(DiagnosticCodes.ConflictingImplementationSources, 'A generation rule has exactly one file or inline payload.', locationOf(child));\n const parsedFile = file ? parseFile(context, child) : null;\n const parsedCode = fence ? parseCode(context, child) : null;\n if (!hasBody) generation = { ...generation, file: parsedFile, code: parsedCode };\n hasBody = true;\n const nested = file ? context.peekChild(child.indent) : undefined;\n if (nested !== undefined) {\n context.error(DiagnosticCodes.UnknownRuleImplementationDirective, 'A generation file directive cannot have children.', locationOf(nested));\n context.skipBlock(child.indent);\n }\n }\n return generation;\n}\n"],"mappings":"uPASA,SAAgB,oBAAoB,EAAwB,EAAkB,EAAgD,CAC1H,IAAIA,EAAU,GACVC,EACJ,MAAQ,EAAQC,EAAQ,UAAUC,EAAK,MAAM,KAAO,IAAA,IAAW,CAC3DD,EAAQ,OAAO,gBAAgB,EAC/B,IAAME,EAAOC,EAAOJ,CAAK,EACnBK,EAAQL,EAAM,QAAQ,WAAW,KAAK,EAC5C,GAAIM,EAAW,WAAa,QAAW,CAACH,GAAQ,CAACE,EAAQ,CACrDJ,EAAQ,MAAMM,EAAgB,mCAAoC,+EAAgFC,EAAWR,CAAK,CAAC,EACnKC,EAAQ,UAAUD,EAAM,MAAM,EAC9B,QACJ,CACID,GAASE,EAAQ,MAAMM,EAAgB,iCAAkC,4DAA6DC,EAAWR,CAAK,CAAC,EAC3J,IAAMS,EAAaN,EAAOO,EAAUT,EAASD,CAAK,EAAI,KAChDW,EAAaN,EAAQO,EAAUX,EAASD,CAAK,EAAI,KAClDD,IAAS,EAAa,CAAE,GAAGO,EAAY,KAAMG,EAAY,KAAME,CAAW,GAC/E,EAAU,GACV,IAAME,EAASV,EAAOF,EAAQ,UAAUD,EAAM,MAAM,EAAI,IAAA,GACpDa,IAAW,IAAA,KACXZ,EAAQ,MAAMM,EAAgB,mCAAoC,oDAAqDC,EAAWK,CAAM,CAAC,EACzIZ,EAAQ,UAAUD,EAAM,MAAM,EAEtC,CACA,OAAOM,CACX"}
@@ -1,2 +1,2 @@
1
- import"../../_virtual/_virtual/_rolldown/runtime.js";import{DiagnosticCodes as e}from"../Diagnostics/DiagnosticCodes.js";import{stringBodyPattern as t,unescapeString as n}from"../Text/StringLiteral.js";import{locationOf as r}from"./SourceLine.js";const i=RegExp(`"${t}"|\\S+`,`g`),a=/^([a-z]([a-z_]{0,61}[a-z])?)?$(?![\s\S])/,printable=e=>[...e].every(e=>e>=` `&&e<=`~`),literal=e=>e!==void 0&&e.length>=2&&e.startsWith(`"`)&&e.endsWith(`"`)?n(e.slice(1,-1)):void 0,integer=e=>e!==void 0&&/^-?[0-9]+$(?![\s\S])/.test(e)&&Number(e)>=-2147483648&&Number(e)<=2147483647?Number(e):void 0;function parseGeneration(t,n,o){let s=[...n.content.matchAll(i)].map(e=>e[0]).slice(1),error=(e,i)=>t.error(e,i,r(n));if(s.length===0)return error(e.InvalidGenerationArgument,`Expected 'generate <strategy> [modifiers]'.`),null;let c=s[0];if(![`uuid`,`uuidv7`,`ulid`,`typeid`,`nanoid`,`bytes`,`pattern`,`random`,`rule`,`sequence`].includes(c))return error(e.UnknownGenerationStrategy,`Unknown generation strategy '${c}'.`),null;let l={kind:`GenerationSyntax`,strategy:c,location:r(n)},u=1,d=!0;switch(c){case`typeid`:case`pattern`:{let e=literal(s[u++]);d=e!==void 0,l=c===`typeid`?{...l,prefix:e}:{...l,pattern:e};break}case`nanoid`:{let e=integer(s[u]);e!==void 0&&(l={...l,size:e},u++);break}case`bytes`:{let e=integer(s[u++]),t=s[u++];d=e!==void 0&&[`base64url`,`hex`,`base32`].includes(t),l={...l,count:e,encoding:t};break}case`random`:{let e=s[u++],t=e?.match(/^(-?(?:0|[1-9][0-9]*))\.\.(-?(?:0|[1-9][0-9]*))$/);d=t!=null&&BigInt(t[1])>=-9223372036854775808n&&BigInt(t[2])<=9223372036854775807n&&BigInt(t[1])<=BigInt(t[2]),l={...l,range:e};break}case`rule`:{let e=s[u++];d=e!==void 0&&/^[A-Za-z_][A-Za-z0-9_]*$/.test(e),l={...l,rule:e};break}}if(!d)return error(e.InvalidGenerationArgument,`Missing or invalid argument for generation strategy '${c}'.`),l;let f=/* @__PURE__ */ new Set;for(;u<s.length;){let t=s[u++],n=s[u++];if(f.has(t)&&error(e.DuplicateGenerationModifier,`Generation modifier '${t}' is repeated.`),f.add(t),!allows(c,o,l.encoding,t)){error(e.InvalidGenerationModifier,`Generation modifier '${t}' is not allowed for '${c}' on '${o}'.`);continue}let r=literal(n);if(t===`prefix`||t===`alphabet`?r===void 0:t===`case`?![`lower`,`upper`].includes(n):![`luhn`,`mod11`,`mod97`].includes(n))error(e.InvalidGenerationArgument,`Missing or invalid value for generation modifier '${t}'.`);else switch(t){case`prefix`:l={...l,prefix:r};break;case`alphabet`:l={...l,alphabet:r};break;case`case`:l={...l,case:n};break;default:l={...l,checksum:n}}}return c===`sequence`||(o===`Uuid`?[`uuid`,`uuidv7`].includes(c):o===`String`?c!==`random`:o===`Int`&&c===`random`)||error(e.InvalidGenerationPrimitive,`Generation strategy '${c}' is not allowed on '${o}'.`),l.prefix!==void 0&&l.prefix!==null&&(c===`typeid`?a.test(l.prefix)||error(e.InvalidTypeIdPrefix,`TypeID prefix must be empty or 1..63 lowercase letters and underscores, starting and ending with a letter.`):(l.prefix.length>32||!printable(l.prefix))&&error(e.InvalidGenerationPrefix,`Generation prefix must contain at most 32 printable ASCII characters.`)),l.alphabet!==void 0&&l.alphabet!==null&&(l.alphabet.length<2||l.alphabet.length>256||!printable(l.alphabet)||new Set(l.alphabet).size!==l.alphabet.length)&&error(e.InvalidGenerationAlphabet,`NanoID alphabet must contain 2..256 distinct printable ASCII characters.`),(l.size!==void 0&&l.size!==null&&(l.size<1||l.size>256)||l.count!==void 0&&l.count!==null&&(l.count<1||l.count>512))&&error(e.GenerationSizeOutsideRange,`NanoID size must be 1..256 and bytes count must be 1..512.`),l}function allows(e,t,n,r){switch(r){case`prefix`:return t===`String`&&[`uuid`,`uuidv7`,`ulid`,`nanoid`,`bytes`].includes(e);case`alphabet`:return e===`nanoid`;case`case`:return e===`ulid`||t===`String`&&[`uuid`,`uuidv7`].includes(e)||e===`bytes`&&[`hex`,`base32`].includes(n??``);case`checksum`:return e===`pattern`;default:return!1}}export{parseGeneration};
1
+ import"../../_virtual/_virtual/_rolldown/runtime.js";import{DiagnosticCodes as e}from"../Diagnostics/DiagnosticCodes.js";import{stringBodyPattern as t,unescapeString as n}from"../Text/StringLiteral.js";import{locationOf as r}from"./SourceLine.js";import{InvalidGenerationPattern as i}from"../Generation/InvalidGenerationPattern.js";import{parseGenerationPattern as a}from"../Generation/GenerationPattern.js";import"../Generation/index.js";import{parseGenerationBody as o}from"./GenerationBodyParser.js";const s=RegExp(`"${t}"|\\S+`,`g`),c=/^([a-z]([a-z_]{0,61}[a-z])?)?$(?![\s\S])/,printable=e=>[...e].every(e=>e>=` `&&e<=`~`),literal=e=>e!==void 0&&e.length>=2&&e.startsWith(`"`)&&e.endsWith(`"`)?n(e.slice(1,-1)):void 0,integer=e=>e!==void 0&&/^-?[0-9]+$(?![\s\S])/.test(e)&&Number(e)>=-2147483648&&Number(e)<=2147483647?Number(e):void 0;function parseGeneration(t,n,l){let u=[...n.content.matchAll(s)].map(e=>e[0]).slice(1),error=(e,i)=>t.error(e,i,r(n));if(u.length===0)return error(e.InvalidGenerationArgument,`Expected 'generate <strategy> [modifiers]'.`),null;let d=u[0];if(![`uuid`,`uuidv7`,`ulid`,`typeid`,`nanoid`,`bytes`,`pattern`,`random`,`rule`,`sequence`].includes(d))return error(e.UnknownGenerationStrategy,`Unknown generation strategy '${d}'.`),null;let f={kind:`GenerationSyntax`,strategy:d,location:r(n)},p=1,m=!0;switch(d){case`typeid`:case`pattern`:{let e=literal(u[p++]);m=e!==void 0,f=d===`typeid`?{...f,prefix:e}:{...f,pattern:e};break}case`nanoid`:{let e=integer(u[p]);e!==void 0&&(f={...f,size:e},p++);break}case`bytes`:{let e=integer(u[p++]),t=u[p++];m=e!==void 0&&[`base64url`,`hex`,`base32`].includes(t),f={...f,count:e,encoding:t};break}case`random`:{let e=u[p++],t=e?.match(/^(-?(?:0|[1-9][0-9]*))\.\.(-?(?:0|[1-9][0-9]*))$(?![\s\S])/);m=t!=null&&BigInt(t[1])>=-9223372036854775808n&&BigInt(t[2])<=9223372036854775807n&&BigInt(t[1])<=BigInt(t[2]),f={...f,range:e};break}case`rule`:{let e=u[p++];m=e!==void 0&&/^[A-Za-z_][A-Za-z0-9_]*$(?![\s\S])/.test(e),f={...f,rule:e};break}}if(!m)return error(e.InvalidGenerationArgument,`Missing or invalid argument for generation strategy '${d}'.`),f;let h=/* @__PURE__ */ new Set;for(;p<u.length;){let t=u[p++],n=u[p++];if(h.has(t)&&error(e.DuplicateGenerationModifier,`Generation modifier '${t}' is repeated.`),h.add(t),!allows(d,l,f.encoding,t)){error(e.InvalidGenerationModifier,`Generation modifier '${t}' is not allowed for '${d}' on '${l}'.`);continue}let r=literal(n);if(t===`prefix`||t===`alphabet`?r===void 0:t===`case`?![`lower`,`upper`].includes(n):![`luhn`,`mod11`,`mod97`].includes(n))error(e.InvalidGenerationArgument,`Missing or invalid value for generation modifier '${t}'.`);else switch(t){case`prefix`:f={...f,prefix:r};break;case`alphabet`:f={...f,alphabet:r};break;case`case`:f={...f,case:n};break;default:f={...f,checksum:n}}}if(d===`pattern`&&f.pattern!==void 0&&f.pattern!==null)try{a(f.pattern,f.checksum)}catch(t){if(!(t instanceof i))throw t;error(t.message.includes(`expanded length`)?e.GenerationSizeOutsideRange:e.InvalidGenerationArgument,t.message)}return d===`sequence`||(l===`Uuid`?[`uuid`,`uuidv7`].includes(d):l===`String`?d!==`random`:l===`Int`&&d===`random`)||error(e.InvalidGenerationPrimitive,`Generation strategy '${d}' is not allowed on '${l}'.`),f.prefix!==void 0&&f.prefix!==null&&(d===`typeid`?c.test(f.prefix)||error(e.InvalidTypeIdPrefix,`TypeID prefix must be empty or 1..63 lowercase letters and underscores, starting and ending with a letter.`):(f.prefix.length>32||!printable(f.prefix))&&error(e.InvalidGenerationPrefix,`Generation prefix must contain at most 32 printable ASCII characters.`)),f.alphabet!==void 0&&f.alphabet!==null&&(f.alphabet.length<2||f.alphabet.length>256||!printable(f.alphabet)||new Set(f.alphabet).size!==f.alphabet.length)&&error(e.InvalidGenerationAlphabet,`NanoID alphabet must contain 2..256 distinct printable ASCII characters.`),(f.size!==void 0&&f.size!==null&&(f.size<1||f.size>256)||f.count!==void 0&&f.count!==null&&(f.count<1||f.count>512))&&error(e.GenerationSizeOutsideRange,`NanoID size must be 1..256 and bytes count must be 1..512.`),o(t,n,f)}function allows(e,t,n,r){switch(r){case`prefix`:return t===`String`&&[`uuid`,`uuidv7`,`ulid`,`nanoid`,`bytes`].includes(e);case`alphabet`:return e===`nanoid`;case`case`:return e===`ulid`||t===`String`&&[`uuid`,`uuidv7`].includes(e)||e===`bytes`&&[`hex`,`base32`].includes(n??``);case`checksum`:return e===`pattern`;default:return!1}}export{parseGeneration};
2
2
  //# sourceMappingURL=GenerationParser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GenerationParser.js","names":["tokenPattern","stringBodyPattern","typeIdPrefix","value","character","unescapeString","tokens","line","match","context","code","message","locationOf","DiagnosticCodes","strategy","result","index","valid","text","size","count","encoding","range","rule","seen","modifier","primitive"],"sources":["../../../../../../Compiler/Parsing/GenerationParser.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { DiagnosticCodes } from '../Diagnostics/DiagnosticCodes';\nimport { GenerationSyntax } from '../Syntax/GenerationSyntax';\nimport { stringBodyPattern, unescapeString } from '../Text/StringLiteral';\nimport { ParserContext } from './ParserContext';\nimport { locationOf, SourceLine } from './SourceLine';\n\nconst tokenPattern = new RegExp(`\"${stringBodyPattern}\"|\\\\S+`, 'g');\nconst typeIdPrefix = /^([a-z]([a-z_]{0,61}[a-z])?)?$(?![\\s\\S])/;\nconst printable = (value: string): boolean => [...value].every(character => character >= ' ' && character <= '~');\nconst literal = (value: string | undefined): string | undefined => value !== undefined && value.length >= 2 && value.startsWith('\"') && value.endsWith('\"') ? unescapeString(value.slice(1, -1)) : undefined;\nconst integer = (value: string | undefined): number | undefined => value !== undefined && /^-?[0-9]+$(?![\\s\\S])/.test(value) && Number(value) >= -2147483648 && Number(value) <= 2147483647 ? Number(value) : undefined;\n\nexport function parseGeneration(context: ParserContext, line: SourceLine, primitive: string): GenerationSyntax | null {\n const tokens = [...line.content.matchAll(tokenPattern)].map(match => match[0]).slice(1);\n const error = (code: string, message: string): void => context.error(code, message, locationOf(line));\n if (tokens.length === 0) {\n error(DiagnosticCodes.InvalidGenerationArgument, \"Expected 'generate <strategy> [modifiers]'.\");\n return null;\n }\n const strategy = tokens[0];\n if (!['uuid', 'uuidv7', 'ulid', 'typeid', 'nanoid', 'bytes', 'pattern', 'random', 'rule', 'sequence'].includes(strategy)) {\n error(DiagnosticCodes.UnknownGenerationStrategy, `Unknown generation strategy '${strategy}'.`);\n return null;\n }\n let result: GenerationSyntax = { kind: 'GenerationSyntax', strategy, location: locationOf(line) };\n let index = 1;\n let valid = true;\n switch (strategy) {\n case 'typeid':\n case 'pattern': {\n const text = literal(tokens[index++]);\n valid = text !== undefined;\n result = strategy === 'typeid' ? { ...result, prefix: text } : { ...result, pattern: text };\n break;\n }\n case 'nanoid': {\n const size = integer(tokens[index]);\n if (size !== undefined) { result = { ...result, size }; index++; }\n break;\n }\n case 'bytes': {\n const count = integer(tokens[index++]);\n const encoding = tokens[index++];\n valid = count !== undefined && ['base64url', 'hex', 'base32'].includes(encoding);\n result = { ...result, count, encoding };\n break;\n }\n case 'random': {\n const range = tokens[index++];\n const match = range?.match(/^(-?(?:0|[1-9][0-9]*))\\.\\.(-?(?:0|[1-9][0-9]*))$/);\n valid = match !== null && match !== undefined && BigInt(match[1]) >= -9223372036854775808n && BigInt(match[2]) <= 9223372036854775807n && BigInt(match[1]) <= BigInt(match[2]);\n result = { ...result, range };\n break;\n }\n case 'rule': {\n const rule = tokens[index++];\n valid = rule !== undefined && /^[A-Za-z_][A-Za-z0-9_]*$/.test(rule);\n result = { ...result, rule };\n break;\n }\n }\n if (!valid) {\n error(DiagnosticCodes.InvalidGenerationArgument, `Missing or invalid argument for generation strategy '${strategy}'.`);\n return result;\n }\n const seen = new Set<string>();\n while (index < tokens.length) {\n const modifier = tokens[index++];\n const value = tokens[index++];\n if (seen.has(modifier)) error(DiagnosticCodes.DuplicateGenerationModifier, `Generation modifier '${modifier}' is repeated.`);\n seen.add(modifier);\n if (!allows(strategy, primitive, result.encoding, modifier)) {\n error(DiagnosticCodes.InvalidGenerationModifier, `Generation modifier '${modifier}' is not allowed for '${strategy}' on '${primitive}'.`);\n continue;\n }\n const text = literal(value);\n if (modifier === 'prefix' || modifier === 'alphabet' ? text === undefined : modifier === 'case' ? !['lower', 'upper'].includes(value) : !['luhn', 'mod11', 'mod97'].includes(value)) {\n error(DiagnosticCodes.InvalidGenerationArgument, `Missing or invalid value for generation modifier '${modifier}'.`);\n continue;\n }\n switch (modifier) {\n case 'prefix': result = { ...result, prefix: text }; break;\n case 'alphabet': result = { ...result, alphabet: text }; break;\n case 'case': result = { ...result, case: value }; break;\n default: result = { ...result, checksum: value };\n }\n }\n const allowed = strategy === 'sequence' || (primitive === 'Uuid' ? ['uuid', 'uuidv7'].includes(strategy) : primitive === 'String' ? strategy !== 'random' : primitive === 'Int' && strategy === 'random');\n if (!allowed) error(DiagnosticCodes.InvalidGenerationPrimitive, `Generation strategy '${strategy}' is not allowed on '${primitive}'.`);\n if (result.prefix !== undefined && result.prefix !== null) {\n if (strategy === 'typeid') {\n if (!typeIdPrefix.test(result.prefix)) error(DiagnosticCodes.InvalidTypeIdPrefix, 'TypeID prefix must be empty or 1..63 lowercase letters and underscores, starting and ending with a letter.');\n } else if (result.prefix.length > 32 || !printable(result.prefix)) error(DiagnosticCodes.InvalidGenerationPrefix, 'Generation prefix must contain at most 32 printable ASCII characters.');\n }\n if (result.alphabet !== undefined && result.alphabet !== null && (result.alphabet.length < 2 || result.alphabet.length > 256 || !printable(result.alphabet) || new Set(result.alphabet).size !== result.alphabet.length)) {\n error(DiagnosticCodes.InvalidGenerationAlphabet, 'NanoID alphabet must contain 2..256 distinct printable ASCII characters.');\n }\n if ((result.size !== undefined && result.size !== null && (result.size < 1 || result.size > 256)) || (result.count !== undefined && result.count !== null && (result.count < 1 || result.count > 512))) {\n error(DiagnosticCodes.GenerationSizeOutsideRange, 'NanoID size must be 1..256 and bytes count must be 1..512.');\n }\n return result;\n}\n\nfunction allows(strategy: string, primitive: string, encoding: string | null | undefined, modifier: string): boolean {\n switch (modifier) {\n case 'prefix': return primitive === 'String' && ['uuid', 'uuidv7', 'ulid', 'nanoid', 'bytes'].includes(strategy);\n case 'alphabet': return strategy === 'nanoid';\n case 'case': return strategy === 'ulid' || (primitive === 'String' && ['uuid', 'uuidv7'].includes(strategy)) || (strategy === 'bytes' && ['hex', 'base32'].includes(encoding ?? ''));\n case 'checksum': return strategy === 'pattern';\n default: return false;\n }\n}\n"],"mappings":"uPASA,MAAMA,EAAmB,OAAO,IAAIC,EAAkB,QAAS,GAAG,EAC5DC,EAAe,2CACf,UAAa,GAA2B,CAAC,GAAGC,CAAK,CAAC,CAAC,MAAM,GAAaC,GAAa,KAAOA,GAAa,GAAG,EAC1G,QAAW,GAAkDD,IAAU,IAAA,IAAaA,EAAM,QAAU,GAAKA,EAAM,WAAW,GAAG,GAAKA,EAAM,SAAS,GAAG,EAAIE,EAAeF,EAAM,MAAM,EAAG,EAAE,CAAC,EAAI,IAAA,GAC7L,QAAW,GAAkDA,IAAU,IAAA,IAAa,uBAAuB,KAAKA,CAAK,GAAK,OAAOA,CAAK,GAAK,aAAe,OAAOA,CAAK,GAAK,WAAa,OAAOA,CAAK,EAAI,IAAA,GAE9M,SAAgB,gBAAgB,EAAwB,EAAkB,EAA4C,CAClH,IAAMG,EAAS,CAAC,GAAGC,EAAK,QAAQ,SAASP,CAAY,CAAC,CAAC,CAAC,IAAI,GAASQ,EAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAChF,OAAS,EAAc,IAA0BC,EAAQ,MAAMC,EAAMC,EAASC,EAAWL,CAAI,CAAC,EACpG,GAAID,EAAO,SAAW,EAElB,OADA,MAAMO,EAAgB,0BAA2B,6CAA6C,EACvF,KAEX,IAAMC,EAAWR,EAAO,GACxB,GAAI,CAAC,CAAC,OAAQ,SAAU,OAAQ,SAAU,SAAU,QAAS,UAAW,SAAU,OAAQ,UAAU,CAAC,CAAC,SAASQ,CAAQ,EAEnH,OADA,MAAMD,EAAgB,0BAA2B,gCAAgCC,EAAS,GAAG,EACtF,KAEX,IAAIC,EAA2B,CAAE,KAAM,mBAAoB,WAAU,SAAUH,EAAWL,CAAI,CAAE,EAC5FS,EAAQ,EACRC,EAAQ,GACZ,OAAQH,EAAR,CACI,IAAK,SACL,IAAK,UAAW,CACZ,IAAMI,EAAO,QAAQZ,EAAO,IAAQ,EACpC,EAAQY,IAAS,IAAA,GACjB,EAASJ,IAAa,SAAW,CAAE,GAAGC,EAAQ,OAAQG,CAAK,EAAI,CAAE,GAAGH,EAAQ,QAASG,CAAK,EAC1F,KACJ,CACA,IAAK,SAAU,CACX,IAAMC,EAAO,QAAQb,EAAOU,EAAM,EAC9BG,IAAS,IAAA,KAAa,EAAS,CAAE,GAAGJ,EAAQ,MAAK,EAAG,KACxD,KACJ,CACA,IAAK,QAAS,CACV,IAAMK,EAAQ,QAAQd,EAAO,IAAQ,EAC/Be,EAAWf,EAAO,KACxB,EAAQc,IAAU,IAAA,IAAa,CAAC,YAAa,MAAO,QAAQ,CAAC,CAAC,SAASC,CAAQ,EAC/E,EAAS,CAAE,GAAGN,EAAQ,QAAO,UAAS,EACtC,KACJ,CACA,IAAK,SAAU,CACX,IAAMO,EAAQhB,EAAO,KACfE,EAAQc,GAAO,MAAM,kDAAkD,EAC7E,EAAQd,GAAU,MAA+B,OAAOA,EAAM,EAAE,GAAK,CAAC,sBAAwB,OAAOA,EAAM,EAAE,GAAK,sBAAwB,OAAOA,EAAM,EAAE,GAAK,OAAOA,EAAM,EAAE,EAC7K,EAAS,CAAE,GAAGO,EAAQ,OAAM,EAC5B,KACJ,CACA,IAAK,OAAQ,CACT,IAAMQ,EAAOjB,EAAO,KACpB,EAAQiB,IAAS,IAAA,IAAa,2BAA2B,KAAKA,CAAI,EAClE,EAAS,CAAE,GAAGR,EAAQ,MAAK,EAC3B,KACJ,CACJ,CACA,GAAI,CAACE,EAED,OADA,MAAMJ,EAAgB,0BAA2B,wDAAwDC,EAAS,GAAG,EAC9GC,EAEX,IAAMS,kBAAO,IAAI,IACjB,KAAOR,EAAQV,EAAO,QAAQ,CAC1B,IAAMmB,EAAWnB,EAAO,KAClBH,EAAQG,EAAO,KAGrB,GAFIkB,EAAK,IAAIC,CAAQ,GAAG,MAAMZ,EAAgB,4BAA6B,wBAAwBY,EAAS,eAAe,EAC3HD,EAAK,IAAIC,CAAQ,EACb,CAAC,OAAOX,EAAUY,EAAWX,EAAO,SAAUU,CAAQ,EAAG,CACzD,MAAMZ,EAAgB,0BAA2B,wBAAwBY,EAAS,wBAAwBX,EAAS,QAAQY,EAAU,GAAG,EACxI,QACJ,CACA,IAAMR,EAAO,QAAQf,CAAK,EAC1B,GAAIsB,IAAa,UAAYA,IAAa,WAAaP,IAAS,IAAA,GAAYO,IAAa,OAAS,CAAC,CAAC,QAAS,OAAO,CAAC,CAAC,SAAStB,CAAK,EAAI,CAAC,CAAC,OAAQ,QAAS,OAAO,CAAC,CAAC,SAASA,CAAK,EAC9K,MAAMU,EAAgB,0BAA2B,qDAAqDY,EAAS,GAAG,OAGtH,OAAQA,EAAR,CACI,IAAK,SAAU,EAAS,CAAE,GAAGV,EAAQ,OAAQG,CAAK,EAAG,MACrD,IAAK,WAAY,EAAS,CAAE,GAAGH,EAAQ,SAAUG,CAAK,EAAG,MACzD,IAAK,OAAQ,EAAS,CAAE,GAAGH,EAAQ,KAAMZ,CAAM,EAAG,MAClD,QAAS,EAAS,CAAE,GAAGY,EAAQ,SAAUZ,CAAM,CACnD,CACJ,CAcA,OAbgBW,IAAa,aAAeY,IAAc,OAAS,CAAC,OAAQ,QAAQ,CAAC,CAAC,SAASZ,CAAQ,EAAIY,IAAc,SAAWZ,IAAa,SAAWY,IAAc,OAASZ,IAAa,WAClL,MAAMD,EAAgB,2BAA4B,wBAAwBC,EAAS,uBAAuBY,EAAU,GAAG,EACjIX,EAAO,SAAW,IAAA,IAAaA,EAAO,SAAW,OAC7CD,IAAa,SACRZ,EAAa,KAAKa,EAAO,MAAM,GAAG,MAAMF,EAAgB,oBAAqB,4GAA4G,GACvLE,EAAO,OAAO,OAAS,IAAM,CAAC,UAAUA,EAAO,MAAM,IAAG,MAAMF,EAAgB,wBAAyB,uEAAuE,GAEzLE,EAAO,WAAa,IAAA,IAAaA,EAAO,WAAa,OAASA,EAAO,SAAS,OAAS,GAAKA,EAAO,SAAS,OAAS,KAAO,CAAC,UAAUA,EAAO,QAAQ,GAAK,IAAI,IAAIA,EAAO,QAAQ,CAAC,CAAC,OAASA,EAAO,SAAS,SAC7M,MAAMF,EAAgB,0BAA2B,0EAA0E,GAE1HE,EAAO,OAAS,IAAA,IAAaA,EAAO,OAAS,OAASA,EAAO,KAAO,GAAKA,EAAO,KAAO,MAAUA,EAAO,QAAU,IAAA,IAAaA,EAAO,QAAU,OAASA,EAAO,MAAQ,GAAKA,EAAO,MAAQ,OAC7L,MAAMF,EAAgB,2BAA4B,4DAA4D,EAE3GE,CACX,CAEA,SAAS,OAAO,EAAkB,EAAmB,EAAqC,EAA2B,CACjH,OAAQU,EAAR,CACI,IAAK,SAAU,OAAOC,IAAc,UAAY,CAAC,OAAQ,SAAU,OAAQ,SAAU,OAAO,CAAC,CAAC,SAASZ,CAAQ,EAC/G,IAAK,WAAY,OAAOA,IAAa,SACrC,IAAK,OAAQ,OAAOA,IAAa,QAAWY,IAAc,UAAY,CAAC,OAAQ,QAAQ,CAAC,CAAC,SAASZ,CAAQ,GAAOA,IAAa,SAAW,CAAC,MAAO,QAAQ,CAAC,CAAC,SAASO,GAAY,EAAE,EAClL,IAAK,WAAY,OAAOP,IAAa,UACrC,QAAS,MAAO,EACpB,CACJ"}
1
+ {"version":3,"file":"GenerationParser.js","names":["tokenPattern","stringBodyPattern","typeIdPrefix","value","character","unescapeString","tokens","line","match","context","code","message","locationOf","DiagnosticCodes","strategy","result","index","valid","text","size","count","encoding","range","rule","seen","modifier","primitive","parseGenerationPattern","failure","InvalidGenerationPattern","parseGenerationBody"],"sources":["../../../../../../Compiler/Parsing/GenerationParser.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { DiagnosticCodes } from '../Diagnostics/DiagnosticCodes';\nimport { ChecksumAlgorithm, InvalidGenerationPattern, parseGenerationPattern } from '../Generation';\nimport { GenerationSyntax } from '../Syntax/GenerationSyntax';\nimport { stringBodyPattern, unescapeString } from '../Text/StringLiteral';\nimport { ParserContext } from './ParserContext';\nimport { parseGenerationBody } from './GenerationBodyParser';\nimport { locationOf, SourceLine } from './SourceLine';\n\nconst tokenPattern = new RegExp(`\"${stringBodyPattern}\"|\\\\S+`, 'g');\nconst typeIdPrefix = /^([a-z]([a-z_]{0,61}[a-z])?)?$(?![\\s\\S])/;\nconst printable = (value: string): boolean => [...value].every(character => character >= ' ' && character <= '~');\nconst literal = (value: string | undefined): string | undefined => value !== undefined && value.length >= 2 && value.startsWith('\"') && value.endsWith('\"') ? unescapeString(value.slice(1, -1)) : undefined;\nconst integer = (value: string | undefined): number | undefined => value !== undefined && /^-?[0-9]+$(?![\\s\\S])/.test(value) && Number(value) >= -2147483648 && Number(value) <= 2147483647 ? Number(value) : undefined;\n\nexport function parseGeneration(context: ParserContext, line: SourceLine, primitive: string): GenerationSyntax | null {\n const tokens = [...line.content.matchAll(tokenPattern)].map(match => match[0]).slice(1);\n const error = (code: string, message: string): void => context.error(code, message, locationOf(line));\n if (tokens.length === 0) {\n error(DiagnosticCodes.InvalidGenerationArgument, \"Expected 'generate <strategy> [modifiers]'.\");\n return null;\n }\n const strategy = tokens[0];\n if (!['uuid', 'uuidv7', 'ulid', 'typeid', 'nanoid', 'bytes', 'pattern', 'random', 'rule', 'sequence'].includes(strategy)) {\n error(DiagnosticCodes.UnknownGenerationStrategy, `Unknown generation strategy '${strategy}'.`);\n return null;\n }\n let result: GenerationSyntax = { kind: 'GenerationSyntax', strategy, location: locationOf(line) };\n let index = 1;\n let valid = true;\n switch (strategy) {\n case 'typeid':\n case 'pattern': {\n const text = literal(tokens[index++]);\n valid = text !== undefined;\n result = strategy === 'typeid' ? { ...result, prefix: text } : { ...result, pattern: text };\n break;\n }\n case 'nanoid': {\n const size = integer(tokens[index]);\n if (size !== undefined) { result = { ...result, size }; index++; }\n break;\n }\n case 'bytes': {\n const count = integer(tokens[index++]);\n const encoding = tokens[index++];\n valid = count !== undefined && ['base64url', 'hex', 'base32'].includes(encoding);\n result = { ...result, count, encoding };\n break;\n }\n case 'random': {\n const range = tokens[index++];\n const match = range?.match(/^(-?(?:0|[1-9][0-9]*))\\.\\.(-?(?:0|[1-9][0-9]*))$(?![\\s\\S])/);\n valid = match !== null && match !== undefined && BigInt(match[1]) >= -9223372036854775808n && BigInt(match[2]) <= 9223372036854775807n && BigInt(match[1]) <= BigInt(match[2]);\n result = { ...result, range };\n break;\n }\n case 'rule': {\n const rule = tokens[index++];\n valid = rule !== undefined && /^[A-Za-z_][A-Za-z0-9_]*$(?![\\s\\S])/.test(rule);\n result = { ...result, rule };\n break;\n }\n }\n if (!valid) {\n error(DiagnosticCodes.InvalidGenerationArgument, `Missing or invalid argument for generation strategy '${strategy}'.`);\n return result;\n }\n const seen = new Set<string>();\n while (index < tokens.length) {\n const modifier = tokens[index++];\n const value = tokens[index++];\n if (seen.has(modifier)) error(DiagnosticCodes.DuplicateGenerationModifier, `Generation modifier '${modifier}' is repeated.`);\n seen.add(modifier);\n if (!allows(strategy, primitive, result.encoding, modifier)) {\n error(DiagnosticCodes.InvalidGenerationModifier, `Generation modifier '${modifier}' is not allowed for '${strategy}' on '${primitive}'.`);\n continue;\n }\n const text = literal(value);\n if (modifier === 'prefix' || modifier === 'alphabet' ? text === undefined : modifier === 'case' ? !['lower', 'upper'].includes(value) : !['luhn', 'mod11', 'mod97'].includes(value)) {\n error(DiagnosticCodes.InvalidGenerationArgument, `Missing or invalid value for generation modifier '${modifier}'.`);\n continue;\n }\n switch (modifier) {\n case 'prefix': result = { ...result, prefix: text }; break;\n case 'alphabet': result = { ...result, alphabet: text }; break;\n case 'case': result = { ...result, case: value }; break;\n default: result = { ...result, checksum: value };\n }\n }\n if (strategy === 'pattern' && result.pattern !== undefined && result.pattern !== null) {\n try { parseGenerationPattern(result.pattern, result.checksum as ChecksumAlgorithm | undefined); }\n catch (failure) {\n if (!(failure instanceof InvalidGenerationPattern)) throw failure;\n error(failure.message.includes('expanded length') ? DiagnosticCodes.GenerationSizeOutsideRange : DiagnosticCodes.InvalidGenerationArgument, failure.message);\n }\n }\n const allowed = strategy === 'sequence' || (primitive === 'Uuid' ? ['uuid', 'uuidv7'].includes(strategy) : primitive === 'String' ? strategy !== 'random' : primitive === 'Int' && strategy === 'random');\n if (!allowed) error(DiagnosticCodes.InvalidGenerationPrimitive, `Generation strategy '${strategy}' is not allowed on '${primitive}'.`);\n if (result.prefix !== undefined && result.prefix !== null) {\n if (strategy === 'typeid') {\n if (!typeIdPrefix.test(result.prefix)) error(DiagnosticCodes.InvalidTypeIdPrefix, 'TypeID prefix must be empty or 1..63 lowercase letters and underscores, starting and ending with a letter.');\n } else if (result.prefix.length > 32 || !printable(result.prefix)) error(DiagnosticCodes.InvalidGenerationPrefix, 'Generation prefix must contain at most 32 printable ASCII characters.');\n }\n if (result.alphabet !== undefined && result.alphabet !== null && (result.alphabet.length < 2 || result.alphabet.length > 256 || !printable(result.alphabet) || new Set(result.alphabet).size !== result.alphabet.length)) {\n error(DiagnosticCodes.InvalidGenerationAlphabet, 'NanoID alphabet must contain 2..256 distinct printable ASCII characters.');\n }\n if ((result.size !== undefined && result.size !== null && (result.size < 1 || result.size > 256)) || (result.count !== undefined && result.count !== null && (result.count < 1 || result.count > 512))) {\n error(DiagnosticCodes.GenerationSizeOutsideRange, 'NanoID size must be 1..256 and bytes count must be 1..512.');\n }\n return parseGenerationBody(context, line, result);\n}\n\nfunction allows(strategy: string, primitive: string, encoding: string | null | undefined, modifier: string): boolean {\n switch (modifier) {\n case 'prefix': return primitive === 'String' && ['uuid', 'uuidv7', 'ulid', 'nanoid', 'bytes'].includes(strategy);\n case 'alphabet': return strategy === 'nanoid';\n case 'case': return strategy === 'ulid' || (primitive === 'String' && ['uuid', 'uuidv7'].includes(strategy)) || (strategy === 'bytes' && ['hex', 'base32'].includes(encoding ?? ''));\n case 'checksum': return strategy === 'pattern';\n default: return false;\n }\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import"../../_virtual/_virtual/_rolldown/runtime.js";var ScreenplaySyntaxWalker=class{visitNode(e){}visitApplication(e){this.visitNode(e),e.domain!==null&&this.visitDomain(e.domain),e.imports.forEach(e=>this.visitImport(e)),e.fileImports.forEach(e=>this.visitFileImport(e)),e.systems?.forEach(e=>this.visitSystem(e)),e.eventSources?.forEach(e=>this.visitEventSource(e)),e.concepts.forEach(e=>this.visitConcept(e)),e.types.forEach(e=>this.visitType(e)),e.personas.forEach(e=>this.visitPersona(e)),e.policies?.forEach(e=>this.visitPolicy(e)),e.exposures?.forEach(e=>{this.visitNode(e),e.properties.forEach(e=>this.visitNode(e))}),e.instanceContributions?.forEach(e=>{this.visitNode(e),e.contributions.forEach(e=>{this.visitNode(e),e.value!==null&&this.visitExpression(e.value),e.items.forEach(e=>{this.visitNode(e),e.values.forEach(e=>{this.visitNode(e),this.visitExpression(e.value)})})})}),e.identity!=null&&this.visitIdentity(e.identity),e.purposes?.forEach(e=>this.visitPurpose(e)),e.seeds?.forEach(e=>this.visitSeed(e)),e.modules.forEach(e=>this.visitModule(e)),e.examples?.forEach(e=>this.visitSpecificationExample(e))}visitIdentity(e){this.visitNode(e),e.details.forEach(e=>this.visitIdentityDetail(e))}visitIdentityDetail(e){this.visitNode(e),this.visitTypeRef(e.type),this.visitIdentitySource(e.source)}visitIdentitySource(e){switch(e.kind){case`ClaimIdentitySourceSyntax`:this.visitClaimIdentitySource(e);break;case`QueryIdentitySourceSyntax`:this.visitQueryIdentitySource(e);break;case`CodeIdentitySourceSyntax`:this.visitCodeIdentitySource(e);break;case`FileIdentitySourceSyntax`:this.visitFileIdentitySource(e);break;default:this.visitNode(e)}}visitClaimIdentitySource(e){this.visitNode(e)}visitQueryIdentitySource(e){this.visitNode(e),this.visitExpression(e.by)}visitCodeIdentitySource(e){this.visitNode(e),this.visitCodeBlock(e.code)}visitFileIdentitySource(e){this.visitNode(e),this.visitFileReference(e.file)}visitPurpose(e){this.visitNode(e),e.transfers.forEach(e=>this.visitPurposeTransfer(e))}visitPurposeReference(e){this.visitNode(e)}visitPurposeTransfer(e){this.visitNode(e)}visitPolicy(e){this.visitNode(e),e.condition!==null&&this.visitPolicyCondition(e.condition),e.code!==null&&this.visitCodeBlock(e.code),e.file!==null&&this.visitFileReference(e.file)}visitPolicyCondition(e){this.visitNode(e),e.kind===`ClaimConditionSyntax`&&e.matches!==null&&this.visitExpression(e.matches),e.kind===`NotPolicyConditionSyntax`&&this.visitPolicyCondition(e.operand),e.kind===`LogicalPolicyConditionSyntax`&&(this.visitPolicyCondition(e.left),this.visitPolicyCondition(e.right))}visitSeed(e){this.visitNode(e),e.groups.forEach(e=>{this.visitNode(e),e.events.forEach(e=>{this.visitNode(e),e.properties.forEach(e=>this.visitPropertyMapping(e))})})}visitPersona(e){this.visitNode(e)}visitAuthorize(e){this.visitNode(e),this.visitPolicyRequirement(e.requirement)}visitPolicyRequirement(e){this.visitNode(e),e.kind===`LogicalPolicyRequirementSyntax`&&(this.visitPolicyRequirement(e.left),this.visitPolicyRequirement(e.right))}visitDomain(e){this.visitNode(e)}visitImport(e){this.visitNode(e)}visitFileImport(e){this.visitNode(e)}visitGeneration(e){this.visitNode(e)}visitConcept(e){this.visitNode(e),e.attributes.forEach(e=>this.visitNode(e)),e.generation&&this.visitGeneration(e.generation),e.validations?.forEach(e=>this.visitValidate(e))}visitType(e){this.visitNode(e),e.properties.forEach(e=>this.visitProperty(e))}visitDependsOn(e){this.visitNode(e)}visitModule(e){this.visitNode(e),e.purposes?.forEach(e=>this.visitPurposeReference(e)),e.examples?.forEach(e=>this.visitSpecificationExample(e)),e.dependsOn?.forEach(e=>this.visitDependsOn(e)),e.fileImports.forEach(e=>this.visitFileImport(e)),e.authorize!==null&&this.visitAuthorize(e.authorize),e.features.forEach(e=>this.visitFeature(e))}visitFeature(e){this.visitNode(e),e.purposes?.forEach(e=>this.visitPurposeReference(e)),e.examples?.forEach(e=>this.visitSpecificationExample(e)),e.dependsOn?.forEach(e=>this.visitDependsOn(e)),e.fileImports.forEach(e=>this.visitFileImport(e)),e.authorize!==null&&this.visitAuthorize(e.authorize),e.features.forEach(e=>this.visitFeature(e)),e.slices.forEach(e=>this.visitSlice(e))}visitSlice(e){this.visitNode(e),e.purposes?.forEach(e=>this.visitPurposeReference(e)),e.examples?.forEach(e=>this.visitSpecificationExample(e)),e.commands.forEach(e=>this.visitCommand(e)),e.operations?.forEach(e=>this.visitOperation(e)),e.events.forEach(e=>this.visitEvent(e)),e.constraints.forEach(e=>this.visitConstraint(e)),e.queries.forEach(e=>this.visitQuery(e)),e.projections.forEach(e=>this.visitProjection(e)),e.readModels.forEach(e=>this.visitReadModel(e)),e.captures.forEach(e=>this.visitCapture(e)),e.reactions.forEach(e=>this.visitReaction(e)),e.screens.forEach(e=>this.visitScreen(e)),e.specifications.forEach(e=>this.visitSpecification(e))}visitTriggerData(e){this.visitNode(e),e.type!==null&&this.visitTypeRef(e.type)}visitReads(e){this.visitNode(e),e.byParts?.forEach(e=>this.visitPropertyMapping(e))}visitConcurrency(e){this.visitNode(e)}visitReducer(e){this.visitNode(e),e.from!=null&&this.visitObserverFilter(e.from),e.rules.forEach(e=>this.visitReducerRule(e))}visitReducerRule(e){this.visitNode(e),e.file!==null&&this.visitFileReference(e.file),e.code!==null&&this.visitCodeBlock(e.code)}visitForm(e){this.visitNode(e),e.populate!==null&&this.visitNode(e.populate),e.fields.forEach(e=>this.visitNode(e)),e.columns?.forEach(e=>this.visitNode(e)),e.layout!==null&&e.layout!==void 0&&(this.visitNode(e.layout),e.layout.columns.forEach(e=>{this.visitNode(e),e.width!==null&&this.visitNode(e.width),e.minWidth!==null&&this.visitNode(e.minWidth),e.maxWidth!==null&&this.visitNode(e.maxWidth)}),e.layout.columnGap!==null&&this.visitNode(e.layout.columnGap),e.layout.rowGap!==null&&this.visitNode(e.layout.rowGap),e.layout.placements.forEach(e=>{this.visitNode(e),e.width!==null&&this.visitNode(e.width)})),e.onSubmit!==null&&this.visitScreenDirective(e.onSubmit)}visitCommand(e){this.visitNode(e),e.properties.forEach(e=>this.visitProperty(e)),e.authorize!==null&&this.visitAuthorize(e.authorize),e.stream!=null&&this.visitCommandStream(e.stream),e.streamCandidates?.forEach(e=>this.visitCommandStream(e)),e.validations.forEach(e=>this.visitValidate(e)),e.produces.forEach(e=>this.visitProduces(e)),e.handler!=null&&this.visitHandler(e.handler),e.response!=null&&this.visitCommandResponse(e.response)}visitEventSource(e){this.visitNode(e),e.identifier!==null&&this.visitTypeRef(e.identifier),e.streams.forEach(e=>this.visitEventStream(e))}visitEventStream(e){this.visitNode(e),e.streamId!==null&&this.visitTypeRef(e.streamId),e.streamIdParts.forEach(e=>this.visitEventStreamIdPart(e))}visitEventStreamIdPart(e){this.visitNode(e),this.visitTypeRef(e.type)}visitObserverFilter(e){this.visitNode(e)}visitCommandStream(e){this.visitNode(e),e.streamId!==null&&this.visitPropertyMapping(e.streamId),e.streamIdParts.forEach(e=>this.visitPropertyMapping(e)),e.propertyCandidate!==null&&this.visitProperty(e.propertyCandidate)}visitSystem(e){this.visitNode(e)}visitOperation(e){this.visitNode(e),e.inputs.forEach(e=>this.visitProperty(e)),e.execute!==null&&this.visitOperationPhase(e.execute),e.compensate!==null&&this.visitOperationPhase(e.compensate)}visitOperationPhase(e){this.visitNode(e),e.implementation!==null&&this.visitImplementation(e.implementation),e.file!==null&&this.visitFileReference(e.file),e.code!==null&&this.visitCodeBlock(e.code)}visitSpecificationOperationFailure(e){this.visitNode(e)}visitSpecificationCompensated(e){this.visitNode(e)}visitSpecificationOperation(e){this.visitNode(e),e.values.forEach(e=>this.visitPropertyMapping(e))}visitHandler(e){this.visitNode(e),e.implementation!=null&&this.visitImplementation(e.implementation),e.file!==null&&this.visitFileReference(e.file),e.code!==null&&this.visitCodeBlock(e.code)}visitImplementation(e){this.visitNode(e),e.hints.forEach(e=>this.visitImplementationHint(e))}visitImplementationHint(e){this.visitNode(e)}visitFileReference(e){this.visitNode(e)}visitCodeBlock(e){this.visitNode(e)}visitCommandResponse(e){e.kind===`ScalarCommandResponseSyntax`?this.visitScalarCommandResponse(e):this.visitRecordCommandResponse(e)}visitScalarCommandResponse(e){this.visitNode(e),this.visitPropertyResponseSource(e.source)}visitRecordCommandResponse(e){this.visitNode(e),e.fields.forEach(e=>this.visitResponseField(e))}visitResponseField(e){this.visitNode(e),e.type!==null&&this.visitTypeRef(e.type),this.visitPropertyResponseSource(e.source)}visitPropertyResponseSource(e){this.visitNode(e)}visitSpecificationReturn(e){e.kind===`ScalarSpecificationReturnSyntax`?this.visitScalarSpecificationReturn(e):this.visitRecordSpecificationReturn(e)}visitScalarSpecificationReturn(e){this.visitNode(e),this.visitExpression(e.value)}visitRecordSpecificationReturn(e){this.visitNode(e),e.fields.forEach(e=>this.visitPropertyMapping(e))}visitValidate(e){this.visitNode(e),e.kind===`DeclarativeValidateSyntax`?(e.rules.forEach(e=>this.visitValidationRule(e)),e.requirements?.forEach(e=>{this.visitNode(e),this.visitCondition(e.condition)})):e.code!=null&&this.visitCodeBlock(e.code)}visitValidationRule(e){this.visitNode(e),e.implementation!=null&&this.visitImplementation(e.implementation),e.value!==null&&this.visitExpression(e.value),e.file!==null&&this.visitFileReference(e.file),e.code!==null&&this.visitCodeBlock(e.code)}visitEvent(e){this.visitNode(e),e.properties.forEach(e=>this.visitProperty(e)),e.tags.forEach(e=>this.visitTag(e))}visitTag(e){this.visitNode(e),this.visitExpression(e.value)}visitReadModel(e){this.visitNode(e),e.properties.forEach(e=>this.visitProperty(e))}visitConstraint(e){this.visitNode(e),e.kind===`FileConstraintSyntax`&&this.visitNode(e.file),e.additionalRules.forEach(e=>this.visitConstraint(e))}visitQuery(e){this.visitNode(e),this.visitTypeRef(e.returnType),e.by!==null&&this.visitQueryParameter(e.by),e.byParts?.forEach(e=>this.visitQueryParameter(e)),e.filters.forEach(e=>this.visitQueryParameter(e)),e.authorize!==null&&this.visitAuthorize(e.authorize)}visitQueryParameter(e){this.visitNode(e),this.visitTypeRef(e.type),e.source!=null&&this.visitExpression(e.source)}visitKey(e){this.visitNode(e),e.kind===`ExpressionKeySyntax`?this.visitExpression(e.expression):e.parts.forEach(e=>{this.visitNode(e),this.visitExpression(e.expression)})}visitProjection(e){this.visitNode(e),e.key!=null&&this.visitKey(e.key),e.blocks.forEach(e=>this.visitProjectionBlock(e))}visitProjectionBlock(e){switch(this.visitNode(e),e.kind){case`FromSyntax`:e.events.forEach(e=>{this.visitNode(e),e.key!=null&&this.visitExpression(e.key)}),e.key!=null&&this.visitKey(e.key),e.parentKey!=null&&this.visitExpression(e.parentKey),e.mappings.forEach(e=>this.visitMapping(e));break;case`EverySyntax`:case`AllSyntax`:e.mappings.forEach(e=>this.visitMapping(e));break;case`JoinSyntax`:e.events.forEach(e=>this.visitJoinEvent(e));break;case`ProjectionVariantSyntax`:e.entersOn.forEach(e=>{this.visitNode(e),e.key!=null&&this.visitExpression(e.key)}),e.blocks.forEach(e=>this.visitProjectionBlock(e));break;case`ChildrenSyntax`:e.identifiedBy!==void 0&&this.visitExpression(e.identifiedBy),e.blocks.forEach(e=>this.visitProjectionBlock(e));break;case`NestedSyntax`:e.blocks.forEach(e=>this.visitProjectionBlock(e));break;case`RemoveWithSyntax`:e.parentKey!=null&&this.visitExpression(e.parentKey),e.key!=null&&this.visitExpression(e.key);break;case`RemoveViaJoinSyntax`:e.key!=null&&this.visitExpression(e.key)}}visitJoinEvent(e){this.visitNode(e),e.mappings.forEach(e=>this.visitMapping(e))}visitMapping(e){this.visitNode(e),e.source!==void 0&&this.visitExpression(e.source),e.value!==void 0&&this.visitExpression(e.value)}visitCondition(e){this.visitNode(e),e.kind===`ComparisonConditionSyntax`?this.visitExpression(e.right):(this.visitCondition(e.left),this.visitCondition(e.right))}visitReaction(e){this.visitNode(e),e.from!=null&&this.visitObserverFilter(e.from),e.runsAs!=null&&this.visitReactionIdentity(e.runsAs),e.where!=null&&this.visitCondition(e.where),e.triggers.forEach(e=>this.visitReactionTrigger(e))}visitReactionIdentity(e){this.visitNode(e)}visitReactionTrigger(e){this.visitNode(e),this.visitTriggerSource(e.source),e.produces.forEach(e=>this.visitProduces(e)),e.invokes.forEach(e=>this.visitInvokes(e))}visitProduces(e){this.visitNode(e),e.stream!=null&&this.visitCommandStream(e.stream),e.when!=null&&this.visitCondition(e.when),e.inlineEvent!==null&&this.visitEvent(e.inlineEvent),e.inlineOperation!=null&&this.visitOperation(e.inlineOperation),e.for!==null&&this.visitExpression(e.for),e.mappings.forEach(e=>this.visitPropertyMapping(e)),e.tags.forEach(e=>this.visitTag(e))}visitInvokes(e){this.visitNode(e),e.mappings?.forEach(e=>this.visitPropertyMapping(e)),e.onRefused?.forEach(e=>this.visitInvocationRefusal(e))}visitInvocationRefusal(e){this.visitNode(e),e.produces.forEach(e=>this.visitProduces(e))}visitCapture(e){this.visitNode(e),e.source!==null&&this.visitCaptureSource(e.source),e.map?.forEach(e=>this.visitCaptureMap(e)),e.appends.forEach(e=>this.visitCaptureAppend(e)),e.children.forEach(e=>this.visitCaptureChildren(e)),e.nested.forEach(e=>this.visitCaptureNested(e))}visitCaptureSource(e){this.visitNode(e),e.settings.forEach(e=>this.visitCaptureSourceSetting(e))}visitCaptureSourceSetting(e){this.visitNode(e)}visitCaptureMap(e){this.visitNode(e),this.visitExpression(e.source),e.kind===`CaptureMapEntrySyntax`&&e.translations.forEach(e=>this.visitNode(e))}visitCaptureAppend(e){this.visitNode(e),e.when!=null&&this.visitNode(e.when),e.mappings?.forEach(e=>this.visitPropertyMapping(e)),e.tags?.forEach(e=>this.visitTag(e))}visitCaptureChildren(e){this.visitNode(e),e.map?.forEach(e=>this.visitCaptureMap(e)),e.appends.forEach(e=>this.visitCaptureAppend(e))}visitCaptureNested(e){this.visitNode(e),e.map?.forEach(e=>this.visitCaptureMap(e)),e.appends.forEach(e=>this.visitCaptureAppend(e))}visitTriggerSource(e){this.visitNode(e)}visitScreen(e){this.visitNode(e),e.directives.forEach(e=>this.visitScreenDirective(e)),e.contributions?.forEach(e=>{this.visitNode(e),e.directives.forEach(e=>this.visitScreenDirective(e))})}visitScreenDirective(e){if(e.kind===`ScreenGuardedActionSyntax`)this.visitScreenGuardedAction(e);else switch(this.visitNode(e),e.kind){case`ScreenDataSyntax`:this.visitTypeRef(e.type);break;case`ScreenActionSyntax`:e.navigate!==null&&this.visitScreenDirective(e.navigate);break;case`ScreenNavigateSyntax`:e.parameters.forEach(e=>{this.visitNode(e),this.visitUiBinding(e.binding)});break;case`ScreenTemplateReferenceSyntax`:e.slots.forEach(e=>{this.visitNode(e),e.directives.forEach(e=>this.visitScreenDirective(e))});break;case`ScreenSectionSyntax`:e.directives.forEach(e=>this.visitScreenDirective(e));break;case`ScreenTableSyntax`:e.columns.forEach(e=>this.visitNode(e)),e.rowClick!==null&&this.visitScreenDirective(e.rowClick);break;case`ScreenSummarySyntax`:e.fields.forEach(e=>this.visitNode(e));break;case`ScreenComponentSyntax`:e.context!==null&&this.visitUiBinding(e.context),e.properties.forEach(e=>{this.visitNode(e),e.binding!==null&&this.visitUiBinding(e.binding),e.value!==null&&this.visitExpression(e.value)}),e.exposes.forEach(e=>{this.visitNode(e),this.visitUiBinding(e.binding)}),e.presentation.forEach(e=>this.visitNode(e)),e.outlets.forEach(e=>{this.visitNode(e),e.directives.forEach(e=>this.visitScreenDirective(e))});break;case`ScreenToolbarSyntax`:e.items.forEach(e=>{this.visitNode(e),e.parameters.forEach(e=>{this.visitNode(e),this.visitUiBinding(e.binding)}),e.presentation.forEach(e=>this.visitNode(e))});break;case`ScreenCodeSyntax`:this.visitNode(e.code)}}visitScreenGuardedAction(e){this.visitNode(e),e.alternatives.forEach(e=>this.visitScreenActionAlternative(e)),e.otherwise!==null&&this.visitScreenActionOtherwise(e.otherwise),e.navigate!==null&&this.visitScreenDirective(e.navigate)}visitScreenActionAlternative(e){this.visitNode(e),this.visitCondition(e.condition),e.arguments.forEach(e=>this.visitInteractionArgument(e))}visitScreenActionOtherwise(e){this.visitNode(e),e.arguments.forEach(e=>this.visitInteractionArgument(e))}visitInteractionArgument(e){this.visitNode(e)}visitSpecification(e){this.visitNode(e),e.examples?.forEach(e=>this.visitSpecificationExample(e)),e.parameters?.forEach(e=>{this.visitNode(e),this.visitTypeRef(e.type)}),e.cases?.forEach(e=>{this.visitNode(e),e.values.forEach(e=>this.visitPropertyMapping(e))}),e.givenClock!==null&&this.visitSpecificationClock(e.givenClock),e.givenOperationFailures?.forEach(e=>this.visitSpecificationOperationFailure(e)),e.thenOperations?.forEach(e=>this.visitSpecificationOperation(e)),e.thenCompensated?.forEach(e=>this.visitSpecificationCompensated(e)),e.givenCallerPersona!=null&&this.visitNode(e.givenCallerPersona),e.givenCaller!=null&&(this.visitNode(e.givenCaller),e.givenCaller.claims.forEach(e=>this.visitNode(e))),e.given.forEach(e=>this.visitSpecificationEvent(e)),e.givenReadModels.forEach(e=>this.visitSpecificationReadModel(e)),e.when!==null&&this.visitSpecificationCommand(e.when),e.givenCaptures.forEach(e=>this.visitSpecificationCapture(e)),e.whenAppended!==null&&this.visitSpecificationEvent(e.whenAppended),e.whenRedelivered!=null&&this.visitSpecificationRedelivery(e.whenRedelivered),e.whenClock!==null&&this.visitSpecificationClock(e.whenClock),e.whenTrigger!==null&&this.visitSpecificationTrigger(e.whenTrigger),e.whenCapture!==null&&this.visitSpecificationCapture(e.whenCapture),e.whenQuery!==null&&this.visitSpecificationWhenQuery(e.whenQuery),e.thenEvents.forEach(e=>this.visitSpecificationEvent(e)),e.thenReadModels.forEach(e=>this.visitSpecificationReadModel(e)),e.thenAbsentReadModels?.forEach(e=>{this.visitNode(e),this.visitExpression(e.key)}),e.thenQueries?.forEach(e=>{this.visitNode(e),e.arguments.forEach(e=>this.visitPropertyMapping(e)),e.results.forEach(e=>this.visitSpecificationQueryResult(e))}),e.thenResults.forEach(e=>this.visitSpecificationQueryResult(e)),e.thenNoResult!==null&&this.visitNode(e.thenNoResult),e.thenDenied!=null&&this.visitNode(e.thenDenied),e.thenReturns!=null&&this.visitSpecificationReturn(e.thenReturns),e.thenErrors.forEach(e=>{this.visitNode(e),e.caseValue!=null&&this.visitExpression(e.caseValue)})}visitSpecificationRedelivery(e){this.visitNode(e),e.for!==null&&this.visitExpression(e.for),e.stream!=null&&this.visitSpecificationStream(e.stream),e.noStream!=null&&this.visitSpecificationNoStream(e.noStream),e.values.forEach(e=>this.visitPropertyMapping(e))}visitSpecificationClock(e){this.visitNode(e)}visitSpecificationTrigger(e){this.visitNode(e),e.values.forEach(e=>this.visitPropertyMapping(e))}visitSpecificationCapture(e){this.visitNode(e),e.record.forEach(e=>this.visitPropertyMapping(e))}visitSpecificationWhenQuery(e){this.visitNode(e),e.arguments.forEach(e=>this.visitPropertyMapping(e))}visitSpecificationQueryResult(e){this.visitNode(e),e.properties.forEach(e=>this.visitPropertyMapping(e))}visitSpecificationExample(e){this.visitNode(e),e.for!==null&&this.visitExpression(e.for),e.stream!=null&&this.visitSpecificationStream(e.stream),e.noStream!=null&&this.visitSpecificationNoStream(e.noStream),e.values.forEach(e=>this.visitPropertyMapping(e)),e.generatedValues.forEach(e=>this.visitPropertyMapping(e))}visitSpecificationEvent(e){this.visitNode(e),e.stream!=null&&this.visitSpecificationStream(e.stream),e.noStream!=null&&this.visitSpecificationNoStream(e.noStream),e.values.forEach(e=>this.visitPropertyMapping(e)),e.for!==null&&this.visitExpression(e.for)}visitSpecificationStream(e){this.visitNode(e),e.streamId!==null&&this.visitPropertyMapping(e.streamId),e.streamIdParts.forEach(e=>this.visitPropertyMapping(e))}visitSpecificationNoStream(e){this.visitNode(e)}visitSpecificationCommand(e){this.visitNode(e),(e.generatedValues??[]).forEach(e=>this.visitPropertyMapping(e)),e.values.forEach(e=>this.visitPropertyMapping(e)),e.for!==null&&this.visitExpression(e.for)}visitSpecificationReadModel(e){this.visitNode(e),e.properties.forEach(e=>this.visitPropertyMapping(e))}visitPropertyMapping(e){this.visitNode(e),this.visitExpression(e.source)}visitProperty(e){this.visitNode(e),this.visitTypeRef(e.type)}visitTypeRef(e){this.visitNode(e)}visitUiBinding(e){this.visitNode(e),e.literal!==null&&this.visitExpression(e.literal)}visitIdentityExpression(e){this.visitNode(e)}visitExpression(e){e.kind===`IdentityExpressionSyntax`?this.visitIdentityExpression(e):(this.visitNode(e),e.kind===`ListExpressionSyntax`?e.items.forEach(e=>this.visitExpression(e)):e.kind===`ObjectExpressionSyntax`?e.members.forEach(e=>this.visitObjectMember(e)):e.kind===`TemplateExpressionSyntax`&&e.parts.forEach(e=>{this.visitNode(e),e.kind===`TemplateInterpolationSyntax`&&this.visitExpression(e.expression)}))}visitObjectMember(e){this.visitNode(e),this.visitExpression(e.value)}};export{ScreenplaySyntaxWalker};
1
+ import"../../_virtual/_virtual/_rolldown/runtime.js";var ScreenplaySyntaxWalker=class{visitNode(e){}visitApplication(e){this.visitNode(e),e.domain!==null&&this.visitDomain(e.domain),e.imports.forEach(e=>this.visitImport(e)),e.fileImports.forEach(e=>this.visitFileImport(e)),e.systems?.forEach(e=>this.visitSystem(e)),e.eventSources?.forEach(e=>this.visitEventSource(e)),e.concepts.forEach(e=>this.visitConcept(e)),e.types.forEach(e=>this.visitType(e)),e.personas.forEach(e=>this.visitPersona(e)),e.policies?.forEach(e=>this.visitPolicy(e)),e.exposures?.forEach(e=>{this.visitNode(e),e.properties.forEach(e=>this.visitNode(e))}),e.instanceContributions?.forEach(e=>{this.visitNode(e),e.contributions.forEach(e=>{this.visitNode(e),e.value!==null&&this.visitExpression(e.value),e.items.forEach(e=>{this.visitNode(e),e.values.forEach(e=>{this.visitNode(e),this.visitExpression(e.value)})})})}),e.identity!=null&&this.visitIdentity(e.identity),e.purposes?.forEach(e=>this.visitPurpose(e)),e.seeds?.forEach(e=>this.visitSeed(e)),e.modules.forEach(e=>this.visitModule(e)),e.examples?.forEach(e=>this.visitSpecificationExample(e))}visitIdentity(e){this.visitNode(e),e.details.forEach(e=>this.visitIdentityDetail(e))}visitIdentityDetail(e){this.visitNode(e),this.visitTypeRef(e.type),this.visitIdentitySource(e.source)}visitIdentitySource(e){switch(e.kind){case`ClaimIdentitySourceSyntax`:this.visitClaimIdentitySource(e);break;case`QueryIdentitySourceSyntax`:this.visitQueryIdentitySource(e);break;case`CodeIdentitySourceSyntax`:this.visitCodeIdentitySource(e);break;case`FileIdentitySourceSyntax`:this.visitFileIdentitySource(e);break;default:this.visitNode(e)}}visitClaimIdentitySource(e){this.visitNode(e)}visitQueryIdentitySource(e){this.visitNode(e),this.visitExpression(e.by)}visitCodeIdentitySource(e){this.visitNode(e),this.visitCodeBlock(e.code)}visitFileIdentitySource(e){this.visitNode(e),this.visitFileReference(e.file)}visitPurpose(e){this.visitNode(e),e.transfers.forEach(e=>this.visitPurposeTransfer(e))}visitPurposeReference(e){this.visitNode(e)}visitPurposeTransfer(e){this.visitNode(e)}visitPolicy(e){this.visitNode(e),e.condition!==null&&this.visitPolicyCondition(e.condition),e.code!==null&&this.visitCodeBlock(e.code),e.file!==null&&this.visitFileReference(e.file)}visitPolicyCondition(e){this.visitNode(e),e.kind===`ClaimConditionSyntax`&&e.matches!==null&&this.visitExpression(e.matches),e.kind===`NotPolicyConditionSyntax`&&this.visitPolicyCondition(e.operand),e.kind===`LogicalPolicyConditionSyntax`&&(this.visitPolicyCondition(e.left),this.visitPolicyCondition(e.right))}visitSeed(e){this.visitNode(e),e.groups.forEach(e=>{this.visitNode(e),e.events.forEach(e=>{this.visitNode(e),e.properties.forEach(e=>this.visitPropertyMapping(e))})})}visitPersona(e){this.visitNode(e)}visitAuthorize(e){this.visitNode(e),this.visitPolicyRequirement(e.requirement)}visitPolicyRequirement(e){this.visitNode(e),e.kind===`LogicalPolicyRequirementSyntax`&&(this.visitPolicyRequirement(e.left),this.visitPolicyRequirement(e.right))}visitDomain(e){this.visitNode(e)}visitImport(e){this.visitNode(e)}visitFileImport(e){this.visitNode(e)}visitGeneration(e){this.visitNode(e),e.file&&this.visitFileReference(e.file),e.code&&this.visitCodeBlock(e.code)}visitConcept(e){this.visitNode(e),e.attributes.forEach(e=>this.visitNode(e)),e.generation&&this.visitGeneration(e.generation),e.validations?.forEach(e=>this.visitValidate(e))}visitType(e){this.visitNode(e),e.properties.forEach(e=>this.visitProperty(e))}visitDependsOn(e){this.visitNode(e)}visitModule(e){this.visitNode(e),e.purposes?.forEach(e=>this.visitPurposeReference(e)),e.examples?.forEach(e=>this.visitSpecificationExample(e)),e.dependsOn?.forEach(e=>this.visitDependsOn(e)),e.fileImports.forEach(e=>this.visitFileImport(e)),e.authorize!==null&&this.visitAuthorize(e.authorize),e.features.forEach(e=>this.visitFeature(e))}visitFeature(e){this.visitNode(e),e.purposes?.forEach(e=>this.visitPurposeReference(e)),e.examples?.forEach(e=>this.visitSpecificationExample(e)),e.dependsOn?.forEach(e=>this.visitDependsOn(e)),e.fileImports.forEach(e=>this.visitFileImport(e)),e.authorize!==null&&this.visitAuthorize(e.authorize),e.features.forEach(e=>this.visitFeature(e)),e.slices.forEach(e=>this.visitSlice(e))}visitSlice(e){this.visitNode(e),e.purposes?.forEach(e=>this.visitPurposeReference(e)),e.examples?.forEach(e=>this.visitSpecificationExample(e)),e.commands.forEach(e=>this.visitCommand(e)),e.operations?.forEach(e=>this.visitOperation(e)),e.events.forEach(e=>this.visitEvent(e)),e.constraints.forEach(e=>this.visitConstraint(e)),e.queries.forEach(e=>this.visitQuery(e)),e.projections.forEach(e=>this.visitProjection(e)),e.readModels.forEach(e=>this.visitReadModel(e)),e.captures.forEach(e=>this.visitCapture(e)),e.reactions.forEach(e=>this.visitReaction(e)),e.screens.forEach(e=>this.visitScreen(e)),e.specifications.forEach(e=>this.visitSpecification(e))}visitTriggerData(e){this.visitNode(e),e.type!==null&&this.visitTypeRef(e.type)}visitReads(e){this.visitNode(e),e.byParts?.forEach(e=>this.visitPropertyMapping(e))}visitConcurrency(e){this.visitNode(e)}visitReducer(e){this.visitNode(e),e.from!=null&&this.visitObserverFilter(e.from),e.rules.forEach(e=>this.visitReducerRule(e))}visitReducerRule(e){this.visitNode(e),e.file!==null&&this.visitFileReference(e.file),e.code!==null&&this.visitCodeBlock(e.code)}visitForm(e){this.visitNode(e),e.populate!==null&&this.visitNode(e.populate),e.fields.forEach(e=>this.visitNode(e)),e.columns?.forEach(e=>this.visitNode(e)),e.layout!==null&&e.layout!==void 0&&(this.visitNode(e.layout),e.layout.columns.forEach(e=>{this.visitNode(e),e.width!==null&&this.visitNode(e.width),e.minWidth!==null&&this.visitNode(e.minWidth),e.maxWidth!==null&&this.visitNode(e.maxWidth)}),e.layout.columnGap!==null&&this.visitNode(e.layout.columnGap),e.layout.rowGap!==null&&this.visitNode(e.layout.rowGap),e.layout.placements.forEach(e=>{this.visitNode(e),e.width!==null&&this.visitNode(e.width)})),e.onSubmit!==null&&this.visitScreenDirective(e.onSubmit)}visitCommand(e){this.visitNode(e),e.properties.forEach(e=>this.visitProperty(e)),e.authorize!==null&&this.visitAuthorize(e.authorize),e.stream!=null&&this.visitCommandStream(e.stream),e.streamCandidates?.forEach(e=>this.visitCommandStream(e)),e.validations.forEach(e=>this.visitValidate(e)),e.produces.forEach(e=>this.visitProduces(e)),e.handler!=null&&this.visitHandler(e.handler),e.response!=null&&this.visitCommandResponse(e.response)}visitEventSource(e){this.visitNode(e),e.identifier!==null&&this.visitTypeRef(e.identifier),e.streams.forEach(e=>this.visitEventStream(e))}visitEventStream(e){this.visitNode(e),e.streamId!==null&&this.visitTypeRef(e.streamId),e.streamIdParts.forEach(e=>this.visitEventStreamIdPart(e))}visitEventStreamIdPart(e){this.visitNode(e),this.visitTypeRef(e.type)}visitObserverFilter(e){this.visitNode(e)}visitCommandStream(e){this.visitNode(e),e.streamId!==null&&this.visitPropertyMapping(e.streamId),e.streamIdParts.forEach(e=>this.visitPropertyMapping(e)),e.propertyCandidate!==null&&this.visitProperty(e.propertyCandidate)}visitSystem(e){this.visitNode(e)}visitOperation(e){this.visitNode(e),e.inputs.forEach(e=>this.visitProperty(e)),e.execute!==null&&this.visitOperationPhase(e.execute),e.compensate!==null&&this.visitOperationPhase(e.compensate)}visitOperationPhase(e){this.visitNode(e),e.implementation!==null&&this.visitImplementation(e.implementation),e.file!==null&&this.visitFileReference(e.file),e.code!==null&&this.visitCodeBlock(e.code)}visitSpecificationOperationFailure(e){this.visitNode(e)}visitSpecificationCompensated(e){this.visitNode(e)}visitSpecificationOperation(e){this.visitNode(e),e.values.forEach(e=>this.visitPropertyMapping(e))}visitHandler(e){this.visitNode(e),e.implementation!=null&&this.visitImplementation(e.implementation),e.file!==null&&this.visitFileReference(e.file),e.code!==null&&this.visitCodeBlock(e.code)}visitImplementation(e){this.visitNode(e),e.hints.forEach(e=>this.visitImplementationHint(e))}visitImplementationHint(e){this.visitNode(e)}visitFileReference(e){this.visitNode(e)}visitCodeBlock(e){this.visitNode(e)}visitCommandResponse(e){e.kind===`ScalarCommandResponseSyntax`?this.visitScalarCommandResponse(e):this.visitRecordCommandResponse(e)}visitScalarCommandResponse(e){this.visitNode(e),this.visitPropertyResponseSource(e.source)}visitRecordCommandResponse(e){this.visitNode(e),e.fields.forEach(e=>this.visitResponseField(e))}visitResponseField(e){this.visitNode(e),e.type!==null&&this.visitTypeRef(e.type),this.visitPropertyResponseSource(e.source)}visitPropertyResponseSource(e){this.visitNode(e)}visitSpecificationReturn(e){e.kind===`ScalarSpecificationReturnSyntax`?this.visitScalarSpecificationReturn(e):this.visitRecordSpecificationReturn(e)}visitScalarSpecificationReturn(e){this.visitNode(e),this.visitExpression(e.value)}visitRecordSpecificationReturn(e){this.visitNode(e),e.fields.forEach(e=>this.visitPropertyMapping(e))}visitValidate(e){this.visitNode(e),e.kind===`DeclarativeValidateSyntax`?(e.rules.forEach(e=>this.visitValidationRule(e)),e.requirements?.forEach(e=>{this.visitNode(e),this.visitCondition(e.condition)})):e.code!=null&&this.visitCodeBlock(e.code)}visitValidationRule(e){this.visitNode(e),e.implementation!=null&&this.visitImplementation(e.implementation),e.value!==null&&this.visitExpression(e.value),e.file!==null&&this.visitFileReference(e.file),e.code!==null&&this.visitCodeBlock(e.code)}visitEvent(e){this.visitNode(e),e.properties.forEach(e=>this.visitProperty(e)),e.tags.forEach(e=>this.visitTag(e))}visitTag(e){this.visitNode(e),this.visitExpression(e.value)}visitReadModel(e){this.visitNode(e),e.properties.forEach(e=>this.visitProperty(e))}visitConstraint(e){this.visitNode(e),e.kind===`FileConstraintSyntax`&&this.visitNode(e.file),e.additionalRules.forEach(e=>this.visitConstraint(e))}visitQuery(e){this.visitNode(e),this.visitTypeRef(e.returnType),e.by!==null&&this.visitQueryParameter(e.by),e.byParts?.forEach(e=>this.visitQueryParameter(e)),e.filters.forEach(e=>this.visitQueryParameter(e)),e.authorize!==null&&this.visitAuthorize(e.authorize)}visitQueryParameter(e){this.visitNode(e),this.visitTypeRef(e.type),e.source!=null&&this.visitExpression(e.source)}visitKey(e){this.visitNode(e),e.kind===`ExpressionKeySyntax`?this.visitExpression(e.expression):e.parts.forEach(e=>{this.visitNode(e),this.visitExpression(e.expression)})}visitProjection(e){this.visitNode(e),e.key!=null&&this.visitKey(e.key),e.blocks.forEach(e=>this.visitProjectionBlock(e))}visitProjectionBlock(e){switch(this.visitNode(e),e.kind){case`FromSyntax`:e.events.forEach(e=>{this.visitNode(e),e.key!=null&&this.visitExpression(e.key)}),e.key!=null&&this.visitKey(e.key),e.parentKey!=null&&this.visitExpression(e.parentKey),e.mappings.forEach(e=>this.visitMapping(e));break;case`EverySyntax`:case`AllSyntax`:e.mappings.forEach(e=>this.visitMapping(e));break;case`JoinSyntax`:e.events.forEach(e=>this.visitJoinEvent(e));break;case`ProjectionVariantSyntax`:e.entersOn.forEach(e=>{this.visitNode(e),e.key!=null&&this.visitExpression(e.key)}),e.blocks.forEach(e=>this.visitProjectionBlock(e));break;case`ChildrenSyntax`:e.identifiedBy!==void 0&&this.visitExpression(e.identifiedBy),e.blocks.forEach(e=>this.visitProjectionBlock(e));break;case`NestedSyntax`:e.blocks.forEach(e=>this.visitProjectionBlock(e));break;case`RemoveWithSyntax`:e.parentKey!=null&&this.visitExpression(e.parentKey),e.key!=null&&this.visitExpression(e.key);break;case`RemoveViaJoinSyntax`:e.key!=null&&this.visitExpression(e.key)}}visitJoinEvent(e){this.visitNode(e),e.mappings.forEach(e=>this.visitMapping(e))}visitMapping(e){this.visitNode(e),e.source!==void 0&&this.visitExpression(e.source),e.value!==void 0&&this.visitExpression(e.value)}visitCondition(e){this.visitNode(e),e.kind===`ComparisonConditionSyntax`?this.visitExpression(e.right):(this.visitCondition(e.left),this.visitCondition(e.right))}visitReaction(e){this.visitNode(e),e.from!=null&&this.visitObserverFilter(e.from),e.runsAs!=null&&this.visitReactionIdentity(e.runsAs),e.where!=null&&this.visitCondition(e.where),e.triggers.forEach(e=>this.visitReactionTrigger(e))}visitReactionIdentity(e){this.visitNode(e)}visitReactionTrigger(e){this.visitNode(e),this.visitTriggerSource(e.source),e.produces.forEach(e=>this.visitProduces(e)),e.invokes.forEach(e=>this.visitInvokes(e))}visitProduces(e){this.visitNode(e),e.stream!=null&&this.visitCommandStream(e.stream),e.when!=null&&this.visitCondition(e.when),e.inlineEvent!==null&&this.visitEvent(e.inlineEvent),e.inlineOperation!=null&&this.visitOperation(e.inlineOperation),e.for!==null&&this.visitExpression(e.for),e.mappings.forEach(e=>this.visitPropertyMapping(e)),e.tags.forEach(e=>this.visitTag(e))}visitInvokes(e){this.visitNode(e),e.mappings?.forEach(e=>this.visitPropertyMapping(e)),e.onRefused?.forEach(e=>this.visitInvocationRefusal(e))}visitInvocationRefusal(e){this.visitNode(e),e.produces.forEach(e=>this.visitProduces(e))}visitCapture(e){this.visitNode(e),e.source!==null&&this.visitCaptureSource(e.source),e.map?.forEach(e=>this.visitCaptureMap(e)),e.appends.forEach(e=>this.visitCaptureAppend(e)),e.children.forEach(e=>this.visitCaptureChildren(e)),e.nested.forEach(e=>this.visitCaptureNested(e))}visitCaptureSource(e){this.visitNode(e),e.settings.forEach(e=>this.visitCaptureSourceSetting(e))}visitCaptureSourceSetting(e){this.visitNode(e)}visitCaptureMap(e){this.visitNode(e),this.visitExpression(e.source),e.kind===`CaptureMapEntrySyntax`&&e.translations.forEach(e=>this.visitNode(e))}visitCaptureAppend(e){this.visitNode(e),e.when!=null&&this.visitNode(e.when),e.mappings?.forEach(e=>this.visitPropertyMapping(e)),e.tags?.forEach(e=>this.visitTag(e))}visitCaptureChildren(e){this.visitNode(e),e.map?.forEach(e=>this.visitCaptureMap(e)),e.appends.forEach(e=>this.visitCaptureAppend(e))}visitCaptureNested(e){this.visitNode(e),e.map?.forEach(e=>this.visitCaptureMap(e)),e.appends.forEach(e=>this.visitCaptureAppend(e))}visitTriggerSource(e){this.visitNode(e)}visitScreen(e){this.visitNode(e),e.directives.forEach(e=>this.visitScreenDirective(e)),e.contributions?.forEach(e=>{this.visitNode(e),e.directives.forEach(e=>this.visitScreenDirective(e))})}visitScreenDirective(e){if(e.kind===`ScreenGuardedActionSyntax`)this.visitScreenGuardedAction(e);else switch(this.visitNode(e),e.kind){case`ScreenDataSyntax`:this.visitTypeRef(e.type);break;case`ScreenActionSyntax`:e.navigate!==null&&this.visitScreenDirective(e.navigate);break;case`ScreenNavigateSyntax`:e.parameters.forEach(e=>{this.visitNode(e),this.visitUiBinding(e.binding)});break;case`ScreenTemplateReferenceSyntax`:e.slots.forEach(e=>{this.visitNode(e),e.directives.forEach(e=>this.visitScreenDirective(e))});break;case`ScreenSectionSyntax`:e.directives.forEach(e=>this.visitScreenDirective(e));break;case`ScreenTableSyntax`:e.columns.forEach(e=>this.visitNode(e)),e.rowClick!==null&&this.visitScreenDirective(e.rowClick);break;case`ScreenSummarySyntax`:e.fields.forEach(e=>this.visitNode(e));break;case`ScreenComponentSyntax`:e.context!==null&&this.visitUiBinding(e.context),e.properties.forEach(e=>{this.visitNode(e),e.binding!==null&&this.visitUiBinding(e.binding),e.value!==null&&this.visitExpression(e.value)}),e.exposes.forEach(e=>{this.visitNode(e),this.visitUiBinding(e.binding)}),e.presentation.forEach(e=>this.visitNode(e)),e.outlets.forEach(e=>{this.visitNode(e),e.directives.forEach(e=>this.visitScreenDirective(e))});break;case`ScreenToolbarSyntax`:e.items.forEach(e=>{this.visitNode(e),e.parameters.forEach(e=>{this.visitNode(e),this.visitUiBinding(e.binding)}),e.presentation.forEach(e=>this.visitNode(e))});break;case`ScreenCodeSyntax`:this.visitNode(e.code)}}visitScreenGuardedAction(e){this.visitNode(e),e.alternatives.forEach(e=>this.visitScreenActionAlternative(e)),e.otherwise!==null&&this.visitScreenActionOtherwise(e.otherwise),e.navigate!==null&&this.visitScreenDirective(e.navigate)}visitScreenActionAlternative(e){this.visitNode(e),this.visitCondition(e.condition),e.arguments.forEach(e=>this.visitInteractionArgument(e))}visitScreenActionOtherwise(e){this.visitNode(e),e.arguments.forEach(e=>this.visitInteractionArgument(e))}visitInteractionArgument(e){this.visitNode(e)}visitSpecification(e){this.visitNode(e),e.examples?.forEach(e=>this.visitSpecificationExample(e)),e.parameters?.forEach(e=>{this.visitNode(e),this.visitTypeRef(e.type)}),e.cases?.forEach(e=>{this.visitNode(e),e.values.forEach(e=>this.visitPropertyMapping(e))}),e.givenClock!==null&&this.visitSpecificationClock(e.givenClock),e.givenOperationFailures?.forEach(e=>this.visitSpecificationOperationFailure(e)),e.thenOperations?.forEach(e=>this.visitSpecificationOperation(e)),e.thenCompensated?.forEach(e=>this.visitSpecificationCompensated(e)),e.givenCallerPersona!=null&&this.visitNode(e.givenCallerPersona),e.givenCaller!=null&&(this.visitNode(e.givenCaller),e.givenCaller.claims.forEach(e=>this.visitNode(e))),e.given.forEach(e=>this.visitSpecificationEvent(e)),e.givenReadModels.forEach(e=>this.visitSpecificationReadModel(e)),e.when!==null&&this.visitSpecificationCommand(e.when),e.givenCaptures.forEach(e=>this.visitSpecificationCapture(e)),e.whenAppended!==null&&this.visitSpecificationEvent(e.whenAppended),e.whenRedelivered!=null&&this.visitSpecificationRedelivery(e.whenRedelivered),e.whenClock!==null&&this.visitSpecificationClock(e.whenClock),e.whenTrigger!==null&&this.visitSpecificationTrigger(e.whenTrigger),e.whenCapture!==null&&this.visitSpecificationCapture(e.whenCapture),e.whenQuery!==null&&this.visitSpecificationWhenQuery(e.whenQuery),e.thenEvents.forEach(e=>this.visitSpecificationEvent(e)),e.thenReadModels.forEach(e=>this.visitSpecificationReadModel(e)),e.thenAbsentReadModels?.forEach(e=>{this.visitNode(e),this.visitExpression(e.key)}),e.thenQueries?.forEach(e=>{this.visitNode(e),e.arguments.forEach(e=>this.visitPropertyMapping(e)),e.results.forEach(e=>this.visitSpecificationQueryResult(e))}),e.thenResults.forEach(e=>this.visitSpecificationQueryResult(e)),e.thenNoResult!==null&&this.visitNode(e.thenNoResult),e.thenDenied!=null&&this.visitNode(e.thenDenied),e.thenReturns!=null&&this.visitSpecificationReturn(e.thenReturns),e.thenErrors.forEach(e=>{this.visitNode(e),e.caseValue!=null&&this.visitExpression(e.caseValue)})}visitSpecificationRedelivery(e){this.visitNode(e),e.for!==null&&this.visitExpression(e.for),e.stream!=null&&this.visitSpecificationStream(e.stream),e.noStream!=null&&this.visitSpecificationNoStream(e.noStream),e.values.forEach(e=>this.visitPropertyMapping(e))}visitSpecificationClock(e){this.visitNode(e)}visitSpecificationTrigger(e){this.visitNode(e),e.values.forEach(e=>this.visitPropertyMapping(e))}visitSpecificationCapture(e){this.visitNode(e),e.record.forEach(e=>this.visitPropertyMapping(e))}visitSpecificationWhenQuery(e){this.visitNode(e),e.arguments.forEach(e=>this.visitPropertyMapping(e))}visitSpecificationQueryResult(e){this.visitNode(e),e.properties.forEach(e=>this.visitPropertyMapping(e))}visitSpecificationExample(e){this.visitNode(e),e.for!==null&&this.visitExpression(e.for),e.stream!=null&&this.visitSpecificationStream(e.stream),e.noStream!=null&&this.visitSpecificationNoStream(e.noStream),e.values.forEach(e=>this.visitPropertyMapping(e)),e.generatedValues.forEach(e=>this.visitPropertyMapping(e))}visitSpecificationEvent(e){this.visitNode(e),e.stream!=null&&this.visitSpecificationStream(e.stream),e.noStream!=null&&this.visitSpecificationNoStream(e.noStream),e.values.forEach(e=>this.visitPropertyMapping(e)),e.for!==null&&this.visitExpression(e.for)}visitSpecificationStream(e){this.visitNode(e),e.streamId!==null&&this.visitPropertyMapping(e.streamId),e.streamIdParts.forEach(e=>this.visitPropertyMapping(e))}visitSpecificationNoStream(e){this.visitNode(e)}visitSpecificationCommand(e){this.visitNode(e),(e.generatedValues??[]).forEach(e=>this.visitPropertyMapping(e)),e.values.forEach(e=>this.visitPropertyMapping(e)),e.for!==null&&this.visitExpression(e.for)}visitSpecificationReadModel(e){this.visitNode(e),e.properties.forEach(e=>this.visitPropertyMapping(e))}visitPropertyMapping(e){this.visitNode(e),this.visitExpression(e.source)}visitProperty(e){this.visitNode(e),this.visitTypeRef(e.type)}visitTypeRef(e){this.visitNode(e)}visitUiBinding(e){this.visitNode(e),e.literal!==null&&this.visitExpression(e.literal)}visitIdentityExpression(e){this.visitNode(e)}visitExpression(e){e.kind===`IdentityExpressionSyntax`?this.visitIdentityExpression(e):(this.visitNode(e),e.kind===`ListExpressionSyntax`?e.items.forEach(e=>this.visitExpression(e)):e.kind===`ObjectExpressionSyntax`?e.members.forEach(e=>this.visitObjectMember(e)):e.kind===`TemplateExpressionSyntax`&&e.parts.forEach(e=>{this.visitNode(e),e.kind===`TemplateInterpolationSyntax`&&this.visitExpression(e.expression)}))}visitObjectMember(e){this.visitNode(e),this.visitExpression(e.value)}};export{ScreenplaySyntaxWalker};
2
2
  //# sourceMappingURL=ScreenplaySyntaxWalker.js.map