diff --git a/packages/runtime/tsconfig.json b/packages/runtime/tsconfig.json index e5740e5d9..b000a5511 100644 --- a/packages/runtime/tsconfig.json +++ b/packages/runtime/tsconfig.json @@ -1,6 +1,6 @@ { "extends": "../../tsconfig.json", - "include": ["src/**/*"], + "include": ["src/**/*", "../../types/types.d.ts"], "compilerOptions": { "outDir": "dist", "rootDir": "src", diff --git a/packages/translator/src/__tests__/fixtures/basic-export/__snapshots__/csr.expected.md b/packages/translator/src/__tests__/fixtures/basic-export/__snapshots__/csr.expected.md new file mode 100644 index 000000000..eafe65bdb --- /dev/null +++ b/packages/translator/src/__tests__/fixtures/basic-export/__snapshots__/csr.expected.md @@ -0,0 +1,11 @@ +# Render {"value":123} +```html +
+ 123 +
+``` + +# Mutations +``` +inserted div0 +``` \ No newline at end of file diff --git a/packages/translator/src/__tests__/fixtures/basic-export/__snapshots__/dom.expected.js b/packages/translator/src/__tests__/fixtures/basic-export/__snapshots__/dom.expected.js new file mode 100644 index 000000000..379a4374e --- /dev/null +++ b/packages/translator/src/__tests__/fixtures/basic-export/__snapshots__/dom.expected.js @@ -0,0 +1,19 @@ +export const v = 123; +import { data as _data, write as _write, createRenderFn as _createRenderFn } from "@marko/runtime-fluurt/src/dom"; + +function _apply_value(_scope, value) { + if (_write(_scope, 1, value)) _data(_scope[0], value); +} + +export const applyAttrs = function (_scope, { + value +}) { + _apply_value(_scope, value); +}; +export { _apply_value }; +export const template = "
"; +export const walks = +/* next(1), get, out(1) */ +"D l"; +export const apply = function () {}; +export default _createRenderFn(template, walks, apply, applyAttrs); \ No newline at end of file diff --git a/packages/translator/src/__tests__/fixtures/basic-export/__snapshots__/html.expected.js b/packages/translator/src/__tests__/fixtures/basic-export/__snapshots__/html.expected.js new file mode 100644 index 000000000..9fe89c691 --- /dev/null +++ b/packages/translator/src/__tests__/fixtures/basic-export/__snapshots__/html.expected.js @@ -0,0 +1,13 @@ +export const v = 123; +import { markHydrateNode as _markHydrateNode, escapeXML as _escapeXML, write as _write, nextScopeId as _nextScopeId, createRenderer as _createRenderer } from "@marko/runtime-fluurt/src/html"; + +const _renderer = ({ + value +}) => { + const _scope = _nextScopeId(); + + _write(`
${_markHydrateNode(_scope, 0)}${_escapeXML(value)}
`); +}; + +export default _renderer; +export const render = _createRenderer(_renderer); \ No newline at end of file diff --git a/packages/translator/src/__tests__/fixtures/basic-export/__snapshots__/ssr.expected.md b/packages/translator/src/__tests__/fixtures/basic-export/__snapshots__/ssr.expected.md new file mode 100644 index 000000000..1e0dd20fb --- /dev/null +++ b/packages/translator/src/__tests__/fixtures/basic-export/__snapshots__/ssr.expected.md @@ -0,0 +1,45 @@ +# Write +
123
+ + +# Render "End" +```html + + + +
+ + 123 +
+ + +``` + +# Mutations +``` +inserted html0 +inserted html0/head0 +inserted html0/body1 +inserted html0/body1/div0 +inserted html0/body1/div0/#comment0 +inserted html0/body1/div0/#text1 +``` + + +# Render "Hydrate" +```html + + + +
+ + 123 +
+ + +``` + +# Mutations +``` + +``` \ No newline at end of file diff --git a/packages/translator/src/__tests__/fixtures/basic-export/template.marko b/packages/translator/src/__tests__/fixtures/basic-export/template.marko new file mode 100644 index 000000000..1f4f81b6f --- /dev/null +++ b/packages/translator/src/__tests__/fixtures/basic-export/template.marko @@ -0,0 +1,4 @@ +export const v = 123; + + +
${value}
\ No newline at end of file diff --git a/packages/translator/src/__tests__/fixtures/basic-export/test.ts b/packages/translator/src/__tests__/fixtures/basic-export/test.ts new file mode 100644 index 000000000..eca81ed31 --- /dev/null +++ b/packages/translator/src/__tests__/fixtures/basic-export/test.ts @@ -0,0 +1,7 @@ +import { v } from "./template.marko"; + +export const steps = [ + { + value: v, + }, +]; diff --git a/packages/translator/src/core/export.ts b/packages/translator/src/core/export.ts new file mode 100644 index 000000000..fc8c81295 --- /dev/null +++ b/packages/translator/src/core/export.ts @@ -0,0 +1,22 @@ +import { parseScript, Tag } from "@marko/babel-utils"; + +export default { + parse(tag) { + const { node } = tag; + tag.replaceWith( + parseScript(tag.hub.file, node.rawValue!, node.start!).body[0] + ); + }, + parseOptions: { + rootOnly: true, + rawOpenTag: true, + openTagOnly: true, + ignoreAttributes: true, + relaxRequireCommas: true, + }, + autocomplete: [ + { + displayText: "export ", + }, + ], +} as Tag; diff --git a/packages/translator/src/core/index.ts b/packages/translator/src/core/index.ts index 04b8b4693..5013bdf82 100644 --- a/packages/translator/src/core/index.ts +++ b/packages/translator/src/core/index.ts @@ -1,4 +1,5 @@ import ImportTag from "./import"; +import ExportTag from "./export"; import AttrsTag from "./attrs"; import IfTag from "./condition/if"; import ElseIfTag from "./condition/else-if"; @@ -18,6 +19,7 @@ import { taglibId } from "../util/is-core-tag"; export default { taglibId, "": ImportTag, + "": ExportTag, "": AttrsTag, "": IfTag, "": ElseIfTag, diff --git a/packages/translator/src/visitors/program/html.ts b/packages/translator/src/visitors/program/html.ts index e6441129c..70bc4412b 100644 --- a/packages/translator/src/visitors/program/html.ts +++ b/packages/translator/src/visitors/program/html.ts @@ -51,6 +51,9 @@ function isStatic(path: t.NodePath) { if (path.isImportDeclaration()) { return true; } + if (path.isExportDeclaration()) { + return true; + } // TODO include more cases here. diff --git a/packages/translator/tsconfig.json b/packages/translator/tsconfig.json index 151a15edd..9e0d2443f 100644 --- a/packages/translator/tsconfig.json +++ b/packages/translator/tsconfig.json @@ -1,6 +1,6 @@ { "extends": "../../tsconfig.json", - "include": ["src/**/*"], + "include": ["src/**/*", "../../types/types.d.ts"], "compilerOptions": { "outDir": "dist", "rootDir": "src", diff --git a/tsconfig.json b/tsconfig.json index e04018a53..b3bed4394 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,5 @@ { - "include": ["packages/*/src/**/*"], + "include": ["packages/*/src/**/*", "types/types.d.ts"], "compilerOptions": { "lib": ["dom", "ESNext"], "strict": true, diff --git a/packages/runtime/src/types.d.ts b/types/types.d.ts similarity index 57% rename from packages/runtime/src/types.d.ts rename to types/types.d.ts index 74cf582bd..407a616e2 100644 --- a/packages/runtime/src/types.d.ts +++ b/types/types.d.ts @@ -1 +1,3 @@ declare const MARKO_DEBUG: boolean; + +declare module "*.marko";