arcane-os 0.1.0-dev.5

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 (248) hide show
  1. package/CHANGELOG.md +154 -0
  2. package/COMMERCIAL-LICENSE.md +13 -0
  3. package/LICENSE +661 -0
  4. package/NOTICE +70 -0
  5. package/README.md +448 -0
  6. package/bin/arcane-test.mjs +741 -0
  7. package/bin/arcane.mjs +5 -0
  8. package/docs/architecture.md +234 -0
  9. package/docs/compatibility.md +36 -0
  10. package/docs/event-manager.md +166 -0
  11. package/docs/platform-targets.md +108 -0
  12. package/docs/publishing.md +203 -0
  13. package/docs/reference/README.md +117 -0
  14. package/docs/reference/arcane-ollama.md +288 -0
  15. package/docs/reference/availability-and-normalization.md +123 -0
  16. package/docs/reference/behavioral-testing.md +86 -0
  17. package/docs/reference/cli.md +569 -0
  18. package/docs/reference/core/README.md +62 -0
  19. package/docs/reference/core/arcane-ai-contracts.md +873 -0
  20. package/docs/reference/core/arcane-api.md +601 -0
  21. package/docs/reference/core/arcane-entities.md +65 -0
  22. package/docs/reference/core/arcane-events.md +134 -0
  23. package/docs/reference/core/ollama-module.md +181 -0
  24. package/docs/reference/core/reference/arcane-api/ai-and-ollama.md +1909 -0
  25. package/docs/reference/core/reference/arcane-api/applications-terminal-capabilities.md +1057 -0
  26. package/docs/reference/core/reference/arcane-api/core-and-events.md +320 -0
  27. package/docs/reference/core/reference/arcane-api/filesystem-storage-preferences-appearance.md +610 -0
  28. package/docs/reference/core/reference/arcane-api/namespaces.md +1157 -0
  29. package/docs/reference/core/reference/arcane-api/platform-installation-users-system.md +1423 -0
  30. package/docs/reference/core/reference/arcane-api/session-provisioning-diagnostics-development.md +315 -0
  31. package/docs/reference/event-manager.md +957 -0
  32. package/docs/reference/inventory/package-api.json +2632 -0
  33. package/docs/reference/inventory/runtime-components.json +934 -0
  34. package/docs/reference/inventory/runtime-entities.json +26 -0
  35. package/docs/reference/inventory/runtime-modules.json +1249 -0
  36. package/docs/reference/protocols.md +242 -0
  37. package/docs/reference/runtime-components.md +1098 -0
  38. package/docs/reference/runtime-entities.md +303 -0
  39. package/docs/reference/runtime-modules.md +2010 -0
  40. package/docs/reference/sdk-api.md +4901 -0
  41. package/docs/roadmap.md +79 -0
  42. package/docs/work-amplification.md +124 -0
  43. package/node_modules/event-pubsub/CHANGELOG.md +55 -0
  44. package/node_modules/event-pubsub/MIGRATION.md +70 -0
  45. package/node_modules/event-pubsub/README.md +363 -0
  46. package/node_modules/event-pubsub/SECURITY.md +37 -0
  47. package/node_modules/event-pubsub/index.js +141 -0
  48. package/node_modules/event-pubsub/licence +21 -0
  49. package/node_modules/event-pubsub/package.json +59 -0
  50. package/node_modules/strong-type/README.md +408 -0
  51. package/node_modules/strong-type/assets/strong-type-header.png +0 -0
  52. package/node_modules/strong-type/index.js +1151 -0
  53. package/node_modules/strong-type/licence +21 -0
  54. package/node_modules/strong-type/node.js +125 -0
  55. package/node_modules/strong-type/package.json +61 -0
  56. package/package.json +95 -0
  57. package/runtime/ARCANE_RUNTIME_RELEASE.json +791 -0
  58. package/runtime/arcane/components/app-bar.html +468 -0
  59. package/runtime/arcane/components/assistant-panel.html +715 -0
  60. package/runtime/arcane/components/calculator.html +8 -0
  61. package/runtime/arcane/components/chart.html +655 -0
  62. package/runtime/arcane/components/chat.html +1225 -0
  63. package/runtime/arcane/components/conversation-view.html +13 -0
  64. package/runtime/arcane/components/dashboard-config.html +341 -0
  65. package/runtime/arcane/components/data-maintenance.html +112 -0
  66. package/runtime/arcane/components/data-view.html +92 -0
  67. package/runtime/arcane/components/directory-picker.html +197 -0
  68. package/runtime/arcane/components/document-inspector.html +252 -0
  69. package/runtime/arcane/components/file-drop.html +264 -0
  70. package/runtime/arcane/components/file-inspector.html +293 -0
  71. package/runtime/arcane/components/file-manager.html +1715 -0
  72. package/runtime/arcane/components/header.html +142 -0
  73. package/runtime/arcane/components/integration-settings.html +14 -0
  74. package/runtime/arcane/components/local-ai-status.html +360 -0
  75. package/runtime/arcane/components/markdown-document.html +1048 -0
  76. package/runtime/arcane/components/markdown-editor.html +360 -0
  77. package/runtime/arcane/components/media-embed.html +8 -0
  78. package/runtime/arcane/components/modal.html +402 -0
  79. package/runtime/arcane/components/output-panel.html +259 -0
  80. package/runtime/arcane/components/preferences-form.html +135 -0
  81. package/runtime/arcane/components/record-timeline.html +105 -0
  82. package/runtime/arcane/components/relationship-board.html +116 -0
  83. package/runtime/arcane/components/screen-capture.html +8 -0
  84. package/runtime/arcane/components/source-code-viewer.html +441 -0
  85. package/runtime/arcane/components/source-explanation.html +124 -0
  86. package/runtime/arcane/components/speech.html +365 -0
  87. package/runtime/arcane/components/summary-strip.html +177 -0
  88. package/runtime/arcane/components/table.html +77 -0
  89. package/runtime/arcane/components/task-progress.html +282 -0
  90. package/runtime/arcane/components/terminal-workspace.html +65 -0
  91. package/runtime/arcane/components/theme-editor.html +41 -0
  92. package/runtime/arcane/components/theme-switcher.html +46 -0
  93. package/runtime/arcane/components/unified-inbox.html +20 -0
  94. package/runtime/arcane/components/voice-transcription.html +476 -0
  95. package/runtime/arcane/components/weather-widget.html +8 -0
  96. package/runtime/arcane/components/web-navigator.html +239 -0
  97. package/runtime/arcane/css/communications.css +1 -0
  98. package/runtime/arcane/css/dashboard-config.css +45 -0
  99. package/runtime/arcane/css/document-site.css +981 -0
  100. package/runtime/arcane/css/layout.css +438 -0
  101. package/runtime/arcane/css/primitives.css +321 -0
  102. package/runtime/arcane/css/theme.css +112 -0
  103. package/runtime/arcane/css/utility-workspace.css +1 -0
  104. package/runtime/arcane/entities/ApiModelRecord.js +20 -0
  105. package/runtime/arcane/entities/Calculation.js +13 -0
  106. package/runtime/arcane/entities/Chat.js +581 -0
  107. package/runtime/arcane/entities/CommunicationMessage.js +29 -0
  108. package/runtime/arcane/entities/CommunicationThread.js +21 -0
  109. package/runtime/arcane/entities/Document.js +10 -0
  110. package/runtime/arcane/entities/File.js +143 -0
  111. package/runtime/arcane/entities/Image.js +135 -0
  112. package/runtime/arcane/entities/IntentEnvelope.js +834 -0
  113. package/runtime/arcane/entities/Preference.js +83 -0
  114. package/runtime/arcane/entities/TWiNPolicyDecision.js +1092 -0
  115. package/runtime/arcane/entities/TerminalSession.js +46 -0
  116. package/runtime/arcane/entities/Theme.js +107 -0
  117. package/runtime/arcane/entities/User.js +1046 -0
  118. package/runtime/arcane/entities/Weather.js +23 -0
  119. package/runtime/arcane/img/arcane-os-everywhere.png +0 -0
  120. package/runtime/arcane/img/arrow-left.png +0 -0
  121. package/runtime/arcane/img/arrow-right.png +0 -0
  122. package/runtime/arcane/img/doc.svg +5 -0
  123. package/runtime/arcane/img/folder.svg +4 -0
  124. package/runtime/arcane/img/image.svg +5 -0
  125. package/runtime/arcane/img/refresh.png +0 -0
  126. package/runtime/arcane/img/send.svg +9 -0
  127. package/runtime/arcane/img/trash.svg +5 -0
  128. package/runtime/arcane/img/upload.svg +5 -0
  129. package/runtime/arcane/modules/AI.js +2048 -0
  130. package/runtime/arcane/modules/AIPreferenceRuntime.js +32 -0
  131. package/runtime/arcane/modules/AIPreferenceTuple.js +92 -0
  132. package/runtime/arcane/modules/AIResponseLength.js +42 -0
  133. package/runtime/arcane/modules/AIResponseURLPolicy.js +626 -0
  134. package/runtime/arcane/modules/AnsiText.js +53 -0
  135. package/runtime/arcane/modules/ApiModelDatabase.js +25 -0
  136. package/runtime/arcane/modules/AppDataScope.js +245 -0
  137. package/runtime/arcane/modules/AppearancePreferences.js +28 -0
  138. package/runtime/arcane/modules/ArcaneCommunicationBridge.js +22 -0
  139. package/runtime/arcane/modules/ArcaneNavigationPolicy.js +135 -0
  140. package/runtime/arcane/modules/ArcaneNetworkPolicy.js +255 -0
  141. package/runtime/arcane/modules/AsyncBoundary.js +161 -0
  142. package/runtime/arcane/modules/BrowserTestSuite.js +326 -0
  143. package/runtime/arcane/modules/CalculatorEngine.js +20 -0
  144. package/runtime/arcane/modules/CaseEvidenceIndexer.js +134 -0
  145. package/runtime/arcane/modules/ChartLibrary.js +35 -0
  146. package/runtime/arcane/modules/ChatRecords.js +13 -0
  147. package/runtime/arcane/modules/CommunicationAppController.js +43 -0
  148. package/runtime/arcane/modules/CommunicationHub.js +16 -0
  149. package/runtime/arcane/modules/CommunicationPreferences.js +13 -0
  150. package/runtime/arcane/modules/CommunicationProviderRegistry.js +16 -0
  151. package/runtime/arcane/modules/ComponentContracts.js +586 -0
  152. package/runtime/arcane/modules/ConfiguredAIChatSession.js +288 -0
  153. package/runtime/arcane/modules/ConversationActionItems.js +488 -0
  154. package/runtime/arcane/modules/ConversationClosingReport.js +274 -0
  155. package/runtime/arcane/modules/ConversationTimebox.js +527 -0
  156. package/runtime/arcane/modules/CoreLocalModelCatalog.js +255 -0
  157. package/runtime/arcane/modules/DBLS.js +171 -0
  158. package/runtime/arcane/modules/DBOPFS.js +1154 -0
  159. package/runtime/arcane/modules/DBOPFSWorker.js +116 -0
  160. package/runtime/arcane/modules/DataMaintenance.js +91 -0
  161. package/runtime/arcane/modules/DevelopmentWorkspace.js +74 -0
  162. package/runtime/arcane/modules/DirectoryPicker.js +109 -0
  163. package/runtime/arcane/modules/DocumentNavigation.js +223 -0
  164. package/runtime/arcane/modules/Errors.js +1025 -0
  165. package/runtime/arcane/modules/GifEncoder.js +29 -0
  166. package/runtime/arcane/modules/HTMLImport.js +114 -0
  167. package/runtime/arcane/modules/InMemoryCommunicationProvider.js +14 -0
  168. package/runtime/arcane/modules/IsolatedModelQuestionRunner.js +275 -0
  169. package/runtime/arcane/modules/LocalAIReadiness.js +870 -0
  170. package/runtime/arcane/modules/LocalAIReadinessController.js +156 -0
  171. package/runtime/arcane/modules/MD.js +111 -0
  172. package/runtime/arcane/modules/Mail.js +352 -0
  173. package/runtime/arcane/modules/MailTransport.mjs +180 -0
  174. package/runtime/arcane/modules/Marked.min.js +71 -0
  175. package/runtime/arcane/modules/MemoryRecords.js +44 -0
  176. package/runtime/arcane/modules/MessageAdvisory.js +38 -0
  177. package/runtime/arcane/modules/ModelDefinition.js +189 -0
  178. package/runtime/arcane/modules/Ollama.js +74 -0
  179. package/runtime/arcane/modules/OllamaModelIdentifier.js +21 -0
  180. package/runtime/arcane/modules/OllamaSettings.js +24 -0
  181. package/runtime/arcane/modules/OpenMeteoWeatherProvider.js +14 -0
  182. package/runtime/arcane/modules/PreferenceStore.js +109 -0
  183. package/runtime/arcane/modules/QRCode.min.js +1 -0
  184. package/runtime/arcane/modules/Questionnaire.js +61 -0
  185. package/runtime/arcane/modules/RecordLinkIndex.js +24 -0
  186. package/runtime/arcane/modules/RecordPassageIndex.js +222 -0
  187. package/runtime/arcane/modules/RecordReviewStore.js +94 -0
  188. package/runtime/arcane/modules/RevocableProjectionLedger.js +1623 -0
  189. package/runtime/arcane/modules/RiskSignalAnalyzer.js +37 -0
  190. package/runtime/arcane/modules/ScamRiskPolicy.js +62 -0
  191. package/runtime/arcane/modules/ScopedOPFSCache.js +183 -0
  192. package/runtime/arcane/modules/ScreenCapture.js +20 -0
  193. package/runtime/arcane/modules/SpeechPlayback.js +581 -0
  194. package/runtime/arcane/modules/StaticDocumentCatalog.js +1248 -0
  195. package/runtime/arcane/modules/SystemAppearance.js +20 -0
  196. package/runtime/arcane/modules/SystemPlatformPresentation.js +51 -0
  197. package/runtime/arcane/modules/SystemToolRegistry.js +28 -0
  198. package/runtime/arcane/modules/TerminalClient.js +52 -0
  199. package/runtime/arcane/modules/TerminalCommandRegistry.js +50 -0
  200. package/runtime/arcane/modules/ThemeBootstrap.js +26 -0
  201. package/runtime/arcane/modules/ThemeManager.js +131 -0
  202. package/runtime/arcane/modules/TimeGuard.js +149 -0
  203. package/runtime/arcane/modules/ToolCallRouter.js +83 -0
  204. package/runtime/arcane/modules/WaitForComponent.js +102 -0
  205. package/runtime/arcane/modules/YouTubeMedia.js +16 -0
  206. package/runtime/arcane/modules/uPlot.LICENSE.txt +21 -0
  207. package/runtime/arcane/modules/uPlot.iife.min.js +2 -0
  208. package/runtime/arcane/modules/uPlot.min.css +1 -0
  209. package/runtime/arcane/security/arcane-network-policy.json +6 -0
  210. package/runtime/strong-type/index.js +352 -0
  211. package/runtime/strong-type/licence +21 -0
  212. package/runtime/strong-type/package.json +45 -0
  213. package/schemas/arcane-app-bundle.schema.json +125 -0
  214. package/schemas/arcane-app.schema.json +329 -0
  215. package/schemas/arcane-lock.schema.json +86 -0
  216. package/schemas/arcane-package.schema.json +224 -0
  217. package/schemas/cli-event.schema.json +122 -0
  218. package/schemas/event-stack.schema.json +152 -0
  219. package/schemas/native-build-plan.schema.json +176 -0
  220. package/schemas/target-adapter.schema.json +117 -0
  221. package/src/app-descriptor.mjs +500 -0
  222. package/src/cli/main.mjs +561 -0
  223. package/src/constants.mjs +31 -0
  224. package/src/dev-server.mjs +718 -0
  225. package/src/doctor.mjs +315 -0
  226. package/src/dom-event-instrumentation.mjs +594 -0
  227. package/src/errors.mjs +75 -0
  228. package/src/event-manager.mjs +1342 -0
  229. package/src/event-queue.mjs +138 -0
  230. package/src/events.mjs +219 -0
  231. package/src/index.mjs +177 -0
  232. package/src/integrated-provider-loader.mjs +432 -0
  233. package/src/native-plan.mjs +698 -0
  234. package/src/native-provider-loader.mjs +1126 -0
  235. package/src/packager/core.mjs +2691 -0
  236. package/src/process.mjs +353 -0
  237. package/src/release-bundle.mjs +2523 -0
  238. package/src/repository.mjs +90 -0
  239. package/src/runtime.mjs +452 -0
  240. package/src/scaffold.mjs +380 -0
  241. package/src/targets/index.mjs +436 -0
  242. package/src/templates/assets/app-icon.png +0 -0
  243. package/src/templates/workspace-template.mjs +388 -0
  244. package/src/testing-loader.mjs +9 -0
  245. package/src/testing.mjs +427 -0
  246. package/src/toolchain.mjs +1335 -0
  247. package/src/update-check.mjs +307 -0
  248. package/src/workspace.mjs +449 -0
@@ -0,0 +1,408 @@
1
+ ![strong-type JavaScript values passing through a native type-validation gate](./assets/strong-type-header.png)
2
+
3
+ # strong-type
4
+
5
+ [Overview](https://riaevangelist.github.io/strong-type/) · [Validator reference](https://riaevangelist.github.io/strong-type/reference.html) · [Tests & coverage](https://riaevangelist.github.io/strong-type/testing.html) · [Playground](https://riaevangelist.github.io/strong-type/playground.html)
6
+
7
+ [![npm version](https://img.shields.io/npm/v/strong-type.svg)](https://www.npmjs.com/package/strong-type) [![Node support](https://img.shields.io/node/v/strong-type.svg)](https://www.npmjs.com/package/strong-type) [![CI](https://github.com/RIAEvangelist/strong-type/actions/workflows/ci.yml/badge.svg)](https://github.com/RIAEvangelist/strong-type/actions/workflows/ci.yml) [![license](https://img.shields.io/github/license/RIAEvangelist/strong-type.svg)](./licence) [![dependencies](https://img.shields.io/badge/dependencies-0-70efa8)](./package.json)
8
+
9
+ Native type enforcement for JavaScript. `strong-type` runs as the same untransformed ES module in browsers and Node. Strict checks throw a useful `TypeError`; non-strict checks return a boolean.
10
+
11
+ ## Native by design
12
+
13
+ | Property | Guarantee | What it means |
14
+ |---|---|---|
15
+ | Module format | Native ESM | The checked-in JavaScript is what the runtime executes. |
16
+ | Runtime dependencies | None | No third-party production packages. |
17
+ | Development dependencies | None | Tests and the local docs server use Node built-ins. |
18
+ | Bundler | Not required | Browser and Node imports work directly. |
19
+ | Transpiler | Not required | No generated CommonJS or compatibility copy. |
20
+ | Default entry point | Isomorphic | `index.js` contains no `node:*` imports. |
21
+ | Node support | Explicit adapter | `strong-type/node` adds Node-only precision checks. |
22
+ | Extensibility | Exported `Is` class | Custom validators work directly and in unions. |
23
+
24
+ ## Install
25
+
26
+ ```console
27
+ npm install strong-type
28
+ ```
29
+
30
+ | Import | Runtime | Contents | Build required |
31
+ |---|---|---|---|
32
+ | `strong-type` | Browser + Node | All isomorphic and guarded host validators | No |
33
+ | `strong-type/index.js` | Browser + Node | Compatibility path to the same core | No |
34
+ | `strong-type/node` | Node | Core plus Node built-ins and exact `util.types` checks | No |
35
+ | `strong-type/node.js` | Node | Compatibility path to the Node adapter | No |
36
+
37
+ ## Quick start
38
+
39
+ ```js
40
+ import Is from 'strong-type';
41
+
42
+ const is=new Is;
43
+ const weakIs=new Is(false);
44
+
45
+ is.string('strong-type'); // true
46
+ weakIs.number('42'); // false
47
+ is.union(new Map,'map|set'); // true
48
+
49
+ is.number('42'); // throws TypeError
50
+ ```
51
+
52
+ ## Strict and non-strict modes
53
+
54
+ | Mode | Create | Passing check | Failing check | Best use |
55
+ |---|---|---|---|---|
56
+ | Strict | `new Is` or `new Is(true)` | Returns `true` | Throws `TypeError` | Contracts and enforcement |
57
+ | Non-strict | `new Is(false)` | Returns `true` | Returns `false` | Branching and type discovery |
58
+
59
+ Every advertised method exists in every runtime. When a guarded platform capability is unavailable, strict mode throws `TypeError` and non-strict mode returns `false`. Missing APIs never leak a `ReferenceError`.
60
+
61
+ ## Validator reference
62
+
63
+ The default isomorphic entry exposes 183 validators. The Node adapter adds 18, for 201 documented validators total. The [website reference](https://riaevangelist.github.io/strong-type/reference.html) gives every method its own searchable row with an example, edge case, and runtime label.
64
+
65
+ ### Values, primitives, and numbers
66
+
67
+ | Methods | What passes | Important detail |
68
+ |---|---|---|
69
+ | `defined`, `any`, `exists` | Anything except `undefined` | `null` is defined. |
70
+ | `null` | Exactly `null` | No loose comparison; `undefined` fails. |
71
+ | `nullish` | `null` or `undefined` | Other falsy values fail. |
72
+ | `undefined` | Exactly `undefined` | `null` fails. |
73
+ | `boolean` | Primitive booleans | Boxed Boolean objects fail. |
74
+ | `bigInt`, `bigint` | Primitive bigint values | `bigint` is the lowercase alias. |
75
+ | `number` | Primitive numbers | Includes `NaN` and infinities. |
76
+ | `finite`, `finiteNumber` | Finite primitive numbers | Strings, `null`, and BigInt are not coerced. |
77
+ | `integer` | Integer primitive numbers | `NaN` and infinities fail. |
78
+ | `safeInteger` | Safe integer primitive numbers | Uses `Number.isSafeInteger`. |
79
+ | `NaN`, `nan` | Exactly numeric `NaN` | No string coercion. |
80
+ | `infinity`, `positiveInfinity` | Exactly positive `Infinity` | `infinity` keeps its positive-only compatibility meaning. |
81
+ | `negativeInfinity` | Exactly negative `Infinity` | Positive Infinity fails. |
82
+ | `infinite` | Either infinity | Finite numbers fail. |
83
+ | `negativeZero` | Exactly `-0` | Uses `Object.is`; `+0` fails. |
84
+ | `string` | Primitive strings | Boxed String objects fail. |
85
+ | `symbol` | Primitive symbols | Boxed Symbol objects fail. |
86
+ | `primitive` | `null` or any non-object, non-function value | Boxed primitives and functions fail. |
87
+ | `globalThis` | Exactly the current `globalThis` | Host aliases are not substituted. |
88
+ | `atomics`, `json`, `math`, `reflect` | Their exact global namespaces | Identity checks, not lookalike objects. |
89
+ | `rawJSON` | Values created by `JSON.rawJSON` | Guarded until `JSON.isRawJSON` exists. |
90
+
91
+ ### Objects and collections
92
+
93
+ | Methods | What passes | Important detail |
94
+ |---|---|---|
95
+ | `array` | Arrays from any realm | Uses `Array.isArray`. |
96
+ | `date` | Date objects from any realm | Invalid dates still pass. |
97
+ | `validDate` | Dates with a valid time value | Invalid Date fails. |
98
+ | `map`, `weakMap`, `set`, `weakSet` | Their matching collection brands | Native internal-slot probes work across realms. |
99
+ | `object` | Values where `typeof value === 'object'` | Compatibility behavior: `null` passes. |
100
+ | `nonNullObject` | Non-null object values | Use this for the ordinary meaning of object. |
101
+ | `plainObject` | Plain records, including null-prototype records | Arrays and class instances fail. |
102
+ | `nullPrototypeObject` | Objects with an exact `null` prototype | Ordinary object literals fail. |
103
+ | `argumentsObject` | Function `arguments` objects | Arrays fail. |
104
+ | `promise` | Promise instances in the current realm | Structural thenables have a separate check. |
105
+ | `thenable` | Objects or functions with a callable `then` | It never invokes `then`. |
106
+ | `regExp`, `regexp` | RegExp objects from any realm | `regexp` is the lowercase-p alias. |
107
+
108
+ ### Boxed primitives
109
+
110
+ | Method | What passes | Primitive near miss |
111
+ |---|---|---|
112
+ | `boxedPrimitive` | Any boxed Boolean, Number, BigInt, String, or Symbol | `1` |
113
+ | `booleanObject` | `Object(true)` | `true` |
114
+ | `numberObject` | `Object(1)` | `1` |
115
+ | `bigIntObject` | `Object(1n)` | `1n` |
116
+ | `stringObject` | `Object('type')` | `'type'` |
117
+ | `symbolObject` | `Object(Symbol('type'))` | `Symbol('type')` |
118
+
119
+ ### Functions and protocols
120
+
121
+ | Methods | What passes | Important detail |
122
+ |---|---|---|
123
+ | `function`, `callable` | Anything whose `typeof` is `function` | Includes async and generator functions. |
124
+ | `asyncFunction` | Async functions | Ordinary functions fail. |
125
+ | `generatorFunction` | Generator functions | Generator objects use `generator`. |
126
+ | `asyncGeneratorFunction` | Async generator functions | Objects use `asyncGenerator`. |
127
+ | `generator`, `asyncGenerator` | Their matching generator iterator objects | Function values fail. |
128
+ | `iterator` | Values with a callable `next` | Structural by design. |
129
+ | `asyncIterator` | Values with `next` and `Symbol.asyncIterator` | Structural by design. |
130
+ | `iterable`, `asyncIterable` | Values with the matching symbol method | Null-safe and getter-safe. |
131
+
132
+ ### Errors
133
+
134
+ | Methods | What passes | Runtime |
135
+ |---|---|---|
136
+ | `error` | `Error` instances | Shared |
137
+ | `aggregateError` | `AggregateError` instances | Guarded standard |
138
+ | `evalError` | `EvalError` instances | Shared |
139
+ | `rangeError` | `RangeError` instances | Shared |
140
+ | `referenceError` | `ReferenceError` instances | Shared |
141
+ | `syntaxError` | `SyntaxError` instances | Shared |
142
+ | `typeError` | `TypeError` instances | Shared |
143
+ | `URIError`, `uriError` | `URIError` instances | Shared; lowercase alias included |
144
+ | `suppressedError` | `SuppressedError` instances | Guarded standard |
145
+
146
+ ### Typed arrays and buffers
147
+
148
+ | Methods | What passes | Important detail |
149
+ |---|---|---|
150
+ | `typedArray` | Any typed array | Excludes `DataView`. |
151
+ | `arrayBufferView` | Any typed array or `DataView` | Uses `ArrayBuffer.isView`. |
152
+ | `bigInt64Array`, `bigUint64Array` | Matching BigInt typed arrays | Exact brand. |
153
+ | `float16Array` | `Float16Array` | Guarded on older runtimes. |
154
+ | `float32Array`, `float64Array` | Matching float typed arrays | Exact brand. |
155
+ | `int8Array`, `int16Array`, `int32Array` | Matching signed integer typed arrays | Exact brand. |
156
+ | `uint8Array`, `uint8ClampedArray`, `uint16Array`, `uint32Array` | Matching unsigned integer typed arrays | A Node Buffer is also a Uint8Array. |
157
+ | `arrayBuffer` | `ArrayBuffer` | Cross-realm native slot probe. |
158
+ | `sharedArrayBuffer` | `SharedArrayBuffer` | Guarded where shared memory is absent. |
159
+ | `anyArrayBuffer` | Either buffer kind | Views fail. |
160
+ | `dataView` | `DataView` | Typed arrays fail. |
161
+ | `resizableArrayBuffer` | Resizable ArrayBuffer values | Fixed buffers fail. |
162
+ | `growableSharedArrayBuffer` | Growable SharedArrayBuffer values | Fixed shared buffers fail. |
163
+ | `detachedArrayBuffer` | Transferred/detached ArrayBuffer values | The fallback probe is non-destructive. |
164
+
165
+ ### Intl
166
+
167
+ | Methods | What passes | Availability |
168
+ |---|---|---|
169
+ | `intlDateTimeFormat` | `Intl.DateTimeFormat` | Shared |
170
+ | `intlCollator` | `Intl.Collator` | Shared |
171
+ | `intlDisplayNames` | `Intl.DisplayNames` | Guarded |
172
+ | `intlListFormat` | `Intl.ListFormat` | Guarded |
173
+ | `intlLocale` | `Intl.Locale` | Shared |
174
+ | `intlNumberFormat` | `Intl.NumberFormat` | Shared |
175
+ | `intlPluralRules` | `Intl.PluralRules` | Shared |
176
+ | `intlRelativeTimeFormat` | `Intl.RelativeTimeFormat` | Guarded |
177
+ | `intlSegmenter` | `Intl.Segmenter` | Guarded |
178
+ | `intlSegments` | Values returned by `segmenter.segment()` | Guarded |
179
+ | `intlDurationFormat` | `Intl.DurationFormat` | Guarded |
180
+
181
+ ### Lifetime, resources, and Temporal
182
+
183
+ | Methods | What passes | Availability |
184
+ |---|---|---|
185
+ | `finalizationRegistry` | `FinalizationRegistry` objects | Guarded standard |
186
+ | `weakRef` | `WeakRef` objects | Guarded standard |
187
+ | `disposable` | Values with callable `Symbol.dispose` | Guarded structural protocol |
188
+ | `asyncDisposable` | Values with callable `Symbol.asyncDispose` | Guarded structural protocol |
189
+ | `disposableStack` | `DisposableStack` objects | Guarded standard |
190
+ | `asyncDisposableStack` | `AsyncDisposableStack` objects | Guarded standard |
191
+ | `temporalDuration` | `Temporal.Duration` | Guarded standard |
192
+ | `temporalInstant` | `Temporal.Instant` | Guarded standard |
193
+ | `temporalPlainDate` | `Temporal.PlainDate` | Guarded standard |
194
+ | `temporalPlainDateTime` | `Temporal.PlainDateTime` | Guarded standard |
195
+ | `temporalPlainMonthDay` | `Temporal.PlainMonthDay` | Guarded standard |
196
+ | `temporalPlainTime` | `Temporal.PlainTime` | Guarded standard |
197
+ | `temporalPlainYearMonth` | `Temporal.PlainYearMonth` | Guarded standard |
198
+ | `temporalZonedDateTime` | `Temporal.ZonedDateTime` | Guarded standard |
199
+
200
+ ### Shared Web APIs
201
+
202
+ These methods are present on every `Is` instance. The constructor or singleton is resolved through `globalThis` only when the method is called.
203
+
204
+ | Family | Methods | What passes |
205
+ |---|---|---|
206
+ | URL | `url`, `urlSearchParams`, `urlPattern` | Matching URL API objects |
207
+ | Text | `textEncoder`, `textDecoder`, `textEncoderStream`, `textDecoderStream` | Encoding API objects |
208
+ | Data | `domException`, `blob`, `file`, `formData`, `headers`, `request`, `response` | Matching Fetch/data objects |
209
+ | Cancellation | `abortController`, `abortSignal` | Matching cancellation objects |
210
+ | Events | `event`, `eventTarget`, `customEvent`, `messageEvent`, `closeEvent`, `errorEvent` | Matching event objects |
211
+ | Messaging | `broadcastChannel`, `messageChannel`, `messagePort`, `webSocket`, `eventSource` | Matching communication objects |
212
+ | Host values | `navigator`, `storage` | The current navigator or a Storage object |
213
+ | Readable streams | `readableStream`, `readableStreamDefaultReader`, `readableStreamBYOBReader`, `readableStreamDefaultController`, `readableByteStreamController`, `readableStreamBYOBRequest` | Matching Web Streams objects |
214
+ | Writable streams | `writableStream`, `writableStreamDefaultWriter`, `writableStreamDefaultController` | Matching Web Streams objects |
215
+ | Transform streams | `transformStream`, `transformStreamDefaultController` | Matching transform objects |
216
+ | Queuing | `byteLengthQueuingStrategy`, `countQueuingStrategy` | Matching strategy objects |
217
+ | Compression | `compressionStream`, `decompressionStream` | Matching compression objects |
218
+ | Crypto | `crypto`, `subtleCrypto`, `cryptoKey` | Current crypto services and keys |
219
+ | Performance | `performance`, `performanceEntry`, `performanceMark`, `performanceMeasure`, `performanceObserver`, `performanceObserverEntryList`, `performanceResourceTiming` | Matching performance objects |
220
+ | WebAssembly | `webAssemblyModule`, `webAssemblyInstance`, `webAssemblyMemory`, `webAssemblyTable`, `webAssemblyGlobal`, `webAssemblyTag`, `webAssemblyException`, `webAssemblyCompileError`, `webAssemblyLinkError`, `webAssemblyRuntimeError` | Matching WebAssembly objects and errors |
221
+
222
+ ## Core and extension methods
223
+
224
+ | Method | Result | Purpose |
225
+ |---|---|---|
226
+ | `throw(valueType,expectedType)` | `false` or throws | Central strict/non-strict failure behavior. |
227
+ | `check(value,pass,expectedType)` | `true`, `false`, or throws | Turn a predicate into strong-type behavior. |
228
+ | `typeCheck(value,type)` | `true`, `false`, or throws | Validate a `typeof` result. |
229
+ | `instanceCheck(value,constructor)` | `true`, `false`, or throws | Validate a custom class or realm-local constructor. |
230
+ | `symbolStringCheck(value,type)` | `true`, `false`, or throws | Validate an intrinsic object tag. |
231
+ | `compare(value,target,typeName)` | `true`, `false`, or throws | Compare exact identity with `Object.is`. |
232
+ | `globalInstanceCheck(value,type)` | `true`, `false`, or throws | Guard and check a named global constructor. |
233
+ | `nestedInstanceCheck(value,container,type)` | `true`, `false`, or throws | Guard and check a constructor inside a namespace. |
234
+ | `globalValueCheck(value,type)` | `true`, `false`, or throws | Check exact identity with a named global value. |
235
+ | `nestedValueCheck(value,container,type)` | `true`, `false`, or throws | Check exact identity with a nested value. |
236
+ | `union(value,types)` | `true`, `false`, or throws | Accept one named validator from a pipe string or array. |
237
+
238
+ ## Unions
239
+
240
+ ```js
241
+ is.union('type','string|number');
242
+ is.union(42,['string','number']);
243
+ ```
244
+
245
+ | Behavior | Result |
246
+ |---|---|
247
+ | Whitespace around pipe names | Trimmed |
248
+ | Matching validator | Called once |
249
+ | Custom subclass validator | Supported |
250
+ | Node adapter validator | Supported through `IsNode` |
251
+ | Inherited `Object` method such as `toString` | Rejected |
252
+ | Multi-argument helper method | Rejected |
253
+
254
+ ## Node adapter
255
+
256
+ ```js
257
+ import IsNode from 'strong-type/node';
258
+
259
+ const is=new IsNode;
260
+
261
+ is.buffer(Buffer.from('type'));
262
+ is.proxy(new Proxy({},{}));
263
+ is.nodeReadable(process.stdin);
264
+ ```
265
+
266
+ The adapter imports Node built-ins only. It never enters the default browser-safe import graph.
267
+
268
+ | Method | What passes | Important detail |
269
+ |---|---|---|
270
+ | `buffer` | Node Buffer values | A plain Uint8Array fails. |
271
+ | `nodeStream` | Any classic Node Stream | Web Streams use the shared validators. |
272
+ | `nodeReadable` | Node Readable streams | Duplex and Transform inherit Readable. |
273
+ | `nodeWritable` | Node Writable streams | Duplex and Transform inherit Writable. |
274
+ | `nodeDuplex` | Node Duplex streams | Plain readable or writable streams fail. |
275
+ | `nodeTransform` | Node Transform streams | PassThrough inherits Transform. |
276
+ | `nodePassThrough` | Node PassThrough streams | Other transforms fail. |
277
+ | `eventEmitter` | Node EventEmitter instances | DOM EventTarget fails. |
278
+ | `timeout` | Handles returned by `setTimeout` | Constructor is discovered lazily. |
279
+ | `immediate` | Handles returned by `setImmediate` | Constructor is discovered lazily. |
280
+ | `keyObject` | Node crypto KeyObject values | Web CryptoKey uses `cryptoKey`. |
281
+ | `x509Certificate` | Node X509Certificate objects | Requires a parseable certificate. |
282
+ | `proxy` | Proxy values | Exact `util.types.isProxy` check. |
283
+ | `moduleNamespaceObject` | Results from `import()` | Exact `util.types` check. |
284
+ | `external` | Native external values | Usually supplied by a native addon. |
285
+ | `nativeError` | Native Error values | Includes cross-realm errors. |
286
+ | `mapIterator` | Native Map iterators | Set iterators fail. |
287
+ | `setIterator` | Native Set iterators | Map iterators fail. |
288
+
289
+ ## Direct browser use without bundling
290
+
291
+ Use a native import map. Serve the files over HTTP; browsers do not load ES modules reliably from `file:` URLs.
292
+
293
+ ```html
294
+ <script type="importmap">
295
+ {
296
+ "imports": {
297
+ "strong-type": "./node_modules/strong-type/index.js"
298
+ }
299
+ }
300
+ </script>
301
+
302
+ <script type="module">
303
+ import Is from 'strong-type';
304
+
305
+ const is=new Is;
306
+ console.log(is.url(new URL('https://example.com')));
307
+ </script>
308
+ ```
309
+
310
+ You can also import the source directly in a native module script:
311
+
312
+ ```html
313
+ <script type="module">
314
+ import Is from 'https://riaevangelist.github.io/strong-type/index.js';
315
+
316
+ const is=new Is;
317
+ console.log(is.string('native ESM'));
318
+ </script>
319
+ ```
320
+
321
+ Use your own hosted path instead of the project Pages URL when you want to serve the file yourself. No bundle, transform, runtime shim, or host switch is involved.
322
+
323
+ ## Extend strong-type
324
+
325
+ ```js
326
+ import Is from 'strong-type';
327
+
328
+ class Pizza{}
329
+
330
+ class MyIs extends Is{
331
+ pizza(value){
332
+ return this.instanceCheck(value,Pizza);
333
+ }
334
+ }
335
+
336
+ const is=new MyIs;
337
+
338
+ is.pizza(new Pizza);
339
+ is.union(new Pizza,'pizza|string');
340
+ ```
341
+
342
+ | Extension helper | Use |
343
+ |---|---|
344
+ | `this.typeCheck(value,'string')` | Custom `typeof` validator |
345
+ | `this.instanceCheck(value,Pizza)` | Custom class validator |
346
+ | `this.check(value,predicate,'description')` | Any custom predicate with standard strict behavior |
347
+ | `this.throw(actual,expected)` | Explicit failure path |
348
+
349
+ ## Corrected exact behavior
350
+
351
+ Version 2 removes several coercive edge cases while retaining the original method names.
352
+
353
+ | Check | Old behavior | Current behavior |
354
+ |---|---|---|
355
+ | `null(undefined)` | Passed through loose equality | Fails |
356
+ | `infinity('Infinity')` | Passed through loose equality | Fails |
357
+ | `finite('1')` | Passed through global coercive `isFinite` | Fails |
358
+ | `finite(null)` | Passed through coercion | Fails |
359
+ | `finite(1n)` | Could leak a native error | Returns false or throws strong-type `TypeError` |
360
+ | `union(value,' string \| number ')` | Did not trim names | Works |
361
+ | `union(value,'toString')` | Could call an inherited method | Rejected |
362
+ | Subclass validators in `union` | Lost by constructing base `Is` | Preserved |
363
+
364
+ ## Tests and coverage
365
+
366
+ The main suite runs with Node's built-in `node:test`. Node 12.21 uses the same registered cases through the small compatibility adapter because `node:test` did not exist in that release. There is no third-party test runner.
367
+
368
+ | Test suite | Result on Node 24.18.0 | Covers |
369
+ |---|---:|---|
370
+ | Core validators | 533 passed · 13 guarded skips | 183 isomorphic validators, strict/non-strict behavior, hostile values, unions, and native brands |
371
+ | Node adapter | 54 passed | 18 Node validators, cross-realm behavior, package entry points, streams, timers, crypto, and proxies |
372
+ | Documentation | 10 passed | Complete method tables, local assets, zero dependencies, package paths, and bundle-free playground wiring |
373
+ | **Total** | **597 passed · 0 failed · 13 skipped** | Runtime and documentation contract |
374
+
375
+ A guarded skip means the runtime does not expose that host API. It is a capability result, not an ignored failure.
376
+
377
+ Coverage uses Node 24's built-in V8 reporter and includes only the two shipped runtime sources.
378
+
379
+ | Source | Lines | Branches | Functions |
380
+ |---|---:|---:|---:|
381
+ | `index.js` | 95.74% · 1102/1151 | 91.37% · 286/313 | 99.57% · 229/230 |
382
+ | `node.js` | 96.80% · 121/125 | 93.75% · 30/32 | 91.30% · 21/23 |
383
+ | **Total** | **95.85% · 1223/1276** | **91.59% · 316/345** | **98.81% · 250/253** |
384
+
385
+ | Metric | Current | CI floor |
386
+ |---|---:|---:|
387
+ | Lines | 95.85% | 95% |
388
+ | Branches | 91.59% | 90% |
389
+ | Functions | 98.81% | 95% |
390
+
391
+ Node's native reporter does not publish a statement metric. Test and documentation files are excluded from the percentages. See the [full test, coverage, and CI explanation](https://riaevangelist.github.io/strong-type/testing.html).
392
+
393
+ ## Commands
394
+
395
+ | Command | What it does | Third-party tooling |
396
+ |---|---|---|
397
+ | `npm test` | Runs core, Node adapter, and documentation checks through `node:test` | None |
398
+ | `npm run test:core` | Runs portable validator regression tests through `node:test` | None |
399
+ | `npm run test:node` | Runs Node adapter and cross-realm tests through `node:test` | None |
400
+ | `npm run test:docs` | Checks reference completeness and site integrity through `node:test` | None |
401
+ | `npm run test:legacy` | Runs the same registered cases on Node 12.21 | None |
402
+ | `npm run coverage` | Runs native V8 coverage and enforces the 95/90/95 release floors | None |
403
+ | `npm start` | Serves the docs and playground at `http://localhost:8000/` | None |
404
+ | `npm run nodeExample` | Runs the Node example | None |
405
+
406
+ ## License
407
+
408
+ [MIT](./licence) · Roshi _ _