tungsten 0.4.14 → 0.5.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.
Files changed (171) hide show
  1. package/dist/.build-complete +1 -1
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/Components.d.ts +1 -0
  4. package/dist/Components.d.ts.map +1 -1
  5. package/dist/Components.js +2 -0
  6. package/dist/ContentNode.d.ts +8 -2
  7. package/dist/ContentNode.d.ts.map +1 -1
  8. package/dist/ContentNode.js +4 -1
  9. package/dist/Framework.d.ts.map +1 -1
  10. package/dist/Framework.js +12 -6
  11. package/dist/FrameworkConfig.d.ts +0 -3
  12. package/dist/FrameworkConfig.d.ts.map +1 -1
  13. package/dist/FunctionComponentStandIn.d.ts +1 -1
  14. package/dist/FunctionComponentStandIn.d.ts.map +1 -1
  15. package/dist/FunctionComponentStandIn.js +1 -0
  16. package/dist/Instance/Instance.js +2 -2
  17. package/dist/RenderingNode.d.ts +2 -2
  18. package/dist/RenderingNode.d.ts.map +1 -1
  19. package/dist/Script.d.ts +1 -1
  20. package/dist/Script.d.ts.map +1 -1
  21. package/dist/Servers/DevServer.d.ts.map +1 -1
  22. package/dist/Servers/DevServer.js +10 -0
  23. package/dist/Servers/loadEnvsDev.d.ts.map +1 -1
  24. package/dist/Servers/loadEnvsDev.js +16 -11
  25. package/dist/Servers/routing.d.ts.map +1 -1
  26. package/dist/Servers/routing.js +8 -9
  27. package/dist/Store/makeStore.d.ts +4 -4
  28. package/dist/Store/makeStore.d.ts.map +1 -1
  29. package/dist/Store/makeStore.js +23 -57
  30. package/dist/babelPlugins/BabelTransformDocInit.d.ts +9 -0
  31. package/dist/babelPlugins/BabelTransformDocInit.d.ts.map +1 -0
  32. package/dist/babelPlugins/BabelTransformDocInit.js +201 -0
  33. package/dist/babelPlugins/BabelTransformPackageImports.d.ts.map +1 -1
  34. package/dist/babelPlugins/BabelTransformPackageImports.js +1 -10
  35. package/dist/bin/index.d.ts.map +1 -1
  36. package/dist/bin/index.js +82 -75
  37. package/dist/browserStorage.d.ts +56 -18
  38. package/dist/browserStorage.d.ts.map +1 -1
  39. package/dist/browserStorage.js +172 -102
  40. package/dist/build/bundle.d.ts +1 -1
  41. package/dist/build/bundle.d.ts.map +1 -1
  42. package/dist/build/bundle.js +45 -40
  43. package/dist/build/compileJavascript.d.ts.map +1 -1
  44. package/dist/build/compileJavascript.js +0 -1
  45. package/dist/build/makeBabelUserDevConfig.d.ts.map +1 -1
  46. package/dist/build/makeBabelUserDevConfig.js +5 -1
  47. package/dist/build/makeBabelUserProdConfig.d.ts.map +1 -1
  48. package/dist/build/makeBabelUserProdConfig.js +5 -1
  49. package/dist/cliOutput.d.ts +5 -0
  50. package/dist/cliOutput.d.ts.map +1 -1
  51. package/dist/cliOutput.js +22 -0
  52. package/dist/components/Link.d.ts +1 -1
  53. package/dist/components/Link.d.ts.map +1 -1
  54. package/dist/components/NativeHtml.d.ts +10 -0
  55. package/dist/components/NativeHtml.d.ts.map +1 -0
  56. package/dist/components/NativeHtml.js +12 -0
  57. package/dist/components/PopMessages.d.ts +1 -1
  58. package/dist/components/PopMessages.d.ts.map +1 -1
  59. package/dist/components/Protected.d.ts +10 -0
  60. package/dist/components/Protected.d.ts.map +1 -0
  61. package/dist/components/Protected.js +12 -0
  62. package/dist/components/Stylesheet.d.ts +1 -1
  63. package/dist/components/Stylesheet.d.ts.map +1 -1
  64. package/dist/components/bindable/BindableCheckbox.d.ts +1 -1
  65. package/dist/components/bindable/BindableCheckbox.d.ts.map +1 -1
  66. package/dist/components/bindable/BindableInput.d.ts +1 -1
  67. package/dist/components/bindable/BindableInput.d.ts.map +1 -1
  68. package/dist/components/bindable/BindableInputNonString.d.ts +1 -1
  69. package/dist/components/bindable/BindableInputNonString.d.ts.map +1 -1
  70. package/dist/components/bindable/BindableInputString.d.ts +1 -1
  71. package/dist/components/bindable/BindableInputString.d.ts.map +1 -1
  72. package/dist/components/bindable/BindableInputTyped.d.ts +1 -1
  73. package/dist/components/bindable/BindableInputTyped.d.ts.map +1 -1
  74. package/dist/components/bindable/BindableInputTypedLegacy.d.ts +1 -1
  75. package/dist/components/bindable/BindableInputTypedLegacy.d.ts.map +1 -1
  76. package/dist/components/bindable/BindableRadio.d.ts +1 -1
  77. package/dist/components/bindable/BindableRadio.d.ts.map +1 -1
  78. package/dist/components/bindable/BindableSelect.d.ts +1 -1
  79. package/dist/components/bindable/BindableSelect.d.ts.map +1 -1
  80. package/dist/components/bindable/BindableTextarea.d.ts +1 -1
  81. package/dist/components/bindable/BindableTextarea.d.ts.map +1 -1
  82. package/dist/components/library/RichTextEditor/RichTextEditor.d.ts +1 -1
  83. package/dist/components/library/RichTextEditor/RichTextEditor.d.ts.map +1 -1
  84. package/dist/components/library/RichTextEditor/contentTree.d.ts.map +1 -1
  85. package/dist/components/library/RichTextEditor/contentTree.js +2 -1
  86. package/dist/components/library/__StatefulMessage/StatefulMessage.d.ts +1 -1
  87. package/dist/components/library/__StatefulMessage/StatefulMessage.d.ts.map +1 -1
  88. package/dist/defaultConfig.d.ts.map +1 -1
  89. package/dist/defaultConfig.js +0 -1
  90. package/dist/devBanner.d.ts +4 -0
  91. package/dist/devBanner.d.ts.map +1 -0
  92. package/dist/devBanner.js +50 -0
  93. package/dist/docInit.d.ts +16 -0
  94. package/dist/docInit.d.ts.map +1 -0
  95. package/dist/docInit.js +54 -0
  96. package/dist/env/droppedCoreEnvKeys.d.ts +5 -0
  97. package/dist/env/droppedCoreEnvKeys.d.ts.map +1 -0
  98. package/dist/env/droppedCoreEnvKeys.js +9 -0
  99. package/dist/env/getEnvSchemas.d.ts +1 -1
  100. package/dist/env/getEnvSchemas.d.ts.map +1 -1
  101. package/dist/env/getEnvSchemas.js +21 -22
  102. package/dist/env/registerEnvSchemas.d.ts +13 -0
  103. package/dist/env/registerEnvSchemas.d.ts.map +1 -0
  104. package/dist/env/registerEnvSchemas.js +23 -0
  105. package/dist/frameworkConfigSchema.d.ts +11 -2
  106. package/dist/frameworkConfigSchema.d.ts.map +1 -1
  107. package/dist/frameworkConfigSchema.js +14 -2
  108. package/dist/getUserConfig.d.ts.map +1 -1
  109. package/dist/getUserConfig.js +7 -2
  110. package/dist/headChildren.d.ts +2 -0
  111. package/dist/headChildren.d.ts.map +1 -0
  112. package/dist/headChildren.js +16 -0
  113. package/dist/hydrate/hydrate.d.ts.map +1 -1
  114. package/dist/hydrate/hydrate.js +23 -19
  115. package/dist/hydrate/renderHydrationMismatchBanner.d.ts +1 -0
  116. package/dist/hydrate/renderHydrationMismatchBanner.d.ts.map +1 -1
  117. package/dist/hydrate/renderHydrationMismatchBanner.js +11 -63
  118. package/dist/indexInner.d.ts +5 -1
  119. package/dist/indexInner.d.ts.map +1 -1
  120. package/dist/indexInner.js +5 -1
  121. package/dist/jsxRuntime.d.ts +1 -1
  122. package/dist/jsxRuntime.d.ts.map +1 -1
  123. package/dist/jsxRuntime.js +9 -7
  124. package/dist/jsxRuntimeSignals.d.ts +8 -4
  125. package/dist/jsxRuntimeSignals.d.ts.map +1 -1
  126. package/dist/jsxRuntimeSignals.js +8 -6
  127. package/dist/nbsp.d.ts +2 -2
  128. package/dist/nbsp.d.ts.map +1 -1
  129. package/dist/rawHtml/filterContentNode.d.ts.map +1 -1
  130. package/dist/rawHtml/filterContentNode.js +3 -1
  131. package/dist/render/HeadData.d.ts +1 -0
  132. package/dist/render/HeadData.d.ts.map +1 -1
  133. package/dist/render/addImportMap.d.ts.map +1 -1
  134. package/dist/render/addImportMap.js +1 -0
  135. package/dist/render/contentNodeToHtml.d.ts.map +1 -1
  136. package/dist/render/contentNodeToHtml.js +2 -1
  137. package/dist/render/contentToHtml.d.ts.map +1 -1
  138. package/dist/render/contentToHtml.js +3 -1
  139. package/dist/render/contentTreeToRenderingTree.d.ts.map +1 -1
  140. package/dist/render/contentTreeToRenderingTree.js +5 -1
  141. package/dist/render/processHead.d.ts.map +1 -1
  142. package/dist/render/processHead.js +27 -11
  143. package/dist/render/readDocInitScript.d.ts +3 -0
  144. package/dist/render/readDocInitScript.d.ts.map +1 -0
  145. package/dist/render/readDocInitScript.js +15 -0
  146. package/dist/render/rootToHtmlDev.d.ts.map +1 -1
  147. package/dist/routing/Group.d.ts +1 -1
  148. package/dist/routing/Group.d.ts.map +1 -1
  149. package/dist/routing/MatchedRoute.d.ts +1 -1
  150. package/dist/routing/MatchedRoute.d.ts.map +1 -1
  151. package/dist/settings.d.ts +3 -0
  152. package/dist/settings.d.ts.map +1 -1
  153. package/dist/settings.js +4 -0
  154. package/dist/style/styleContentSxy.d.ts.map +1 -1
  155. package/dist/style/styleContentSxy.js +6 -1
  156. package/dist/testing/installTestDocInit.d.ts +2 -0
  157. package/dist/testing/installTestDocInit.d.ts.map +1 -0
  158. package/dist/testing/installTestDocInit.js +6 -0
  159. package/dist/throwError.d.ts.map +1 -1
  160. package/dist/throwError.js +4 -1
  161. package/dist/update/integrateUpdateVdom.d.ts.map +1 -1
  162. package/dist/update/integrateUpdateVdom.js +42 -4
  163. package/package.json +2 -1
  164. package/readme.md +2 -135
  165. package/types/assets.d.ts +21 -0
  166. package/types/index.d.ts +24 -29
  167. package/types/jsx/html.d.ts +0 -1
  168. package/types/jsx/html.global.d.ts +0 -1
  169. package/types/jsx/html.values.d.ts +0 -1
  170. package/types/jsx/jsx.d.ts +8 -8
  171. package/vendor/manifest.json +2 -2
@@ -8,7 +8,6 @@ export declare const frameworkConfigValidator: v.VariantSchema<"useRootComponent
8
8
  readonly rootComponent: v.StringSchema<undefined>;
9
9
  readonly codeDir: v.ExactOptionalSchema<v.StringSchema<undefined>, undefined>;
10
10
  readonly copy: v.ExactOptionalSchema<v.StringSchema<undefined>, undefined>;
11
- readonly exclude: v.ExactOptionalSchema<v.StringSchema<undefined>, undefined>;
12
11
  readonly copyExclude: v.ExactOptionalSchema<v.StringSchema<undefined>, undefined>;
13
12
  readonly sourceDir: v.ExactOptionalSchema<v.StringSchema<undefined>, undefined>;
14
13
  readonly typescript: v.ExactOptionalSchema<v.BooleanSchema<undefined>, undefined>;
@@ -39,12 +38,16 @@ export declare const frameworkConfigValidator: v.VariantSchema<"useRootComponent
39
38
  readonly serverMiddleware: v.ExactOptionalSchema<v.TupleSchema<[v.StringSchema<undefined>, v.StringSchema<undefined>, v.StringSchema<undefined>], undefined>, undefined>;
40
39
  readonly apiRoutes: v.ExactOptionalSchema<v.StringSchema<undefined>, undefined>;
41
40
  readonly apiPath: v.ExactOptionalSchema<v.StringSchema<undefined>, undefined>;
41
+ readonly suppressNoHeadWarning: v.ExactOptionalSchema<v.BooleanSchema<undefined>, undefined>;
42
+ readonly suppressOriginMismatchWarning: v.ExactOptionalSchema<v.BooleanSchema<undefined>, undefined>;
43
+ readonly suppressEnvOverwriteWarnings: v.ExactOptionalSchema<v.BooleanSchema<undefined>, undefined>;
44
+ readonly warnOnFrameworkChange: v.ExactOptionalSchema<v.BooleanSchema<undefined>, undefined>;
45
+ readonly hmr: v.ExactOptionalSchema<v.UnionSchema<[v.BooleanSchema<undefined>, v.LiteralSchema<"reload", undefined>], undefined>, undefined>;
42
46
  readonly csr: v.ExactOptionalSchema<v.BooleanSchema<undefined>, undefined>;
43
47
  }, undefined>, v.ObjectSchema<{
44
48
  readonly useRootComponent: v.LiteralSchema<false, undefined>;
45
49
  readonly codeDir: v.ExactOptionalSchema<v.StringSchema<undefined>, undefined>;
46
50
  readonly copy: v.ExactOptionalSchema<v.StringSchema<undefined>, undefined>;
47
- readonly exclude: v.ExactOptionalSchema<v.StringSchema<undefined>, undefined>;
48
51
  readonly copyExclude: v.ExactOptionalSchema<v.StringSchema<undefined>, undefined>;
49
52
  readonly sourceDir: v.ExactOptionalSchema<v.StringSchema<undefined>, undefined>;
50
53
  readonly typescript: v.ExactOptionalSchema<v.BooleanSchema<undefined>, undefined>;
@@ -75,7 +78,13 @@ export declare const frameworkConfigValidator: v.VariantSchema<"useRootComponent
75
78
  readonly serverMiddleware: v.ExactOptionalSchema<v.TupleSchema<[v.StringSchema<undefined>, v.StringSchema<undefined>, v.StringSchema<undefined>], undefined>, undefined>;
76
79
  readonly apiRoutes: v.ExactOptionalSchema<v.StringSchema<undefined>, undefined>;
77
80
  readonly apiPath: v.ExactOptionalSchema<v.StringSchema<undefined>, undefined>;
81
+ readonly suppressNoHeadWarning: v.ExactOptionalSchema<v.BooleanSchema<undefined>, undefined>;
82
+ readonly suppressOriginMismatchWarning: v.ExactOptionalSchema<v.BooleanSchema<undefined>, undefined>;
83
+ readonly suppressEnvOverwriteWarnings: v.ExactOptionalSchema<v.BooleanSchema<undefined>, undefined>;
84
+ readonly warnOnFrameworkChange: v.ExactOptionalSchema<v.BooleanSchema<undefined>, undefined>;
85
+ readonly hmr: v.ExactOptionalSchema<v.UnionSchema<[v.BooleanSchema<undefined>, v.LiteralSchema<"reload", undefined>], undefined>, undefined>;
78
86
  readonly csr: v.ExactOptionalSchema<v.BooleanSchema<undefined>, undefined>;
79
87
  }, undefined>], undefined>;
80
88
  export type FrameworkConfig = v.InferOutput<typeof frameworkConfigValidator>;
89
+ export declare function unknownConfigKeys(config: unknown): string[];
81
90
  //# sourceMappingURL=frameworkConfigSchema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"frameworkConfigSchema.d.ts","sourceRoot":"","sources":["../src/frameworkConfigSchema.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,IAAI,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGnD,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAI5B,MAAM,WAAW,YAAa,SAAQ,kBAAkB;CAAG;AAwE3D,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BAGnC,CAAA;AAEF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,wBAAwB,CAAC,CAAA"}
1
+ {"version":3,"file":"frameworkConfigSchema.d.ts","sourceRoot":"","sources":["../src/frameworkConfigSchema.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,IAAI,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGnD,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAI5B,MAAM,WAAW,YAAa,SAAQ,kBAAkB;CAAG;AA6E3D,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BAGnC,CAAA;AAEF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAO5E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,CAG3D"}
@@ -9,7 +9,6 @@ const stringOrStrings = v.union([v.string(), v.array(v.string())]);
9
9
  const frameworkConfigBaseEntries = {
10
10
  codeDir: v.exactOptional(v.string()),
11
11
  copy: v.exactOptional(v.string()),
12
- exclude: v.exactOptional(v.string()),
13
12
  copyExclude: v.exactOptional(v.string()),
14
13
  sourceDir: v.exactOptional(v.string()),
15
14
  // compile .ts/.tsx in codeDir directly (babel strips types); the app keeps only a type checker
@@ -50,6 +49,12 @@ const frameworkConfigBaseEntries = {
50
49
  serverMiddleware: v.exactOptional(v.tuple([v.string(), v.string(), v.string()])),
51
50
  apiRoutes: v.exactOptional(v.string()),
52
51
  apiPath: v.exactOptional(v.string()),
52
+ suppressNoHeadWarning: v.exactOptional(v.boolean()),
53
+ suppressOriginMismatchWarning: v.exactOptional(v.boolean()),
54
+ suppressEnvOverwriteWarnings: v.exactOptional(v.boolean()),
55
+ // accepted but not on the public config type: a framework developer's switch
56
+ warnOnFrameworkChange: v.exactOptional(v.boolean()),
57
+ hmr: v.exactOptional(v.union([v.boolean(), v.literal('reload')])),
53
58
  csr: v.exactOptional(v.boolean())
54
59
  };
55
60
  const frameworkConfigWithRootComponentSchema = v.object({
@@ -63,4 +68,11 @@ const frameworkConfigWithoutRootComponentSchema = v.object({
63
68
  });
64
69
  // variant, not union: a plain union reports one issue at the union itself ("Expected Object but
65
70
  // received Object"), where this picks the branch by useRootComponent and reports its actual fields
66
- export const frameworkConfigValidator = v.variant('useRootComponent', [frameworkConfigWithRootComponentSchema, frameworkConfigWithoutRootComponentSchema]);
71
+ export const frameworkConfigValidator = v.variant('useRootComponent', [frameworkConfigWithRootComponentSchema, frameworkConfigWithoutRootComponentSchema]);
72
+ // v.object drops keys it does not list rather than rejecting them - right for a config that may
73
+ // carry another tool's entries, but a typo or a removed key then vanishes silently, so name them
74
+ const knownConfigKeys = new Set([...Object.keys(frameworkConfigBaseEntries), 'useRootComponent', 'rootComponent']);
75
+ export function unknownConfigKeys(config) {
76
+ if (typeof config !== 'object' || config === null) return [];
77
+ return Object.keys(config).filter(key => !knownConfigKeys.has(key));
78
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"getUserConfig.d.ts","sourceRoot":"","sources":["../src/getUserConfig.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAOxF,wBAAsB,aAAa,CAC/B,SAAS,GAAE,wBAAwB,GAAG,IAAW,EACjD,MAAM,GAAE,QAAQ,GAAG,OAAiB,GACrC,OAAO,CAAC,uBAAuB,CAAC,CAsBlC"}
1
+ {"version":3,"file":"getUserConfig.d.ts","sourceRoot":"","sources":["../src/getUserConfig.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAOxF,wBAAsB,aAAa,CAC/B,SAAS,GAAE,wBAAwB,GAAG,IAAW,EACjD,MAAM,GAAE,QAAQ,GAAG,OAAiB,GACrC,OAAO,CAAC,uBAAuB,CAAC,CA2BlC"}
@@ -1,9 +1,9 @@
1
1
  import { defaultConfig } from './defaultConfig.js';
2
2
  import { findUserConfig } from './findUserConfig.js';
3
- import { frameworkConfigValidator } from './frameworkConfigSchema.js';
3
+ import { frameworkConfigValidator, unknownConfigKeys } from './frameworkConfigSchema.js';
4
4
  import { makeFinalConfig } from './makeFinalConfig.js';
5
5
  import { throwError } from './throwError.js';
6
- import { cliOut } from './cliOutput.js';
6
+ import { cliOut, cliWarn } from './cliOutput.js';
7
7
  import { validate } from './standardSchema.js';
8
8
  export async function getUserConfig(overrides = null, volume = 'noisy') {
9
9
  const userConfigOrNull = await findUserConfig(process.cwd(), volume);
@@ -15,6 +15,11 @@ export async function getUserConfig(overrides = null, volume = 'noisy') {
15
15
  cliOut('Config', userConfig);
16
16
  throwError('Your tungsten config did not match the required format', '\n' + result.problems);
17
17
  }
18
+ // the validator drops what it does not list: say so, as a typo would otherwise vanish
19
+ const unknownKeys = unknownConfigKeys(userConfig.data);
20
+ if (unknownKeys.length > 0 && volume !== 'silent') {
21
+ cliWarn(`tungsten config: ignoring unknown ${unknownKeys.length === 1 ? 'key' : 'keys'} ${unknownKeys.join(', ')}`);
22
+ }
18
23
  const finalConfig = makeFinalConfig(result.value, overrides);
19
24
  //console.log('finalConfig', finalConfig)
20
25
  return finalConfig;
@@ -0,0 +1,2 @@
1
+ export declare function appHeadChildrenStart(head: HTMLElement): number;
2
+ //# sourceMappingURL=headChildren.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headChildren.d.ts","sourceRoot":"","sources":["../src/headChildren.ts"],"names":[],"mappings":"AAKA,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAW9D"}
@@ -0,0 +1,16 @@
1
+ // processHead unshifts everything the framework adds to the head in front of the app's own
2
+ // children, each marked data--t-internal (or data--t-persist, for what a re-created head keeps);
3
+ // dev banners are appended after them. The app's children are the contiguous run in between,
4
+ // and this is its start - where hydration matches them and where an update's pointer begins
5
+ export function appHeadChildrenStart(head) {
6
+ const children = head.childNodes;
7
+ let index = 0;
8
+ while (index < children.length) {
9
+ const child = children[index];
10
+ if (child.nodeType !== 1) break;
11
+ const element = child; // eslint-disable-line @typescript-eslint/no-unsafe-type-assertion -- nodeType 1 is an element
12
+ if (!element.hasAttribute('data--t-internal') && !element.hasAttribute('data--t-persist')) break;
13
+ index++;
14
+ }
15
+ return index;
16
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"hydrate.d.ts","sourceRoot":"","sources":["../../src/hydrate/hydrate.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAQnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAmBxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAM7C,OAAO,EACH,yBAAyB,EAC5B,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAmBlD,OAAO,EAC4B,KAAK,uBAAuB,EAC9D,MAAM,oCAAoC,CAAA;AAQ3C,OAAO,0BAA0B,CAAA;AASjC,MAAM,MAAM,WAAW,GAAG;IACtB,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,uBAAuB,EAAE,CAAA;IAGrC,WAAW,EAAE,OAAO,CAAA;CACvB,CAAA;AACD,wBAAgB,sBAAsB,IAAI,WAAW,CAEpD;AAID,wBAAsB,OAAO,CACzB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,yBAAyB,GAAG,IAAI,EAC/C,cAAc,EAAE,cAAc,iBA2DjC;AAyBD,wBAAsB,oBAAoB,CACtC,aAAa,SAAS,yBAAyB,CAAC,GAAG,EAAE,GAAG,CAAC,EAEzD,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,WAAW,EAIjB,KAAK,GAAE,YAAY,CAAC,aAAa,CAAC,CAAC,OAAO,CAAM,EAAE,sJAAsJ;AACxM,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CA6DtC"}
1
+ {"version":3,"file":"hydrate.d.ts","sourceRoot":"","sources":["../../src/hydrate/hydrate.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAQnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAmBxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAO7C,OAAO,EACH,yBAAyB,EAC5B,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAmBlD,OAAO,EAC4B,KAAK,uBAAuB,EAC9D,MAAM,oCAAoC,CAAA;AAS3C,OAAO,0BAA0B,CAAA;AASjC,MAAM,MAAM,WAAW,GAAG;IACtB,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,uBAAuB,EAAE,CAAA;IAGrC,WAAW,EAAE,OAAO,CAAA;CACvB,CAAA;AACD,wBAAgB,sBAAsB,IAAI,WAAW,CAEpD;AAID,wBAAsB,OAAO,CACzB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,yBAAyB,GAAG,IAAI,EAC/C,cAAc,EAAE,cAAc,iBAgEjC;AAyBD,wBAAsB,oBAAoB,CACtC,aAAa,SAAS,yBAAyB,CAAC,GAAG,EAAE,GAAG,CAAC,EAEzD,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,WAAW,EAIjB,KAAK,GAAE,YAAY,CAAC,aAAa,CAAC,CAAC,OAAO,CAAM,EAAE,sJAAsJ;AACxM,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CA6DtC"}
@@ -1,9 +1,10 @@
1
1
  import { applyUpdate, integrateElementUpdateVdom } from '../update/integrateUpdateVdom.js';
2
2
  //import type { RouteType } from '../routing/RouteType.js'
3
3
  import { $number, $string, makeRenderedContentNodeNonRendered, makeRenderedContentNodeClassComponent, makeRenderedContentNodeFunctionComponent } from '../RenderedContentNode.js';
4
- import { ContentNodeElementIsHtml, ContentNodeIsHtml, ContentNodeIsComponent, ContentNodeComponentIsClassComponent, ContentNodeIsElement } from '../ContentNode.js';
4
+ import { ContentNodeElementIsHtml, ContentNodeIsHtml, ContentNodeIsComponent, ContentNodeComponentIsClassComponent, ContentNodeIsFragment, ContentNodeIsElement } from '../ContentNode.js';
5
5
  import { IsHTMLElement } from '../DomNodes.js';
6
6
  import { DomPointer } from '../DomPointer.js';
7
+ import { appHeadChildrenStart } from '../headChildren.js';
7
8
  import { DomRegion } from '../DomRegion.js';
8
9
  //import { FunctionComponent } from '../FunctionComponent.js'
9
10
  import { FunctionElement } from '../FunctionComponentStandIn.js';
@@ -31,6 +32,7 @@ import { reconcileHydratedAttributes } from './reconcileHydratedAttributes.js';
31
32
  import { markOptionSelected } from '../markOptionSelected.js';
32
33
  import { renderHydrationMismatchBanner } from './renderHydrationMismatchBanner.js';
33
34
  import { setCurrentInstance } from '../hmr/instanceRegistry.js';
35
+ import { renderDocInitErrorBanner } from '../docInit.js';
34
36
  // side-effect only: pulls applyHmrModule.js (and its clean, non-dynamic-import dependencies)
35
37
  // into the framework's traced dependency graph so it gets copied to .packages/ and is servable
36
38
  // to the browser. It is invoked from a raw, untraced inline script (processHead.ts) instead of
@@ -52,6 +54,9 @@ export function makeDefaultHydrateMeta() {
52
54
  }
53
55
  export async function hydrate(appRoutes, RootComponent, instanceConfig) {
54
56
  debug('hydrate start');
57
+ // first, before any component is built: a DocInit that threw in the head is on screen whatever
58
+ // happens next (a read of its value throws below). Rendered again at the end, for the count.
59
+ if (isDev) renderDocInitErrorBanner();
55
60
  //console.log('hydration global data ', __tungsten_global_data__)
56
61
  const location = window.location.pathname;
57
62
  const routes = typeof appRoutes === 'function' ? appRoutes(null) : appRoutes;
@@ -93,6 +98,7 @@ export async function hydrate(appRoutes, RootComponent, instanceConfig) {
93
98
  }
94
99
  instance.hydrationComplete = true;
95
100
  if (isDev) renderHydrationMismatchBanner(meta.mismatches);
101
+ if (isDev) renderDocInitErrorBanner();
96
102
  //// Can components update while hydrating is still taking place
97
103
  //// -- probably yes
98
104
  //// Can we pause any further update until hydration completes, to retain coherency?
@@ -371,6 +377,8 @@ async function hydrateFunctionComponent(node, parentElement, domPointer, instanc
371
377
  //// why don't we have html, nodes in here?
372
378
  async function hydrateNode(node, parentElement, domPointer, instance, meta) {
373
379
  debug('hydrateNode');
380
+ // a fragment hydrates as its children; the rendered side never holds one
381
+ if (ContentNodeIsFragment(node)) return hydrateNode(node[$props].children, parentElement, domPointer, instance, meta);
374
382
  if (Array.isArray(node)) {
375
383
  const renderedChildren = [];
376
384
  for (const arrayNode of node) {
@@ -384,7 +392,9 @@ async function hydrateNode(node, parentElement, domPointer, instance, meta) {
384
392
  }
385
393
  }
386
394
  //// why don't we have html, nodes in here?
387
- async function hydrateNodeSingle(node, parentElement, domPointer, instance, meta) {
395
+ async function hydrateNodeSingle(node,
396
+ // hydrateNode unwrapped any fragment
397
+ parentElement, domPointer, instance, meta) {
388
398
  debug('----hydrateNodeSingle');
389
399
  debug('node', `(${typeof node})`, typeof node === 'string' ? `"${node}"` : node);
390
400
  if (ContentNodeIsElement(node)) {
@@ -444,31 +454,25 @@ async function hydrateNodeSingle(node, parentElement, domPointer, instance, meta
444
454
  }
445
455
  }
446
456
  debug(node, node[$type], typeof node[$type], node[$type] === 'head');
457
+ // the head hydrates like any element below, its children matched from appHeadChildrenStart
458
+ // (past what the server added). Hydration used to skip the children, and the record with no
459
+ // children then made the first root update re-create them all, duplicating the title and metas
447
460
  if (node[$type] === 'head') {
448
- const node = domPointer.get();
449
- if (node.nodeType !== 1 || node.nodeName.toLocaleLowerCase() !== 'head') {
450
- throwError('hydrateNodeSingle', `expected to find a head node, instead found nodeType ${node.nodeType}, nodeName ${node.nodeName}`);
461
+ const headDomNode = domPointer.get();
462
+ if (headDomNode.nodeType !== 1 || headDomNode.nodeName.toLocaleLowerCase() !== 'head') {
463
+ throwError('hydrateNodeSingle', `expected to find a head node, instead found nodeType ${headDomNode.nodeType}, nodeName ${headDomNode.nodeName}`);
451
464
  }
452
- // collect persistent head nodes
465
+ // collect the head children a head re-created on the client keeps (createHtmlElement)
453
466
  const persistentHeadChildren = [];
454
- const domChildren = node.childNodes;
455
- for (const child of domChildren) {
467
+ for (const child of headDomNode.childNodes) {
456
468
  if (child.nodeType === 1) {
457
- const el = child;
469
+ const el = child; // eslint-disable-line @typescript-eslint/no-unsafe-type-assertion -- nodeType 1 is an element
458
470
  if (el.hasAttribute('data--t-persist')) {
459
- persistentHeadChildren.push(el.cloneNode(true));
471
+ persistentHeadChildren.push(el.cloneNode(true)); // eslint-disable-line @typescript-eslint/no-unsafe-type-assertion -- a clone of an element is an element
460
472
  }
461
473
  }
462
474
  }
463
- //const domChildrenPointer = new DomPointer(node as HTMLHeadElement)
464
475
  instance.persistentHeadChildren = persistentHeadChildren;
465
- debug('head node - skipping, because we add a lot to this during initial render, breaking matching');
466
- domPointer.increment();
467
- //return { [$type]: $head, domNode: node as HTMLElement } // eslint-disable-line @typescript-eslint/no-unsafe-type-assertion
468
- return {
469
- [$type]: 'head',
470
- domNode: node
471
- }; // eslint-disable-line @typescript-eslint/no-unsafe-type-assertion
472
476
  }
473
477
  if (ContentNodeIsHtml(node)) {
474
478
  // HTML el
@@ -534,7 +538,7 @@ async function hydrateNodeSingle(node, parentElement, domPointer, instance, meta
534
538
  });
535
539
  } else if (node[$props].__opaque !== true && validChildren(children)) {
536
540
  debug('node.props.children', children);
537
- const childDomPointer = new DomPointer(domNode);
541
+ const childDomPointer = new DomPointer(domNode, node[$type] === 'head' ? appHeadChildrenStart(domNode) : 0);
538
542
  renderedChildren = await hydrateNode(children, parentElement, childDomPointer, instance, meta);
539
543
  }
540
544
  meta.selectValue = outerSelectValue;
@@ -3,5 +3,6 @@ export type TaggedAttributeMismatch = AttributeMismatch & {
3
3
  tagName: string;
4
4
  };
5
5
  export declare const hydrationMismatchAttribute = "data-tungsten-hydration-mismatches";
6
+ export declare const hydrationMismatchBannerId = "tungsten-hydration-mismatches";
6
7
  export declare function renderHydrationMismatchBanner(mismatches: readonly TaggedAttributeMismatch[], doc?: Document): void;
7
8
  //# sourceMappingURL=renderHydrationMismatchBanner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderHydrationMismatchBanner.d.ts","sourceRoot":"","sources":["../../src/hydrate/renderHydrationMismatchBanner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;AAEzE,MAAM,MAAM,uBAAuB,GAAG,iBAAiB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAI7E,eAAO,MAAM,0BAA0B,uCAAuC,CAAA;AA2C9E,wBAAgB,6BAA6B,CACzC,UAAU,EAAE,SAAS,uBAAuB,EAAE,EAC9C,GAAG,GAAE,QAAmB,GACzB,IAAI,CA4BN"}
1
+ {"version":3,"file":"renderHydrationMismatchBanner.d.ts","sourceRoot":"","sources":["../../src/hydrate/renderHydrationMismatchBanner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;AAGzE,MAAM,MAAM,uBAAuB,GAAG,iBAAiB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAK7E,eAAO,MAAM,0BAA0B,uCAAuC,CAAA;AAE9E,eAAO,MAAM,yBAAyB,kCAAkC,CAAA;AAIxE,wBAAgB,6BAA6B,CACzC,UAAU,EAAE,SAAS,uBAAuB,EAAE,EAC9C,GAAG,GAAE,QAAmB,GACzB,IAAI,CAUN"}
@@ -1,69 +1,17 @@
1
- // Read by the CSS rule below via attr() - not by Tungsten. Exported so an
2
- // application that wants different styling can target the same selector.
1
+ import { renderDevBanner } from '../devBanner.js';
2
+ // The report as an attribute on <html>: a machine-readable hook (tests, tooling, app styling)
3
+ // that no Tungsten bookkeeping ever touches - updateAttributes diffs against its own record of
4
+ // what it last set, never the DOM's live attribute list, so this is never visited or removed.
3
5
  export const hydrationMismatchAttribute = 'data-tungsten-hydration-mismatches';
4
- const styleId = 'tungsten-hydration-mismatches-style';
5
- // Reports hydration mismatches in the page, not only the console, without
6
- // adding a real DOM node to the hydrated tree.
7
- //
8
- // A real element - even one appended after hydration finishes and never
9
- // touched again by this code - is not actually safe here. Every container
10
- // Tungsten re-renders gets a fresh `new DomRegion(containerDomNode)` built
11
- // from whatever is *actually* in its childNodes at that moment, and every
12
- // position Tungsten writes to next is a raw index into that same list
13
- // (DomPointer.get/next/prev, and several inline `childNodes[domPointer.index]`
14
- // reads in integrateUpdateVdom.ts/hydrate.tsx). An extra, untracked child
15
- // shifts every index after it, so the next update touching that container
16
- // - body, in a typical app - would compare and write to the wrong nodes.
17
- // There is no flag on an element that makes the walker skip it; it would
18
- // have to be built into DomPointer/DomRegion and every direct childNodes
19
- // access alongside them, which is a core-framework change, not a banner.
20
- //
21
- // Attributes are a different story: reconcileHydratedAttributes only runs
22
- // once, during hydration, before this ever runs, and every later update
23
- // (updateAttributes) diffs against domNode.__tungsten_oldAttributes - its
24
- // own private record of what it last set - never the DOM's live attribute
25
- // list. A plain setAttribute() here is in neither its old props nor its new
26
- // props, so it is never visited, and never removed.
27
- //
28
- // So: set an attribute on <html> (outside Tungsten's own bookkeeping, so
29
- // permanently untouched by it) and let a `content: attr(...)` pseudo-element
30
- // display it. A pseudo-element is not a real node - never in .childNodes,
31
- // never visited by DomPointer or DomRegion - so this carries zero index risk
32
- // for the app's own reconciliation, at the cost of one small, deliberately
33
- // hacky wrinkle: a single <style> tag inserted into <head> once.
34
- //
35
- // head is not structurally exempt from diffing in general - it currently
36
- // just never gets diffed node-by-node during hydration (hydrateNodeSingle's
37
- // 'head' case skips it outright, a known hack, not a guarantee), and nothing
38
- // in a typical app changes head's vdom children after mount, so the general
39
- // update path never exercises it either. That could change. What head does
40
- // already have is a marker for exactly this situation - data--t-persist,
41
- // used by processHead.ts for framework-injected head content (the entry
42
- // script, the component CSS link) that isn't part of the app's own vdom and
43
- // must survive hydration - so this style tag carries it too, rather than
44
- // riding on the blanket skip alone.
6
+ // The visible, selectable report. Exported so an application can restyle it.
7
+ export const hydrationMismatchBannerId = 'tungsten-hydration-mismatches';
8
+ // Reports hydration mismatches in the page, not only the console - see devBanner.ts for where
9
+ // and why the banner lives in <head>.
45
10
  export function renderHydrationMismatchBanner(mismatches, doc = document) {
46
11
  if (mismatches.length === 0) return;
47
- if (doc.getElementById(styleId) === null) {
48
- const style = doc.createElement('style');
49
- style.id = styleId;
50
- style.setAttribute('data--t-persist', 'true');
51
- style.textContent = `
52
- html[${hydrationMismatchAttribute}]::before {
53
- content: attr(${hydrationMismatchAttribute});
54
- display: block;
55
- background: #7a1f1f;
56
- color: #fff;
57
- font: 13px/1.5 monospace;
58
- padding: 8px 12px;
59
- max-height: 33vh;
60
- overflow: auto;
61
- white-space: pre-wrap;
62
- }
63
- `;
64
- doc.head.appendChild(style);
65
- }
66
12
  const heading = `Tungsten: ${mismatches.length} hydration mismatch${mismatches.length === 1 ? '' : 'es'} (dev only)`;
67
13
  const lines = mismatches.map(mismatch => `<${mismatch.tagName}> ${mismatch.name}: ` + `rendered ${JSON.stringify(mismatch.expected)}, server sent ${JSON.stringify(mismatch.actual)}`);
68
- doc.documentElement.setAttribute(hydrationMismatchAttribute, [heading, ...lines].join('\n'));
14
+ const report = [heading, ...lines].join('\n');
15
+ doc.documentElement.setAttribute(hydrationMismatchAttribute, report);
16
+ renderDevBanner(hydrationMismatchBannerId, report, doc);
69
17
  }
@@ -16,8 +16,10 @@ export * from './components/bindable/BindableTextarea.jsx';
16
16
  export * from './components/GoToComponent.jsx';
17
17
  export * from './components/Lazy.js';
18
18
  export * from './components/Link.jsx';
19
+ export * from './components/NativeHtml.jsx';
19
20
  export * from './components/PopMessages.jsx';
20
- export * from './components/RawHtml.jsx';
21
+ export * from './components/Protected.jsx';
22
+ export { RawHtml, type RawHtmlProps, RawHtml as ParseHtml, type RawHtmlProps as ParseHtmlProps } from './components/RawHtml.jsx';
21
23
  export * from './components/RouteRedirectComponent.jsx';
22
24
  export { parseHtml, type ParseHtmlOptions } from './rawHtml/parseHtml.js';
23
25
  export { safeHtmlAllowList } from './rawHtml/safeHtmlAllowList.js';
@@ -31,6 +33,7 @@ export { pop, dismissPop } from './pop.js';
31
33
  export * from './browserStorage.js';
32
34
  export { createElement } from './createElement.js';
33
35
  export * from './createRef.js';
36
+ export { docInit } from './docInit.js';
34
37
  export { foreach } from './foreach.js';
35
38
  export * from './helpers/index.js';
36
39
  export * from './hooks/index.js';
@@ -45,6 +48,7 @@ export { isProd } from './isProd.js';
45
48
  export { logAndReturn } from './logAndReturn.js';
46
49
  export * from './requests/index.js';
47
50
  export { registerGlobalData, type GlobalData, type GlobalDataFunction } from './routing/registerGlobalData.js';
51
+ export { registerPrivateEnvSchema, registerPublicEnvSchema, type PrivateEnvSchema, type PublicEnvSchema, } from './env/registerEnvSchemas.js';
48
52
  export * from './routing/MatchedRoute.js';
49
53
  export * from './routing/RedirectCode.js';
50
54
  export * from './routing/Route.jsx';
@@ -1 +1 @@
1
- {"version":3,"file":"indexInner.d.ts","sourceRoot":"","sources":["../src/indexInner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"indexInner.d.ts","sourceRoot":"","sources":["../src/indexInner.ts"],"names":[],"mappings":"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"}
@@ -22,8 +22,10 @@ export * from "./components/bindable/BindableTextarea.js";
22
22
  export * from "./components/GoToComponent.js";
23
23
  export * from './components/Lazy.js';
24
24
  export * from "./components/Link.js";
25
+ export * from "./components/NativeHtml.js";
25
26
  export * from "./components/PopMessages.js";
26
- export * from "./components/RawHtml.js";
27
+ export * from "./components/Protected.js";
28
+ export { RawHtml, RawHtml as ParseHtml } from "./components/RawHtml.js";
27
29
  export * from "./components/RouteRedirectComponent.js";
28
30
  export { parseHtml } from './rawHtml/parseHtml.js';
29
31
  export { safeHtmlAllowList } from './rawHtml/safeHtmlAllowList.js';
@@ -36,6 +38,7 @@ export { pop, dismissPop } from './pop.js';
36
38
  export * from './browserStorage.js';
37
39
  export { createElement } from './createElement.js';
38
40
  export * from './createRef.js';
41
+ export { docInit } from './docInit.js'; // what BabelTransformDocInit rewrites DocInit() calls into; installs the DocInit global
39
42
  //export * from './env/funcs.js'
40
43
  //export * from './env/index.js'
41
44
  export { foreach } from './foreach.js';
@@ -56,6 +59,7 @@ export { logAndReturn } from './logAndReturn.js';
56
59
  export * from './requests/index.js';
57
60
  //export * from './zones/react.jsx'
58
61
  export { registerGlobalData } from './routing/registerGlobalData.js';
62
+ export { registerPrivateEnvSchema, registerPublicEnvSchema } from './env/registerEnvSchemas.js';
59
63
  export * from './routing/MatchedRoute.js';
60
64
  export * from './routing/RedirectCode.js';
61
65
  export * from "./routing/Route.js";
@@ -3,7 +3,7 @@ import type { KeyAttr } from './KeyAttr.js';
3
3
  import { type TungstenComponentGenericProps } from './Components.jsx';
4
4
  import { ContentNode } from './ContentNode.js';
5
5
  export * from './contentNodeSymbols.js';
6
- export declare const Fragment: 60107;
6
+ export declare const Fragment: symbol;
7
7
  export type JsxNodeType = string | AnyComponentType | typeof Fragment;
8
8
  export declare function jsx(type: JsxNodeType | string | number | boolean | null | undefined, props: TungstenComponentGenericProps, key: KeyAttr): ContentNode;
9
9
  export declare const jsxs: (...args: Parameters<typeof jsx>) => ContentNode;
@@ -1 +1 @@
1
- {"version":3,"file":"jsxRuntime.d.ts","sourceRoot":"","sources":["../src/jsxRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,KAAK,6BAA6B,EAAoD,MAAM,kBAAkB,CAAA;AACvH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAM9C,cAAc,yBAAyB,CAAA;AAGvC,eAAO,MAAM,QAAQ,EAAG,KAAe,CAAA;AAGvC,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,gBAAgB,GAAG,OAAO,QAAQ,CAAA;AAkBrE,wBAAgB,GAAG,CACf,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,EAChE,KAAK,EAAE,6BAA6B,EACpC,GAAG,EAAE,OAAO,GACb,WAAW,CAiFb;AAID,eAAO,MAAM,IAAI,GAAY,GAAG,MAAM,UAAU,CAAC,OAAO,GAAG,CAAC,gBAG3D,CAAA"}
1
+ {"version":3,"file":"jsxRuntime.d.ts","sourceRoot":"","sources":["../src/jsxRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,KAAK,6BAA6B,EAAoD,MAAM,kBAAkB,CAAA;AACvH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAM9C,cAAc,yBAAyB,CAAA;AAIvC,eAAO,MAAM,QAAQ,QAAY,CAAA;AAGjC,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,gBAAgB,GAAG,OAAO,QAAQ,CAAA;AAkBrE,wBAAgB,GAAG,CACf,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,EAChE,KAAK,EAAE,6BAA6B,EACpC,GAAG,EAAE,OAAO,GACb,WAAW,CAoFb;AAID,eAAO,MAAM,IAAI,GAAY,GAAG,MAAM,UAAU,CAAC,OAAO,GAAG,CAAC,gBAG3D,CAAA"}
@@ -1,11 +1,12 @@
1
1
  import { TungstenBaseComponent } from "./Components.js";
2
2
  import { TungstenError } from './TungstenError.js';
3
- import { $key, $props, $type } from './contentNodeSymbols.js';
3
+ import { $fragment, $key, $props, $type } from './contentNodeSymbols.js';
4
4
  import { packageNameCapitalized } from './settings.js';
5
5
  import { throwError } from './throwError.js';
6
6
  export * from './contentNodeSymbols.js';
7
7
  //import { inspect } from 'util'
8
- export const Fragment = 0xeacb; // code taken from react for fragments
8
+ // what the babel automatic runtime imports for `<>…</>`; the node it makes is unwrapped by the renderers
9
+ export const Fragment = $fragment;
9
10
  // (?outdated?) this doesn't seem to handle string/number/undefined correctly
10
11
  function classNameArrayToString(array) {
11
12
  let result = '';
@@ -47,10 +48,11 @@ export function jsx(type, props, key) {
47
48
  }
48
49
  //const { children, ...filteredProps } = props
49
50
  if (type === Fragment) {
50
- const {
51
- children
52
- } = props;
53
- return children;
51
+ return {
52
+ [$type]: $fragment,
53
+ [$props]: props,
54
+ [$key]: key
55
+ };
54
56
  }
55
57
  if (typeof type === 'function') {
56
58
  // element
@@ -88,7 +90,7 @@ export function jsx(type, props, key) {
88
90
  if (typeof type === 'number') {
89
91
  return String(type);
90
92
  }
91
- throw new TungstenError(`${packageNameCapitalized} JSX Runtime error: did not recognize element` + `, expected a string, function, class (type function), or fragment.` + ` Received type ${typeof type}: ${type}`);
93
+ throw new TungstenError(`${packageNameCapitalized} JSX Runtime error: did not recognize element` + `, expected a string, function, class (type function), or fragment.` + ` Received type ${typeof type}: ${String(type)}`);
92
94
  }
93
95
  // jsxs is used when children is an array instead of a single object
94
96
  // just use the same function for both
@@ -2,17 +2,21 @@ import type { AnyComponentType } from './AnyComponentType.js';
2
2
  import type { TungstenComponentGenericProps } from './Components.jsx';
3
3
  import type { KeyAttr } from './KeyAttr.js';
4
4
  export * from './contentNodeSymbols.js';
5
- export declare const Fragment: 60107;
5
+ export declare const Fragment: symbol;
6
6
  export type JsxNodeType = string | AnyComponentType | typeof Fragment;
7
7
  export declare const TypeSymbol: unique symbol;
8
- export declare function jsx(type: JsxNodeType | string | number | boolean | null | undefined, props: TungstenComponentGenericProps, key: KeyAttr): string | number | boolean | import("./ContentNode.js").ContentNodeHtml | import("./ContentNode.js").ContentNodeClassComponent | import("./ContentNode.js").ContentNodeFunctionComponent | import("./ContentNode.js").ContentNodeArray | {
9
- type: import("./Components.jsx").TungstenBaseComponentType<any, any> | import("./FunctionComponent.js").FunctionComponent<any, any>;
8
+ export declare function jsx(type: JsxNodeType | string | number | boolean | null | undefined, props: TungstenComponentGenericProps, key: KeyAttr): string | {
9
+ type: symbol;
10
+ props: TungstenComponentGenericProps;
11
+ key: KeyAttr;
12
+ } | {
13
+ type: AnyComponentType;
10
14
  props: TungstenComponentGenericProps;
11
15
  key: KeyAttr;
12
16
  } | {
13
17
  type: string;
14
18
  props: TungstenComponentGenericProps;
15
19
  key: KeyAttr;
16
- } | null | undefined;
20
+ } | null;
17
21
  export declare const jsxs: typeof jsx;
18
22
  //# sourceMappingURL=jsxRuntimeSignals.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"jsxRuntimeSignals.d.ts","sourceRoot":"","sources":["../src/jsxRuntimeSignals.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAI3C,cAAc,yBAAyB,CAAA;AAEvC,eAAO,MAAM,QAAQ,EAAG,KAAe,CAAA;AAEvC,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,gBAAgB,GAAG,OAAO,QAAQ,CAAA;AAGrE,eAAO,MAAM,UAAU,eAAiB,CAAA;AAcxC,wBAAgB,GAAG,CACf,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,EAChE,KAAK,EAAE,6BAA6B,EACpC,GAAG,EAAE,OAAO;;;;;;;;qBA+Df;AAID,eAAO,MAAM,IAAI,YAAM,CAAA"}
1
+ {"version":3,"file":"jsxRuntimeSignals.d.ts","sourceRoot":"","sources":["../src/jsxRuntimeSignals.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAK3C,cAAc,yBAAyB,CAAA;AAEvC,eAAO,MAAM,QAAQ,QAAY,CAAA;AAEjC,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,gBAAgB,GAAG,OAAO,QAAQ,CAAA;AAGrE,eAAO,MAAM,UAAU,eAAiB,CAAA;AAcxC,wBAAgB,GAAG,CACf,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,EAChE,KAAK,EAAE,6BAA6B,EACpC,GAAG,EAAE,OAAO;;;;;;;;;;;;SAkEf;AAID,eAAO,MAAM,IAAI,YAAM,CAAA"}
@@ -1,8 +1,9 @@
1
1
  import { TungstenError } from './TungstenError.js';
2
2
  import { packageNameCapitalized } from './settings.js';
3
3
  import { throwError } from './throwError.js';
4
+ import { $fragment } from './contentNodeSymbols.js';
4
5
  export * from './contentNodeSymbols.js';
5
- export const Fragment = 0xeacb; // code taken from react for fragments
6
+ export const Fragment = $fragment;
6
7
  //// TODO use this symbol for type
7
8
  export const TypeSymbol = Symbol('type');
8
9
  // (?outdated?) this doesn't seem to handle string/number/undefined correctly
@@ -35,10 +36,11 @@ export function jsx(type, props, key) {
35
36
  }
36
37
  //const { children, ...filteredProps } = props
37
38
  if (type === Fragment) {
38
- const {
39
- children
40
- } = props;
41
- return children;
39
+ return {
40
+ type,
41
+ props,
42
+ key
43
+ };
42
44
  }
43
45
  if (typeof type === 'function') {
44
46
  return {
@@ -65,7 +67,7 @@ export function jsx(type, props, key) {
65
67
  if (typeof type === 'number') {
66
68
  return String(type);
67
69
  }
68
- throw new TungstenError(`${packageNameCapitalized} JSX Runtime error: did not recognize element` + `, expected a string, function, class (type function), or fragment.` + ` Received type ${typeof type}: ${type}`);
70
+ throw new TungstenError(`${packageNameCapitalized} JSX Runtime error: did not recognize element` + `, expected a string, function, class (type function), or fragment.` + ` Received type ${typeof type}: ${String(type)}`);
69
71
  }
70
72
  // jsx func for static elements
71
73
  // not sure exactly what this is, just use the same func for now
package/dist/nbsp.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export declare const nbsp: import("./ContentNode.js").ContentNode;
2
- export declare const space: import("./ContentNode.js").ContentNode;
1
+ export declare const nbsp: import("./ContentNode.js").ContentNodeElement;
2
+ export declare const space: import("./ContentNode.js").ContentNodeElement;
3
3
  //# sourceMappingURL=nbsp.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nbsp.d.ts","sourceRoot":"","sources":["../src/nbsp.tsx"],"names":[],"mappings":"AAGA,eAAO,MAAM,IAAI,wCAAc,CAAA;AAC/B,eAAO,MAAM,KAAK,wCAAc,CAAA"}
1
+ {"version":3,"file":"nbsp.d.ts","sourceRoot":"","sources":["../src/nbsp.tsx"],"names":[],"mappings":"AAGA,eAAO,MAAM,IAAI,+CAAc,CAAA;AAC/B,eAAO,MAAM,KAAK,+CAAc,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"filterContentNode.d.ts","sourceRoot":"","sources":["../../src/rawHtml/filterContentNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAa,MAAM,mBAAmB,CAAA;AAI/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAyFvD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,GAAG,WAAW,CAE1F"}
1
+ {"version":3,"file":"filterContentNode.d.ts","sourceRoot":"","sources":["../../src/rawHtml/filterContentNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAa,MAAM,mBAAmB,CAAA;AAI/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AA2FvD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,GAAG,WAAW,CAE1F"}
@@ -1,4 +1,4 @@
1
- import { ContentNodeIsComponent } from '../ContentNode.js';
1
+ import { ContentNodeIsComponent, ContentNodeIsFragment } from '../ContentNode.js';
2
2
  import { $props, $type } from '../contentNodeSymbols.js';
3
3
  import { StringIsHtmlEvent } from '../htmlEvents.js';
4
4
  import { blockedUrl, makeAllowCheck, removalFor, urlAttributes } from './parseHtml.js';
@@ -60,6 +60,8 @@ function filter(node, allow) {
60
60
  // rather than reachable: nothing that round-trips through storage (JSON)
61
61
  // can carry a class or function reference.
62
62
  if (ContentNodeIsComponent(node)) return node;
63
+ // parseHtml never produces a fragment either; one from JSX is just its children
64
+ if (ContentNodeIsFragment(node)) return filter(node[$props].children ?? null, allow);
63
65
  const tag = node[$type];
64
66
  const removal = removalFor(tag, true, allow);
65
67
  if (removal === 'drop') return null;
@@ -14,5 +14,6 @@ export type HeadData = {
14
14
  siteBasePath: SiteBasePath;
15
15
  hmr: boolean | 'reload';
16
16
  csr: boolean;
17
+ docInitScript?: string | undefined;
17
18
  };
18
19
  //# sourceMappingURL=HeadData.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"HeadData.d.ts","sourceRoot":"","sources":["../../src/render/HeadData.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAE9D,MAAM,MAAM,YAAY,GAAG,EAAE,GAAG,IAAI,MAAM,EAAE,CAAA;AAE5C,MAAM,MAAM,QAAQ,GAAG;IACnB,KAAK,EAAE,OAAO,CAAA;IACd,QAAQ,EAAE,QAAQ,CAAC;IACnB,mBAAmB,EAAE,aAAa,CAAC;IACnC,aAAa,EAAE,aAAa,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,GAAG,EAAE,OAAO,CAAC;IACb,iBAAiB,EAAE,sBAAsB,CAAC;IAC1C,YAAY,EAAE,YAAY,CAAC;IAC3B,GAAG,EAAE,OAAO,GAAG,QAAQ,CAAA;IACvB,GAAG,EAAE,OAAO,CAAA;CACf,CAAA"}
1
+ {"version":3,"file":"HeadData.d.ts","sourceRoot":"","sources":["../../src/render/HeadData.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAE9D,MAAM,MAAM,YAAY,GAAG,EAAE,GAAG,IAAI,MAAM,EAAE,CAAA;AAE5C,MAAM,MAAM,QAAQ,GAAG;IACnB,KAAK,EAAE,OAAO,CAAA;IACd,QAAQ,EAAE,QAAQ,CAAC;IACnB,mBAAmB,EAAE,aAAa,CAAC;IACnC,aAAa,EAAE,aAAa,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,GAAG,EAAE,OAAO,CAAC;IACb,iBAAiB,EAAE,sBAAsB,CAAC;IAC1C,YAAY,EAAE,YAAY,CAAC;IAC3B,GAAG,EAAE,OAAO,GAAG,QAAQ,CAAA;IACvB,GAAG,EAAE,OAAO,CAAA;IAEZ,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACrC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"addImportMap.d.ts","sourceRoot":"","sources":["../../src/render/addImportMap.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAQ9D,wBAAgB,YAAY,CAAC,IAAI,EAAE,mCAAmC,EAAE,aAAa,EAAE,aAAa,EAChG,mBAAmB,EAAE,aAAa,QAgCrC"}
1
+ {"version":3,"file":"addImportMap.d.ts","sourceRoot":"","sources":["../../src/render/addImportMap.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAQ9D,wBAAgB,YAAY,CAAC,IAAI,EAAE,mCAAmC,EAAE,aAAa,EAAE,aAAa,EAChG,mBAAmB,EAAE,aAAa,QAiCrC"}