dsh-ptc-plus 0.3.1 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +66 -73
- package/README.md +66 -73
- package/assets/ptc-plus-bindings-en.png +0 -0
- package/assets/ptc-plus-bindings-zh.png +0 -0
- package/assets/ptc-plus-repair-en.png +0 -0
- package/assets/ptc-plus-repair-zh.png +0 -0
- package/assets/ptc-plus-repl-workspace-en.png +0 -0
- package/assets/ptc-plus-repl-workspace-zh.png +0 -0
- package/assets/ptc-plus-settings-en.png +0 -0
- package/assets/ptc-plus-settings-zh.png +0 -0
- package/client.js +30610 -722
- package/compiler-amaro.cjs +5 -0
- package/compiler-amaro.cjs.map +6 -0
- package/compiler-asset-124f80c1bba92ff5fe79cfec6e8ad518f476de4a42514cae3919538887f510e8.txt +1 -0
- package/compiler-assets.json +3 -0
- package/compiler-core.cjs +554 -0
- package/compiler-core.cjs.map +6 -0
- package/compiler-platform.cjs +2 -0
- package/compiler-platform.cjs.map +6 -0
- package/compiler-typescript.cjs +388 -0
- package/compiler-typescript.cjs.map +6 -0
- package/docs/README.md +6 -0
- package/docs/adr/0004-declare-program-bindings-at-the-host.md +1 -1
- package/docs/adr/0006-rewrite-module-syntax-with-an-ast.md +6 -4
- package/docs/adr/0007-separate-worker-transport-from-session-semantics.md +15 -3
- package/docs/adr/0009-bound-expensive-acceptance-default.md +2 -0
- package/docs/adr/0010-session-log-derived-recovery-tips.md +59 -5
- package/docs/adr/0011-isolate-the-local-recovery-tip-provider.md +1 -1
- package/docs/adr/0012-preserve-mixed-destructuring-initialization.md +3 -1
- package/docs/adr/0013-isolate-repl-redeclaration-convenience.md +9 -3
- package/docs/adr/0014-persist-cell-rewrite-policy.md +11 -5
- package/docs/adr/0015-preserve-source-positions-through-rewrites.md +1 -1
- package/docs/adr/0016-archive-resolved-review-findings.md +1 -1
- package/docs/adr/0017-track-the-latest-dsh-public-surface.md +49 -0
- package/docs/adr/0018-use-versioned-fixture-for-ab-benchmark.md +3 -3
- package/docs/adr/0019-plugin-settings-and-kill-switch.md +8 -6
- package/docs/adr/0020-optional-cordis-tools-in-ptc-mode.md +2 -2
- package/docs/adr/0021-separate-host-bootstrap-from-session-runtime.md +17 -3
- package/docs/adr/0023-global-user-bindings.md +104 -0
- package/docs/adr/0024-repl-console-observation.md +33 -0
- package/docs/adr/0025-use-versioned-logical-binding-identities.md +119 -0
- package/docs/adr/0026-persist-the-delivery-verdict-against-the-verified-candidate.md +21 -0
- package/docs/adr/0027-run-the-session-kernel-in-a-killable-helper-process.md +37 -0
- package/docs/adr/0028-attach-to-the-host-ptc-execution-seam.md +103 -0
- package/docs/adr/0029-keep-plugin-unavailability-out-of-the-host-agent-lifecycle.md +27 -0
- package/docs/adr/0030-serve-both-typert-codec-generations-from-one-codec.md +27 -0
- package/docs/architecture.md +82 -22
- package/docs/binding-review-placement-design.md +200 -0
- package/docs/capability-projection.md +1 -1
- package/docs/client-ui.md +96 -20
- package/docs/durability-design.md +61 -24
- package/docs/evaluation.md +78 -6
- package/docs/installation.md +41 -6
- package/docs/program-data-plane.md +6 -0
- package/docs/publishing.md +5 -3
- package/docs/runtime-reference.md +79 -25
- package/docs/semantic-validation.md +29 -0
- package/docs/stateful-binding-updates-proposal.md +755 -0
- package/docs/user-bindings.en.md +64 -0
- package/docs/user-bindings.md +64 -0
- package/docs/value-wire.md +3 -3
- package/docs/verification.md +57 -0
- package/index.js +374 -92
- package/internal/ast-traversal.js +5 -2
- package/internal/binding-descriptors.js +1 -0
- package/internal/binding-pattern-traversal.js +25 -0
- package/internal/binding-pattern.js +26 -29
- package/internal/binding-source-analysis.js +391 -0
- package/internal/binding-update-policy.js +66 -0
- package/internal/bounded-worker-round.js +56 -0
- package/internal/callable-definition-environment.js +42 -0
- package/internal/callable-source-catalog.js +129 -0
- package/internal/callable-source-encoding.js +47 -0
- package/internal/callable-source-facts.js +459 -0
- package/internal/callable-source-format.js +2 -0
- package/internal/callable-source-lowering.js +123 -0
- package/internal/cell-analysis-contract.js +25 -0
- package/internal/cell-analysis.js +252 -242
- package/internal/cell-completion.js +15 -0
- package/internal/cell-error.js +7 -0
- package/internal/cell-parser.js +66 -0
- package/internal/cell-rewriter.js +3 -553
- package/internal/commonjs-export-evidence.js +63 -0
- package/internal/commonjs-source-evidence.js +72 -0
- package/internal/compiler-amaro.cjs +2 -0
- package/internal/compiler-compression.js +12 -0
- package/internal/compiler-data.js +58 -0
- package/internal/compiler-descriptors.js +54 -0
- package/internal/compiler-dynamic-cache.js +48 -0
- package/internal/compiler-entry.js +35 -0
- package/internal/compiler-generated-names.js +17 -0
- package/internal/compiler-intrinsics.js +84 -0
- package/internal/compiler-module-links.js +34 -0
- package/internal/compiler-operations.js +61 -0
- package/internal/compiler-platform-factory.js +84 -0
- package/internal/compiler-platform.js +136 -0
- package/internal/compiler-record-roles.js +53 -0
- package/internal/compiler-region-output.js +259 -0
- package/internal/compiler-resource-lowering.js +103 -0
- package/internal/compiler-scope-facts.js +115 -0
- package/internal/compiler-service.js +109 -0
- package/internal/compiler-source-cache.js +32 -0
- package/internal/compiler-source-pieces.js +93 -0
- package/internal/compiler-source-regions.js +132 -0
- package/internal/compiler-storage-source.js +54 -0
- package/internal/compiler-text.js +15 -0
- package/internal/compiler-typescript.cjs +2 -0
- package/internal/config-spec.js +91 -25
- package/internal/cordis-tools-owner.js +130 -21
- package/internal/diagnostic.js +27 -1
- package/internal/direct-surface-owner.js +76 -23
- package/internal/dynamic-binding-evidence.js +16 -0
- package/internal/dynamic-environment-compiler.js +779 -0
- package/internal/dynamic-environment-integration.js +87 -0
- package/internal/dynamic-environment-runtime.js +362 -0
- package/internal/dynamic-native-calls.js +150 -0
- package/internal/dynamic-native-runtime.js +248 -0
- package/internal/dynamic-scope-analysis.js +90 -0
- package/internal/edit-transport-owner.js +28 -3
- package/internal/execution-seam-compat.js +193 -0
- package/internal/failure-reporting.js +118 -18
- package/internal/host-rpc.js +66 -0
- package/internal/isolated-worker.js +548 -0
- package/internal/kernel-child.js +139 -0
- package/internal/kernel-worker.js +911 -116
- package/internal/language-semantics.js +14 -0
- package/internal/legacy-binding-catalog.js +48 -0
- package/internal/legacy-cell-analysis.js +600 -0
- package/internal/legacy-cell-parser.js +50 -0
- package/internal/legacy-cell-rewriter.js +631 -0
- package/internal/legacy-repl-convenience.js +291 -0
- package/internal/managed-module-operations.js +170 -0
- package/internal/module-compilation.js +321 -0
- package/internal/module-runtime-platform.js +19 -0
- package/internal/module-transform-contract.js +12 -0
- package/internal/native-await-declarations.js +68 -0
- package/internal/native-root-compilation.js +54 -0
- package/internal/native-root-dynamic.js +67 -0
- package/internal/recovery-tips.js +27 -15
- package/internal/rejected-cell-editor.js +13 -8
- package/internal/repl-convenience.js +2 -201
- package/internal/repl-memory-projection.js +81 -12
- package/internal/repl-observation-interest.js +70 -0
- package/internal/repl-rewrite-contract.js +21 -0
- package/internal/repl-scope-normalizer.js +2091 -0
- package/internal/repl-value-observer.js +114 -0
- package/internal/rpc-contract.js +52 -0
- package/internal/runtime-bridge-owner.js +172 -28
- package/internal/runtime-config.js +48 -51
- package/internal/runtime-contexts.js +82 -10
- package/internal/runtime-messages.js +111 -0
- package/internal/session-cell-executor.js +455 -91
- package/internal/session-journal-recovery.js +684 -0
- package/internal/session-journal-schema.js +106 -0
- package/internal/session-journal.js +237 -440
- package/internal/session-log-view.js +42 -9
- package/internal/session-runtime.js +325 -80
- package/internal/session-state.js +249 -40
- package/internal/source-position-map.js +211 -71
- package/internal/stateful-module-compiler.js +154 -0
- package/internal/stateful-module-runtime.js +303 -0
- package/internal/stateful-root-compiler.js +598 -0
- package/internal/stateful-root-runtime.js +340 -0
- package/internal/typert-codec-compat.js +28 -0
- package/internal/typescript-transform.js +29 -0
- package/internal/user-binding-authoring.js +70 -0
- package/internal/user-binding-console-worker.js +184 -0
- package/internal/user-binding-console.js +148 -0
- package/internal/user-binding-draft-projection.js +335 -0
- package/internal/user-binding-model-context.js +31 -0
- package/internal/user-binding-runner.js +56 -0
- package/internal/user-bindings-owner.js +1065 -0
- package/internal/user-bindings-store.js +293 -0
- package/internal/user-bindings.js +353 -0
- package/internal/value-wire-schema.js +28 -0
- package/internal/value-wire.js +29 -20
- package/internal/worker-client.js +57 -67
- package/internal/worker-environment.js +45 -0
- package/internal/worker-output-relay.js +29 -0
- package/internal/worker-shutdown.js +14 -0
- package/package.json +81 -11
- package/src/client-activity.js +109 -45
- package/src/client-authoring-view.js +580 -0
- package/src/client-binding-review.js +230 -0
- package/src/client-bindings-data.js +29 -0
- package/src/client-catalog.js +127 -0
- package/src/client-code-editor.js +84 -0
- package/src/client-console.js +112 -0
- package/src/client-copy.js +370 -0
- package/src/client-feature-gates.js +62 -0
- package/src/client-host-compat.js +150 -0
- package/src/client-indicator-view.js +267 -0
- package/src/client-repl-view.js +292 -0
- package/src/client-rpc.js +20 -0
- package/src/client-settings-view.js +221 -0
- package/src/client-styles.js +106 -0
- package/src/client-tool-view.js +108 -0
- package/src/client-transport.js +159 -0
- package/src/client-workbench.js +521 -0
- package/src/client.js +233 -615
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { parse } from '@babel/parser'
|
|
2
|
+
import { types as t } from '@babel/core'
|
|
3
|
+
import generatorImport from '@babel/generator'
|
|
4
|
+
import traverseImport from '@babel/traverse'
|
|
5
|
+
import { callableDefinitionOwner, closeDefinitionExpression } from './callable-definition-environment.js'
|
|
6
|
+
|
|
7
|
+
const generate = generatorImport.default ?? generatorImport
|
|
8
|
+
const traverse = traverseImport.default ?? traverseImport
|
|
9
|
+
const nativeParserOptions = { sourceType: 'script', allowAwaitOutsideFunction: true, allowYieldOutsideFunction: true,
|
|
10
|
+
allowSuperOutsideMethod: true, allowNewTargetOutsideFunction: true }
|
|
11
|
+
const parserOptions = { sourceType: 'script', plugins: ['typescript', 'decorators', 'decoratorAutoAccessors'],
|
|
12
|
+
...nativeParserOptions, allowReturnOutsideFunction: true, errorRecovery: true }
|
|
13
|
+
const methodNode = node => t.isObjectMethod(node) || t.isClassMethod(node) || t.isClassPrivateMethod(node)
|
|
14
|
+
const text = node => generate(node).code
|
|
15
|
+
|
|
16
|
+
/** Definition-time decorators belong to the enclosing class, not the method value. */
|
|
17
|
+
export function undecoratedMethodSource(node) {
|
|
18
|
+
const method = t.cloneNode(node, true)
|
|
19
|
+
method.decorators = null
|
|
20
|
+
method.static = false
|
|
21
|
+
method.accessibility = null
|
|
22
|
+
for (const parameter of method.params) parameter.decorators = null
|
|
23
|
+
return text(method)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** A decorated declaration's range may include its parent's export modifiers. */
|
|
27
|
+
export function decoratedClassSource(node) {
|
|
28
|
+
const value = t.cloneNode(node, true)
|
|
29
|
+
value.type = 'ClassExpression'
|
|
30
|
+
value.abstract = false
|
|
31
|
+
return text(value)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** A body owns only the helper bindings it can use, including dependencies of
|
|
35
|
+
* those helpers. Parameter and key activations obtain their own lexical set. */
|
|
36
|
+
function closeCallableHelpers(value, helpers) {
|
|
37
|
+
const callable = t.isMethod(value) ? { ...value, type: 'ObjectMethod' } : value
|
|
38
|
+
const tree = t.file(t.program([...helpers, t.expressionStatement(t.isMethod(callable)
|
|
39
|
+
? t.objectExpression([callable]) : callable)]))
|
|
40
|
+
const bodies = new Map([[callable, new Set()]])
|
|
41
|
+
const dependencies = new Map(helpers.map(node => [node, new Set()]))
|
|
42
|
+
const statement = path => {
|
|
43
|
+
while (!path.parentPath.isProgram()) path = path.parentPath
|
|
44
|
+
return path.node
|
|
45
|
+
}
|
|
46
|
+
traverse(tree, { Function(path) {
|
|
47
|
+
if (callableDefinitionOwner(path) && !dependencies.has(statement(path))) bodies.set(path.node, new Set())
|
|
48
|
+
} })
|
|
49
|
+
traverse(tree, { ReferencedIdentifier(path) {
|
|
50
|
+
const binding = path.scope.getBinding(path.node.name)
|
|
51
|
+
if (binding === undefined) return
|
|
52
|
+
const helper = statement(binding.path)
|
|
53
|
+
if (!dependencies.has(helper)) return
|
|
54
|
+
const consumer = dependencies.get(statement(path))
|
|
55
|
+
if (consumer) consumer.add(helper)
|
|
56
|
+
else {
|
|
57
|
+
let child = path
|
|
58
|
+
while (child.parentPath) {
|
|
59
|
+
const parent = child.parentPath
|
|
60
|
+
if (bodies.has(parent.node) && child.key === 'body') {
|
|
61
|
+
bodies.get(parent.node).add(helper)
|
|
62
|
+
break
|
|
63
|
+
}
|
|
64
|
+
child = parent
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
} })
|
|
68
|
+
for (const [body, required] of bodies) {
|
|
69
|
+
for (const helper of required) for (const dependency of dependencies.get(helper)) required.add(dependency)
|
|
70
|
+
if (!t.isBlockStatement(body.body)) body.body = t.blockStatement([t.returnStatement(body.body)])
|
|
71
|
+
body.body.body.unshift(...helpers.filter(node => required.has(node)).map(node => t.cloneNode(node, true)))
|
|
72
|
+
}
|
|
73
|
+
value.body = callable.body
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** Close generated language helpers over the source that actually needs them. */
|
|
77
|
+
export function lowerCallableSource(original, { method = false, lowerNativeSource, privateNames = [], sourceType = 'script' }) {
|
|
78
|
+
// Grammar-only containers must not acquire logical declaration identities.
|
|
79
|
+
// Every fragment crosses lowering as an expression, including method hosts.
|
|
80
|
+
const prefix = method ? '(class {' : '('
|
|
81
|
+
const suffix = method ? '})' : ')'
|
|
82
|
+
let input = prefix + original + suffix
|
|
83
|
+
const nativeOptions = { ...nativeParserOptions, sourceType, errorRecovery: true }
|
|
84
|
+
const tree = parse(input, { ...parserOptions, sourceType })
|
|
85
|
+
let contextual = privateNames.length > 0
|
|
86
|
+
t.traverseFast(tree, node => {
|
|
87
|
+
if (t.isSuper(node) || t.isMetaProperty(node) && node.meta.name === 'new') contextual = true
|
|
88
|
+
})
|
|
89
|
+
// Declaration ownership is assigned after dialect normalization. This
|
|
90
|
+
// inspection only selects the detached fragment's surrounding grammar.
|
|
91
|
+
traverse(tree, { noScope: true,
|
|
92
|
+
...traverse.visitors.environmentVisitor({ YieldExpression() { contextual = true } }),
|
|
93
|
+
})
|
|
94
|
+
if (!method && t.isClass(tree.program.body[0].expression) && tree.program.body[0].expression.id === null) {
|
|
95
|
+
input = `({[""]:${input}})[""]`
|
|
96
|
+
}
|
|
97
|
+
if (contextual) {
|
|
98
|
+
const body = `async *source(){return ${input}}`
|
|
99
|
+
input = privateNames.length > 0 ? `(class{${privateNames.map(name => `#${name};`).join('')}${body}})`
|
|
100
|
+
: `({${body}})`
|
|
101
|
+
}
|
|
102
|
+
const lowered = lowerNativeSource(input, { sourceType })
|
|
103
|
+
const native = parse(lowered, nativeOptions)
|
|
104
|
+
const helpers = native.program.body.slice(0, -1)
|
|
105
|
+
let expression = native.program.body.at(-1).expression
|
|
106
|
+
if (contextual) {
|
|
107
|
+
const body = (privateNames.length > 0 ? expression.body.body : expression.properties)
|
|
108
|
+
.find(methodNode).body.body
|
|
109
|
+
helpers.push(...body.slice(0, -1))
|
|
110
|
+
expression = body.at(-1).argument
|
|
111
|
+
}
|
|
112
|
+
const value = method ? expression.body.body.find(methodNode) : expression
|
|
113
|
+
let source
|
|
114
|
+
if (t.isFunction(value)) {
|
|
115
|
+
closeCallableHelpers(value, helpers)
|
|
116
|
+
source = text(value)
|
|
117
|
+
} else {
|
|
118
|
+
source = text(helpers.length === 0 ? value : closeDefinitionExpression(helpers, value))
|
|
119
|
+
}
|
|
120
|
+
const emittedSource = method ? `class Source{${source}}` : `(${source})`
|
|
121
|
+
const emitted = parse(emittedSource, nativeOptions)
|
|
122
|
+
return { source, emitted, emittedSource }
|
|
123
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export function declarationSpan(node) {
|
|
2
|
+
const start = node.loc?.start
|
|
3
|
+
/* c8 ignore next */
|
|
4
|
+
const end = node.loc?.end ?? start
|
|
5
|
+
/* c8 ignore next */
|
|
6
|
+
if (start === undefined) return undefined
|
|
7
|
+
return {
|
|
8
|
+
line: start.line,
|
|
9
|
+
column: start.column + 1,
|
|
10
|
+
/* c8 ignore next */
|
|
11
|
+
...(end === undefined ? {} : {
|
|
12
|
+
end: {
|
|
13
|
+
line: end.line,
|
|
14
|
+
column: end.column + 1,
|
|
15
|
+
},
|
|
16
|
+
}),
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export class PreflightError extends Error {
|
|
21
|
+
constructor(message, node, span = undefined) {
|
|
22
|
+
super(message)
|
|
23
|
+
this.span = span ?? declarationSpan(node)
|
|
24
|
+
}
|
|
25
|
+
}
|