tjs-lang 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/CONTEXT.md +594 -0
  2. package/LICENSE +190 -0
  3. package/README.md +220 -0
  4. package/bin/benchmarks.ts +351 -0
  5. package/bin/dev.ts +205 -0
  6. package/bin/docs.js +170 -0
  7. package/bin/install-cursor.sh +71 -0
  8. package/bin/install-vscode.sh +71 -0
  9. package/bin/select-local-models.d.ts +1 -0
  10. package/bin/select-local-models.js +28 -0
  11. package/bin/select-local-models.ts +31 -0
  12. package/demo/autocomplete.test.ts +232 -0
  13. package/demo/docs.json +186 -0
  14. package/demo/examples.test.ts +598 -0
  15. package/demo/index.html +91 -0
  16. package/demo/src/autocomplete.ts +482 -0
  17. package/demo/src/capabilities.ts +859 -0
  18. package/demo/src/demo-nav.ts +2097 -0
  19. package/demo/src/examples.test.ts +161 -0
  20. package/demo/src/examples.ts +476 -0
  21. package/demo/src/imports.test.ts +196 -0
  22. package/demo/src/imports.ts +421 -0
  23. package/demo/src/index.ts +639 -0
  24. package/demo/src/module-store.ts +635 -0
  25. package/demo/src/module-sw.ts +132 -0
  26. package/demo/src/playground.ts +949 -0
  27. package/demo/src/service-host.ts +389 -0
  28. package/demo/src/settings.ts +440 -0
  29. package/demo/src/style.ts +280 -0
  30. package/demo/src/tjs-playground.ts +1605 -0
  31. package/demo/src/ts-examples.ts +478 -0
  32. package/demo/src/ts-playground.ts +1092 -0
  33. package/demo/static/favicon.svg +30 -0
  34. package/demo/static/photo-1.jpg +0 -0
  35. package/demo/static/photo-2.jpg +0 -0
  36. package/demo/static/texts/ai-history.txt +9 -0
  37. package/demo/static/texts/coffee-origins.txt +9 -0
  38. package/demo/static/texts/renewable-energy.txt +9 -0
  39. package/dist/index.js +256 -0
  40. package/dist/index.js.map +37 -0
  41. package/dist/tjs-batteries.js +4 -0
  42. package/dist/tjs-batteries.js.map +15 -0
  43. package/dist/tjs-full.js +256 -0
  44. package/dist/tjs-full.js.map +37 -0
  45. package/dist/tjs-transpiler.js +220 -0
  46. package/dist/tjs-transpiler.js.map +21 -0
  47. package/dist/tjs-vm.js +4 -0
  48. package/dist/tjs-vm.js.map +14 -0
  49. package/docs/CNAME +1 -0
  50. package/docs/favicon.svg +30 -0
  51. package/docs/index.html +91 -0
  52. package/docs/index.js +10468 -0
  53. package/docs/index.js.map +92 -0
  54. package/docs/photo-1.jpg +0 -0
  55. package/docs/photo-1.webp +0 -0
  56. package/docs/photo-2.jpg +0 -0
  57. package/docs/photo-2.webp +0 -0
  58. package/docs/texts/ai-history.txt +9 -0
  59. package/docs/texts/coffee-origins.txt +9 -0
  60. package/docs/texts/renewable-energy.txt +9 -0
  61. package/docs/tjs-lang.svg +31 -0
  62. package/docs/tosijs-agent.svg +31 -0
  63. package/editors/README.md +325 -0
  64. package/editors/ace/ajs-mode.js +328 -0
  65. package/editors/ace/ajs-mode.ts +269 -0
  66. package/editors/ajs-syntax.ts +212 -0
  67. package/editors/build-grammars.ts +510 -0
  68. package/editors/codemirror/ajs-language.js +287 -0
  69. package/editors/codemirror/ajs-language.ts +1447 -0
  70. package/editors/codemirror/autocomplete.test.ts +531 -0
  71. package/editors/codemirror/component.ts +404 -0
  72. package/editors/monaco/ajs-monarch.js +243 -0
  73. package/editors/monaco/ajs-monarch.ts +225 -0
  74. package/editors/tjs-syntax.ts +115 -0
  75. package/editors/vscode/language-configuration.json +37 -0
  76. package/editors/vscode/package.json +65 -0
  77. package/editors/vscode/syntaxes/ajs-injection.tmLanguage.json +107 -0
  78. package/editors/vscode/syntaxes/ajs.tmLanguage.json +252 -0
  79. package/editors/vscode/syntaxes/tjs.tmLanguage.json +333 -0
  80. package/package.json +83 -0
  81. package/src/cli/commands/check.ts +41 -0
  82. package/src/cli/commands/convert.ts +133 -0
  83. package/src/cli/commands/emit.ts +260 -0
  84. package/src/cli/commands/run.ts +68 -0
  85. package/src/cli/commands/test.ts +194 -0
  86. package/src/cli/commands/types.ts +20 -0
  87. package/src/cli/create-app.ts +236 -0
  88. package/src/cli/playground.ts +250 -0
  89. package/src/cli/tjs.ts +166 -0
  90. package/src/cli/tjsx.ts +160 -0
  91. package/tjs-lang.svg +31 -0
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Module Cache Service Worker
3
+ *
4
+ * Caches fetched ESM modules from CDN for offline/fast access.
5
+ * Uses Cache API for persistence across page loads.
6
+ */
7
+
8
+ const CACHE_NAME = 'tjs-modules-v1'
9
+ const CDN_HOSTS = ['esm.sh', 'cdn.skypack.dev', 'unpkg.com', 'cdn.jsdelivr.net']
10
+
11
+ // Install - open cache
12
+ self.addEventListener('install', (event: ExtendableEvent) => {
13
+ event.waitUntil(
14
+ caches.open(CACHE_NAME).then(() => {
15
+ console.log('[SW] Module cache initialized')
16
+ })
17
+ )
18
+ // Activate immediately
19
+ ;(self as any).skipWaiting()
20
+ })
21
+
22
+ // Activate - clean old caches
23
+ self.addEventListener('activate', (event: ExtendableEvent) => {
24
+ event.waitUntil(
25
+ caches.keys().then((cacheNames) => {
26
+ return Promise.all(
27
+ cacheNames
28
+ .filter(
29
+ (name) => name.startsWith('tjs-modules-') && name !== CACHE_NAME
30
+ )
31
+ .map((name) => caches.delete(name))
32
+ )
33
+ })
34
+ )
35
+ // Take control of all pages immediately
36
+ ;(self as any).clients.claim()
37
+ })
38
+
39
+ // Fetch - intercept CDN requests
40
+ self.addEventListener('fetch', (event: FetchEvent) => {
41
+ const url = new URL(event.request.url)
42
+
43
+ // Only cache CDN module requests
44
+ if (!CDN_HOSTS.some((host) => url.hostname.includes(host))) {
45
+ return
46
+ }
47
+
48
+ event.respondWith(
49
+ caches.open(CACHE_NAME).then(async (cache) => {
50
+ // Check cache first
51
+ const cached = await cache.match(event.request)
52
+ if (cached) {
53
+ console.log('[SW] Cache hit:', url.pathname)
54
+ return cached
55
+ }
56
+
57
+ // Fetch from network
58
+ console.log('[SW] Fetching:', url.href)
59
+ try {
60
+ const response = await fetch(event.request)
61
+
62
+ // Only cache successful responses
63
+ if (response.ok) {
64
+ // Clone response since it can only be consumed once
65
+ cache.put(event.request, response.clone())
66
+ }
67
+
68
+ return response
69
+ } catch (error) {
70
+ console.error('[SW] Fetch failed:', url.href, error)
71
+ throw error
72
+ }
73
+ })
74
+ )
75
+ })
76
+
77
+ // Message handler for cache management
78
+ self.addEventListener('message', (event: MessageEvent) => {
79
+ const { type, payload } = event.data || {}
80
+
81
+ switch (type) {
82
+ case 'CLEAR_CACHE':
83
+ caches.delete(CACHE_NAME).then(() => {
84
+ caches.open(CACHE_NAME)
85
+ event.ports[0]?.postMessage({ success: true })
86
+ })
87
+ break
88
+
89
+ case 'GET_CACHE_STATS':
90
+ caches.open(CACHE_NAME).then(async (cache) => {
91
+ const keys = await cache.keys()
92
+ event.ports[0]?.postMessage({
93
+ size: keys.length,
94
+ entries: keys.map((req) => req.url),
95
+ })
96
+ })
97
+ break
98
+
99
+ case 'PREFETCH':
100
+ // Prefetch a list of modules
101
+ if (Array.isArray(payload?.urls)) {
102
+ caches.open(CACHE_NAME).then(async (cache) => {
103
+ const results = await Promise.allSettled(
104
+ payload.urls.map(async (url: string) => {
105
+ const cached = await cache.match(url)
106
+ if (!cached) {
107
+ const response = await fetch(url)
108
+ if (response.ok) {
109
+ await cache.put(url, response)
110
+ }
111
+ }
112
+ })
113
+ )
114
+ event.ports[0]?.postMessage({
115
+ success: results.filter((r) => r.status === 'fulfilled').length,
116
+ failed: results.filter((r) => r.status === 'rejected').length,
117
+ })
118
+ })
119
+ }
120
+ break
121
+ }
122
+ })
123
+
124
+ // TypeScript declarations for service worker globals
125
+ declare const self: ServiceWorkerGlobalScope
126
+ interface ExtendableEvent extends Event {
127
+ waitUntil(promise: Promise<any>): void
128
+ }
129
+ interface FetchEvent extends Event {
130
+ request: Request
131
+ respondWith(response: Promise<Response> | Response): void
132
+ }