ToCode
Kanalga Telegramโda oโtish
ืืืคืื ืงืฆืจืื ืืืชืื ืชืื ืืืช ืื ืื ืคืจืง
Ko'proq ko'rsatish1 418
Obunachilar
-224 soatlar
-37 kunlar
-630 kunlar
Postlar arxiv
1 418
force_path_style: true, # Enable 'force_path_style' => true, if bucket name is non DNS compliant
)
bucket_name = "test-bucket"
wrapper = BucketCreateWrapper.new(Aws::S3::Bucket.new(bucket_name))
return unless wrapper.create?(region)
puts "Created bucket #{wrapper.bucket.name}."
puts "Your bucket's region is: #{wrapper.location}"
end
run_demo if $PROGRAM_NAME == __FILE__
ืกืงืจืืคื ืฉื ื ืืืชื ืงืืืฅ ืืืืชื bucket:
require 'aws-sdk-s3'
region = "us-east-2"
Aws.config.update(
endpoint: 'http://s3.localhost.localstack.cloud:4566', # update with localstack endpoint
region: region,
force_path_style: true, # Enable 'force_path_style' => true, if bucket name is non DNS compliant
)
s3_client = Aws::S3::Client.new
bucket_name = 'test-bucket'
object_key = 'demo.txt'
file_content = "This is a demo file uploaded via Ruby to my LocalStack S3.\n"
begin
response = s3_client.put_object(
bucket: bucket_name,
key: object_key,
body: file_content
)
puts "File '#{object_key}' uploaded successfully to '#{bucket_name}'!"
rescue Aws::S3::Errors::ServiceError => e
puts "Error uploading file: #{e.message}"
end
ืืกืงืจืืคื ืฉืืืฉื ืขืืืื ืืจืืื ืงืืจื ืืช ืืงืืืฅ ืืืืคืืก ืืช ืชืืื ื:
require 'aws-sdk-s3'
Aws.config.update(
endpoint: 'http://s3.localhost.localstack.cloud:4566', # update with localstack endpoint
region: 'us-east-2',
force_path_style: true # Enable 'force_path_style' => true, if bucket name is non DNS complian
)
s3_client = Aws::S3::Client.new
bucket_name = 'test-bucket'
object_key = 'demo.txt'
begin
response = s3_client.get_object(bucket: bucket_name, key: object_key)
file_contents = response.body.read
puts "Contents of '#{object_key}' in bucket '#{bucket_name}':\n\n"
puts file_contents
rescue Aws::S3::Errors::NoSuchKey => e
puts "File '#{object_key}' not found: #{e.message}"
rescue Aws::S3::Errors::ServiceError => e
puts "Error retrieving file: #{e.message}"
end
ืืกืืื ืืคืฉืจ ืืืืืง ืืช ืืืืงื ืขื ืืกืงืจืืคื ืคืืืชืื ืฉืืชืงื ื ืงืืื ืืืคืขืืช:
$ awslocal s3 rb s3://test-bucket --force
ืกื ืืื ืืคืืชืื ืขื local stack ืืืคืฉืจ ืขืืืื ืืืืชื ืืืฉืง ืืื AWS ืืื ืืงืืืืช ืืืืจื. ืืจืืจ ืฉืืกืืื ืืคืืชืื ืฆืจืื ืืืืืง ืืื ืขื AWS ืืืื ืืืื ืืขืืืช ืืขืื ืฆืจืื ืืืืจ ืขื ืืจืฉืืืช ืืืื ื ืืื. ืืื ืืื ืฉืจืืฆื ืืืชืืื ืคืืชืื ืฉืืืืข ื AWS ืืื ืืื ืชืืื ืจืง ืืจืืืช ืฉืืืจืื ืขืืืืื ืืฆืื ื ืขื ืืืืฉื ืืืงืื ืกืืืง ืืืื ืืชืช ืคืืชืจืื ืืฆืืื ืืืืืจ.1 418
ืฆืขืืื ืจืืฉืื ืื ืขื localstack
ืืืงืื ืกืืืง https://github.com/localstack/localstack ืืื ืคืจืืืงื ืฉืืืจืชื ืืคืขืืช ืืืจืกื ืืงืืืืช ืฉื AWS ืืฆืืื ืขื ืืืืฉื ืืชืื ืงืื ืืืื ืจ. ืื ืืืกืื ืขืฉืจืืช ืกืจืืืกืื ืฉื AWS ืืืฉืืื ืืืื ืื, ืืืฉ ืื ืืฉืืื ืืชืฉืืื ืฉืืืื ืืืชืจ ืืืืืืช ืืืืง ืืืกืจืืืกืื ืืืืชืจ ืกืจืืืกืื. ืื ืฉืืืืชื ืืืืืื ืืขืืืื ืขื local stack ืื ืฉืืงืื ืื ืฆืจืื ืืืฉืชื ืืช - ืืืืฉืง ืฉืืื ืืื ืืืืฉืง ืฉื AWS ืืืื ืคืงืืืช ืงืื ืคืืืืจืฆืื ืืืช ืฉืืืืืจื ืืช ื endpoint ืฉืืื ืืืงืื ืฉื AWS.
ืืืื ื ืจืื ืืื ืืืชืงืื ืืืขืืื ืขื ืกืจืืืก S3 ืฉื ืืืงืื ืกืืืง ืืจื ืฉืืืฉื ืกืงืจืืคืืื.
ืืชืงื ืช ืืืืื
ืืช ืืืงืื ืกืืืง ืืคืฉืจ ืืืชืงืื ืืืฃ ืืืชืงื ื ืฉืืื ืืื:
https://docs.localstack.cloud/getting-started/installation/
ืืืจื ืืืชืงื ื ืืืืชื ืฆืจืื ืืืืกืืฃ ืืช ืืชืืงืื ืฉืืื ืืชืืงืืืช ืืงืืฆืื ืฉื Docker Desktop ืืชืื ืืืืืจืืช ืฉื ืืืงืจ, ืืื ืืืชืงืื ืกืงืจืืคื ืฉืขืืืฃ ืืช aws ืืืืฆืขืืช ืืคืงืืื:
pip install awscli-local
ืืคืขืืชื ืืช local stack ืขื:
$ localstack start -d
ืืืืจื ืื ืืจืฆืชื ืืช ืคืงืืืช ืืกืืืืก ืืื ืืจืืืช ืืช ืืกืจืืืกืื ืฉืงืืืืชื:
$ localstack status services
โโโโโโโโโโโโโโโโโโโโโโโโโโโโณโโโโโโโโโโโโโโ
โ Service โ Status โ
โกโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฉ
โ acm โ โ available โ
โ apigateway โ โ available โ
โ cloudformation โ โ available โ
โ cloudwatch โ โ available โ
โ config โ โ available โ
โ dynamodb โ โ available โ
โ dynamodbstreams โ โ available โ
โ ec2 โ โ available โ
โ es โ โ available โ
โ events โ โ available โ
โ firehose โ โ available โ
โ iam โ โ available โ
โ kinesis โ โ available โ
โ kms โ โ available โ
โ lambda โ โ available โ
โ logs โ โ available โ
โ opensearch โ โ available โ
โ redshift โ โ available โ
โ resource-groups โ โ available โ
โ resourcegroupstaggingapi โ โ available โ
โ route53 โ โ available โ
โ route53resolver โ โ available โ
โ s3 โ โ running โ
โ s3control โ โ available โ
โ scheduler โ โ available โ
โ secretsmanager โ โ available โ
โ ses โ โ available โ
โ sns โ โ available โ
โ sqs โ โ available โ
โ ssm โ โ available โ
โ stepfunctions โ โ available โ
โ sts โ โ available โ
โ support โ โ available โ
โ swf โ โ available โ
โ transcribe โ โ available โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโ
ืขืืืื ืขื S3
ื ืืฉืื ืืืื ืกืงืจืืคืืื ื Ruby ืฉืขืืืืื ืขื S3 ืืฉืืื ืืืืืื. ืืืืื ืืฉืืจื ืืื ืืฉืืื ืืื:
Aws.config.update(
endpoint: 'http://s3.localhost.localstack.cloud:4566'
region: 'us-east-2',
force_path_style: true
)
ืืกืงืจืืคื ืืจืืฉืื ืืืฆืจ bucket ืืืฉ ืขื s3 ืฉืจืฅ ืขื local stack:
require "aws-sdk-s3"
class BucketCreateWrapper
attr_reader :bucket
def initialize(bucket)
@bucket = bucket
end
def create?(region)
@bucket.create(create_bucket_configuration: { location_constraint: region })
true
rescue Aws::Errors::ServiceError => e
puts "Couldn't create bucket. Here's why: #{e.message}"
false
end
def location
if @bucket.nil?
"None. You must create a bucket before you can get its location!"
else
@bucket.client.get_bucket_location(bucket: @bucket.name).location_constraint
end
rescue Aws::Errors::ServiceError => e
"Couldn't get the location of #{@bucket.name}. Here's why: #{e.message}"
end
end
def run_demo
region = "us-east-2"
Aws.config.update(
endpoint: 'http://s3.localhost.localstack.cloud:4566', # update with localstack endpoint
region: region,1 418
ืงืฆืช ืงืฉื ืืืชืืฆื ืืืชืจ ืฉืืื, ืืื ืืชืืชืืช ืืขืืื ืืฉ ืืกืคืจ ืืื ืงืื ืฉืืืืฉืืื ืืืืืืื ืฉืืื ืืืื ืืืฃ Trending Vals. ืชืืืื ืืืฆืื ืฉื ืืื ืกืืฃ ืกืงืจืืคืืื ืฉืื ืฉืื ืืืจืื ืืชืื ืืชืืืื ืืฉืื ืืืชื ืืขืืืื ืฉืืื. ืืฆื ืืืื ืืืขืื ืืฉ ืืืืงืื ืฉื ืืืืืืช ืืืืืช ืฉืืคืชื ืชืืืช ืืืคืืฉ ืื ืืชื ืจืืฆืื ืืืคืฉ ืกืงืจืืคืืื ืืคื ืืงืกื.
ืื ืืกืฃ ืืกืงืจืืคืืื ืืงืืืื ืืืฉื ืืืกืคืจ ืืฉืืืื ืขื val.town ืฉืืขืืจื ืืื ืืืชืื ืืืจืื ืฉืืืืฉืืื: ืื ืืืืขืื ืืฉืืื ืืืืืื, ืืฉืืืจ ืืืืข ืืืกืืก ื ืชืื ืื, ืืฉืืืจ ืงืืฆืื ืืงืืืืช ืืืื ืฉืืืจ ืกืืคืจืชื ืืชืงืฉืจ ืขื ChatGPT.
ืืืืืื ืฉืื ืื ืืกืคืืง ืืฉ ืืื ืกืืื AI ืฉืืืชื ืืช ืืกืงืจืืคืืื ืืืจืืฅ ืืืชื ืื ืฉืืื ื ืฉืืจ ืจืง ืืืืื ืืช ืืจืขืืื.
ื .ื. ืืขืืืชื ืืืืืจื ืืช ืืืื ืชืจืืื ืฉืชืืืจืชื ืืื. ืงืืจืืื
@SpeakEnglishToMe_bot ืืืชื ืืืืื ืื ืืฉืืื ืืืื ืืืืื ืืื ืืขื ื ืืชืจืืื. ืื ืื ืฉืืืชืจ ืืขื ืืื, ืงืื ืืช ืืชืื ืืช ืืืื, ืชืขืฉื fork ื val town ืืชืขืื ืืืืื ืืฉืืื.1 418
ืืื ืืืื ืืื ืืคืจืืืงื ืืื ืืืืืง ืฉืืชื ืื ืืืืจืื
ืืชืืื ืคืจืกืืชื ืคื ืกืงืจืืคื ืฉืืชืืชื ืฉืืืคืฉ ืืืืข ืขื ืคืืืงืกืืื ื val.town. ืื ืืืจืชื ืืช val.town ืืขืืงืจ ืืืืืช ืืกืืืื ืขื ืืืจืื ืฉืืื ืืงืฆืช ืืืจืชื ืฉืื ืืชืจ ืฉืืชืืฃ ืงืื ืืื ืงืืืคื ืจืง ืืฆื ืฉืจืช, ืืื ืืืฉืืงืื ืืืชื ืืืืื ืืืืจืื ืื ืืฉืืืจื ืืืชื ืืคื ืคืขืืจ. ืืื ืืืื ืืื ืืคืจืืืงื ืืื ืืืืืง ืฉืืชื ืื ืืืืจืื, ืืื ืกื ืืืกืืืจ ืืื:
ืกืงืจืืคืืื ืคืฉืืืื ื val town
ืืื ืืืื ืืืคืฉืจ ืืื ืืืชืื ืกืงืจืืคืืื ืืืื ืืืื ืงืฆืจืื (ืกืงืจืืคื ืฉื ืคืื ืงืฆืื ืืืืืช ืืืื ืืื). ืืช ืืกืงืจืืคืืื ืืืื ืืคืฉืจ ืืืจืืฅ ืืื ืืช ืื ืืชืื ืกืงืจืืคืืื ืืืจืื, ืื ืฉื ืืชื ืื ื ืืืจืฉ ืืฉืืงืื ืืื ืืืช ืืืืืื ืืืื. ืื ื ืกืงืจืืคื ืคืฉืื ืฉืืชืืชื ืฉืืชืจืื ืืงืกื ืืจื ChatGPT ืืื ืฉืคื ืืื ืืืืช:
import { OpenAI } from "https://esm.town/v/std/openai";
export default async function translateToEnglishWithOpenAI(text: string) {
const openai = new OpenAI();
const completion = await openai.chat.completions.create({
messages: [
{
role: "user",
content:
\Translate "ืฉืืื" to English. If the word the was already in English respond with its definition. Respond just with the translation or definition.\,
},
{ role: "assistant", content: \hello\ },
{
role: "user",
content:
\Translate "peace" to English. If the word the was already in English respond with its definition. Respond just with the translation or definition.\,
},
{
role: "assistant",
content:
\Peace is a stress-free state of security and calmness that comes when thereโs no fighting or war, everything coexisting in perfect harmony and freedom.\,
},
{
role: "user",
content:
\Translate "${text}" to English. If the word the was already in English respond with its definition. Respond just with the translation or definition.\,
},
],
model: "gpt-4",
});
return completion.choices[0].message.content || "Translation Error";
}
ืืื ืชืชืืืจื ืืืื ืืืื (ืื ืืืื ื) ืชืืืื ืืฉื ืืช ืืช ืืงืื ืืืืจืืฅ ืืช ืืกืงืจืืคื ืืชืื ืืฃ ืืกืงืจืืคื ืืืชืืืช:
https://www.val.town/v/ynonp/translateToEnglishWithOpenAI
ืื ืฆืจืื ืืคืชื API ื Chat GPT ืื ืืื ืืืื ื ืืชื ืื ืืื ืืืชื ื.
ืื ืืืช ืกืงืจืืคืืื ืืืืืื ืืืชืจ ืขื ืืกืืก ืืคืฉืืืื
ืืคืฉืจ ืืฉืื ืื ืกืงืจืืคื ืฉืื ืื ื ืืื ืื ื val.town ืืกืงืจืืคืืื ืืืจืื. ืืืืืื ืืกืงืจืืคื ืืื:
import translateToEnglish from "https://esm.town/v/ynonp/translateToEnglishWithOpenAI";
console.log(await translateToEnglish("ืื ืืืฆื"));
ืื ืืืชืจ ืืขื ืืื, ืืกืงืจืืคื ืืื ืฉืืืืฆื ืืื ืืืืืจื:
import { OpenAI } from "https://esm.town/v/std/openai";
import { telegramSendMessage } from "https://esm.town/v/vtdocs/telegramSendMessage?v=5";
import translateToEnglishWithOpenAI from "https://esm.town/v/ynonp/translateToEnglishWithOpenAI";
export const telegramWebhookEchoMessage = async (req: Request) => {
// Verify this webhook came from our bot
if (
req.headers.get("x-telegram-bot-api-secret-token")
!== Deno.env.get("TELEGRAM_WEBHOOK_SECRET")
) {
return new Response("Not Allowed", { status: 401 });
}
// Echo back the user's message
const body = await req.json();
const text: string = body.message.text;
const chatId: number = body.message.chat.id;
const translated = await translateToEnglishWithOpenAI(text);
if (translated) {
await telegramSendMessage(
Deno.env.get("TELEGRAM_BOT_TOKEN"),
{ chat_id: chatId, text: translated },
);
} else {
await telegramSendMessage(
Deno.env.get("TELEGRAM_BOT_TOKEN"),
{ chat_id: chatId, text: "Translation error" },
);
}
return Response.json("ok");
};
ืืช ืืกืงืจืืคืืื ืฉืืชื ืืืชืืื ืฉื ืืคืฉืจ ืืืจืืฅ ืืชืืืื ืืืืืืื ืฉื ืฉืื, ืืฆืืจื ืืืืืจืืช (cron job) ืื ืืชืืืื ืืืงืฉืช HTTP (ืืื ืืืื ืืืืืจื ืคื).
ืื ืขืื1 418
ืืืื ืืืืชื: ืืืคืืฉ ืคืืืงืกืืื ื podcast index
ื val town ืืฉ ืืช ืืื ื AI-ืื ืืื ืืืืืื ืฉืคืืฉืชื - ืื ืจืง ืฉืืื ืืืชื ืืช ืืงืื ืืฉืืืื, ืืคืฉืจ ืื ืืืจืืฅ ืืืขืฉืืช Deploy ืืืืืฆืช ืืคืชืืจ, ืืื ืื ืืืื ื. ืืื ืื ื ืืืืข ืฉืื ืจืคืืื ืืกืคืงืื ืฉืืจืืช ืืืื ืืืคืืื ืขื ืชืืืื ืืืจืื ืืืชืจ ืฉืคืืช, ืืื ืจืคืืื ืืืืจืื ื ืืจืืืฉ ืืกืืจืื ืืื.
ืืืืจื ื val town ืืฉืืื ืืฉืืง ืขื ืืืื ืืืงืฉืชื ืฉืืืชืื ืคืื ืงืฆืื ืืืืคืืฉ ืคืืืงืกืืื ื podcast index. ืืืจืื ืืืคืชืขื ืืชืืฆืื ืขืืื ืื ืืกืืื ืืจืืฉืื, ืืืื ืืืจืืง ืื API ืฉืืื ืขื ื sha1 ืืืคืชื. ืื ืืงืื:
import crypto from "https://esm.sh/crypto-js";
export default async function searchPodcasts(query: string) {
const apiKey = Deno.env.get("PODCAST_INDEX_API_KEY");
const apiSecret = Deno.env.get("PODCAST_INDEX_API_SECRET");
// Generate authentication headers as per Podcast Index API requirements
const currentTime = Math.floor(Date.now() / 1000);
const hashString = apiKey + apiSecret + currentTime;
const hash = crypto.SHA1(hashString).toString();
const headers = {
"X-Auth-Key": apiKey,
"X-Auth-Date": currentTime.toString(),
"Authorization": hash,
"User-Agent": "ValTownPodcastSearch/1.0",
};
try {
const response = await fetch(\https://api.podcastindex.org/api/1.0/search/byterm?q=${encodeURIComponent(query)}\, {
method: "GET",
headers: headers,
});
if (!response.ok) {
throw new Error(\HTTP error! status: ${response.status}\);
}
const data = await response.json();
return data.feeds.map(podcast => ({
title: podcast.title,
description: podcast.description,
url: podcast.url,
artwork: podcast.artwork,
}));
} catch (error) {
console.error("Podcast search error:", error);
return [];
}
}
console.log(await searchPodcasts("syntax"));
ืืื ืืฉ ืืื 5 ืืงืืช ืชืืืื ืื ืืืฆืืจ ืืฉืืื ื val town ืืืืจืืฅ ืืืชื ืืฉืจ ืืืืืฉืง ืฉืืื ืืงืืฉืืจ:
https://www.val.town/v/ynonp/righteousLimeGalliform
ืจืง ืฉืืื ืื ืฉืฆืจืื ืงืืื ืืืฆืืจ ืืช ืฉื ื ืืฉืชื ื ืืกืืืื PODCAST_INDEX_API_KEY ื PODCAST_INDEX_API_SECRET ืืจื ืืืืฉืง ืฉื val town ืืืฉืืื ืฉืืื ืืงืืฉืืจ:
https://www.val.town/settings/environment-variables
ืืืฉืืื ืืงืื ืืช ืืืคืชืืืช ืืฉ ืืืฆืืจ ืืฉืืื ื podcast index api:
https://api.podcastindex.org/
ื .ื. ืืืืฉืง ืฉื podcast index ืื ืืืืืง ืืคืฉืจ ืืืฆืื ืืช ืื ืืืืืข ืขื ืคืืืงืกื, ืจืฉืืืืช ืืคืจืงืื ืืื ืืื ืงืื ืืงืืฆื ืืงืื ืฉื ืื ืคืจืง.1 418
ืืืืช Vue - ืืื ืขืืื Scoped Style
ื ืืชืื ืืช ืืงืื ืืื ืืงืืืคืื ื ืืช App.vue:
<script setup>
import Child from './Child.vue';
</script>
<template>
<p class="red">Hello World from App</p>
<Child />
</template>
<style scoped>
.red {
color: red;
}
</style>
ืืื Child.vue:
<script setup></script>
<template>
<button class="red">
Hello World from Child
</button>
</template>
ืืคืฉืจ ืืจืืืช ืืช ืืืืืื ืืืื ืืงืืฉืืจ ืืื:
https://tinyurl.com/4nff62kp
ืขืืฉืื ืืฉืืืืช - ืืื ืืืงืกื ืืืคืชืืจ ืืืคืืข ืืืืื? ืืืื ืืคืฉืจ "ืื ืชืง" ืืืชื ืืืขืืฆืื ืฉื App ืืื ืฉืื ืืงืื ืืช ืืืืจืช ืืืืื ืืฉื?
ืฉืืื ืื ืฉืืืืจืืช ืืขืืฆืื ืื ืืืืืง styled scoped ืืฉืื ืื ืืืขืื ืฉืืชืืืจืช ืืื:
https://www.tocode.co.il/blog/2021-10-watch-out-inherited-css, ืืืจืืช ืฉืื ืืืขืื ืืคืืกื ืืืื ืืขื ืืื ืช.1 418
ืืื ืืื ืืืช ืื ื ืจืืฆื ืืืขืืืจ ืืฉืชื ื ืจืืืงืืืื ื Vue ืืืืืื?
ืืงืื ืืื ื Vue ืื ืขืืื, ืื ืืคืืืช ืื ืขืืฉื ืืช ืื ืฉืืชืืืื ืชื. ืงืืืคืื ื ืื ืขืืืื ื:
<script setup>
import { ref } from 'vue'
import Child from './Child.vue';
const x = ref(10)
</script>
<template>
<Child :x="x" />
</template>
ืืงืืืคืื ื ืืช Child:
<script setup lang="ts">
const {x} = defineProps<{x: any}>();
function inc() {
x.value++;
}
</script>
<template>
<p>x = {{x}}</p>
<button @click="inc">+1</button>
</template>
ื ืจืื ืืืืื Child ืืงืื ืืืืืงื ืจืืืงืืืื x ืืืขืื ืืช ืขืจืื ื-1. ืืคืืขื ืืขืืจืช ืืคืจืืืจ ืืจื props ืืขืืืจื ืืช ื value ืฉื ืืืืืืงื ืืจืืืงืืืื, ืืืืืจ ืืชืื Child ืืืฉืชื ื x ืืื ืืกืคืจ. ืืืกืคืจ ืืื ืฉืื .value ืืืื ืืงืื ื ืืฉื.
ืื ืืื ืืืช ืืคืฉืจ ืืขืฉืืช?
ื Vue ืืฉ ืฉื ื ืคืืชืจืื ืืช ืืืืื ืืืฆื ืืื: ืืจืืฉืื ืืื ืฉ Child ืืืืื ืขื ืืืจืืข ื Parent ืืืคื ืืืืจืืข ืืืฉื ื ืืช x, ืืืฉื ื ืื ืืงืจื ืืฉื defineModel ืฉืืืืื ืืืคื ืืืื ืืืงื ืืืืช ืืฉืืืื ื ืืื ืืืืื ืช ืืงืื ื ืจืื ืืืืจื ืืื ืืขืืจืช ืืฉืชื ื ืจืืืงืืืื ืืงืืืคืื ื ืื. ืฉื ืืื ืคืืชืจืื ืืช ืืืืื.
ืืคืืชืจืื ืฉ Vue ืื ืจืฆื ืฉื ืืืฉื ืืื ืืขืืืฃ ืืช ืืืฉืชื ื ืืจืืืงืืืื ืืืืืืงื. ืืืืจ ืืื ืขืืื:
<script setup>
import { ref } from 'vue'
import Child from './Child.vue';
const x = ref({value: 10})
</script>
<template>
<Child :x="x" />
</template>
<script setup lang="ts">
const {x} = defineProps<{x: any}>();
function inc() {
x.value++;
}
</script>
<template>
<p>x = {{x.value}}</p>
<button @click="inc">+1</button>
</template>
ืืจืืจ ืืื ืื ืขืืื - ref ืืื ืจืงืืจืกืืื ืืืื ืื value ืฉืื ืืืื ืืฉืชื ื ืจืืืงืืืื, ืืื ืืฉืืขืืืจืื ืืืืืงื ืืจื props ืืื ืื ืืืื ืืช ืืจืืืงืืืืืืช ืฉื ืืฉืืืช ืืคื ืืืืื ืืฆืืจื ืจืงืืจืกืืืืช ืืืื Child ืืืื ืืฉื ืืช ืืช ืืืืืข.
ืื ืฉืืืขืชื ืืขื ืืื ืืืืืื ืืืืช ืืื ืืื ืงื "ืืคืชืืจ" ืืช ืืืขืื ืืฆืืจื ืื ื ืืื ื ืืืื ืืคืืื ืืื ืืฉืื ืื ืฉืื ืคืืชืจืื ืื ื ืืื. ืฉืชื ืืืจืืื ื"ื ืืื ืืช" ืืคืืชืจืื ืืืจืฉืืช ืืืืจืืช ืขื ืื ืื ืื ืื ื ืืกืคืื ืฉื vue, ืืืืืงื ืืคืืชืจืื ืืขืงืื ืืื ืืขืฆื ืืคืฉืื ืืืืชืจ, ืืืืืื ื ืฉืืื ืื ืืืจืฉ ืขืื ืื ืื ืื ืื.
ืืืงื ืฉืื ืืืืืืื ืืืืช ืืื ืฉืจืง ืืืื ืฉืคืืชืจืื ืืกืืื ืืื ืืืืื ืฉืื ื ืจืืื ืื ืขืืืื ืื ืืืืจ ืฉืื ืืคืืชืจืื ืื ืืื. ืืฉืืื ืืืืืข ืืคืืชืจืื ืื ืืื ืฆืจืื ืืคืขืืื ืืืืฉืื ืืงืจืื ืืชืืขืื, ืืืชืืื ืืื ืืื ืืคืฉืจืืืืช ืืืืืื ืืช ืืืชืจืื ืืช ืืืืกืจืื ืืช ืฉื ืื ืืคืฉืจืืช.1 418
ืืืืจ ื vercel ืชืืื ื nuxt ืืื ืื ื ืืขืื ืืขืฉืืช deploy ืืืืืฆื ืืืช ืืืงืื ืืช ืื ืืคืื ืืงืื ืฉื vercel. ืืกืืก ืื ืชืื ืื ืืื ืขืืืื neon ืืื ืืื ืฉืืืจ ืืขื ื.
1 418
ืชืื ืืช ืคืจืืืงื: nuxt, drizzle, auth0
ืืชืืื ืคืืจืกืืชื ืคื ืชืื ืืช ืืคืจืืืงื React ืฉืืฉืชืืฉ ื Next.js ืืืืื ืงืืืคืื ื ืืืช ืฆื ืฉืจืช, ืืฉืืืช ืืืืข ืืืกืืก ื ืชืื ืื ืื ืืืื ืืฉืชืืฉืื ืขื auth0. ืืืื ื ืจืื ืืช ืืืืง ืืฉื ื ืฉื ืืคืืกื ืื ืื ื ืืช ืืืชื ืชืื ืืช ืขืืืจ nuxt ืืืืฉืืื vue. ืืงืื ืืื:
https://github.com/ynonp/nuxt-drizzle-auth0-demo
ืืืื ื ืจืื ืื ืืฉ ืืจืืคื.
ื ืืืื ืืฉืชืืฉืื
ื ืืืื ืืืฉืชืืฉืื ืืืขืจืืช ืืชืืืจ ื auth0 ืืื ืฉืื ืื ื ืื ื ืฆืืจื ืืืชืืืฅ, ืืืืืง ืืื ืืืืืืช ื next. ืื ืืืืจ ืฉืืฆื ืฉืื ื ืื ืื ื ืฆืจืืืื ืืืคื ืืืืจืืข ืฉื ืืฉืชืืฉ ืฉืืชืืืจ ืื ืืชื ืชืง, ืื ืืื ืืืฉืชืืฉ ืืคืื ืงืฆืืืช ืฉื auth0 ืืื ืืืืื ืื ืืฉ ืืฉืชืืฉ ืืืืืจ.
ืืงืื ืืชืืื ืืงืืืฅ
server/routes/auth/auth0.get.ts:
export default defineOAuthAuth0EventHandler({
async onSuccess(event, { user, tokens }) {
await setUserSession(event, {
user: {
id: user.sub
}
})
return sendRedirect(event, '/hello')
},
// Optional, will return a json error and 401 status code by default
onError(event, error) {
console.log(\error in login\);
return sendRedirect(event, '/')
},
})
ืื ืืงืื ืฉืืืคื ืืืืจืืขืื ืฉืืืืขืื ื auth0 ืืฉืืฉืชืืฉ ืืชืืืจ ืืืขืจืืช. ืืฆื ืฉื nuxt ืื ื ืืืงื ืืช user.sub ืฉืื ืืืื ืืืฉืชืืฉ ืืฉืืชื ืืืชื ื session ืืื ืฉื ืืื ืืืฉืช ืืืื ืืืงืืืคืื ื ืืืช ืืื ืชืืื ืฆื ืฉืจืช.
ืืงืืืคืื ื ืื ืืืื ืืงืืืฅ pages/hello.vue ืืืจ ืืืืืช ืงืื ืฉืืืคืฉืจ ืืืืืจ ืืืขืจืืช:
<script setup>
import People from '../components/People.vue';
const { loggedIn, user, session, fetch, clear } = useUserSession()
</script>
<template>
<div v-if="loggedIn">
<h1>Welcome {{ user.id }}!</h1>
<p>Logged in since {{ session.loggedInAt }}</p>
<button @click="clear">Logout</button>
<People />
</div>
<div v-else>
<h1>Not logged in</h1>
<a href="/auth/auth0">Login with Auth0</a>
</div>
</template>
ืืฉืืื ืืืชืืืจ ืืืขืจืืช ืฆืจืื ืจืง ืืขืืืจ ืื ืชืื /auth/auth0 ืืืฉืืื ืืืชื ืชืง ืฆืจืื ืืืคืขืื ืืช ืืคืื ืงืฆืื clear ืฉืื ืงื ืืช ื Session. ืื ืืงืื ืืื ืืฉืชืืฉ ืืืืืื auth-utils ืฉื nuxt.
ืืฉืืื ืืืืืืจ ื Auth0 ืืฉ ืืืืืืจ ืืช ืืฉืชื ื ืืกืืืื ืฉืืื ืืงืืืฅ ื .env. ืืื ืืืคืชืืืช ืฉืขืืืื ืืืืืืจ ืืงืืืฅ ืืื ืฉืืคืจืืืงื ืืขืืื:
NUXT_SESSION_PASSWORD=
NUXT_OAUTH_AUTH0_CLIENT_ID=
NUXT_OAUTH_AUTH0_CLIENT_SECRET=
NUXT_OAUTH_AUTH0_DOMAIN=
DATABASE_URL=
ืืืืืจ ืืืกืืก ื ืชืื ืื
ืืืืืืจ ืืืจืืื ืืฉืชืืฉ ืืืืืง ืืืืชื ืงืื ืฉืืจืืืชื ืืชืืื ืืืื next. ืืฆื ืฉื nuxt ืืขืืจืช ืืืืืข ืืืกืืก ืื ืชืื ืื ืืคืจืื ื ืื ื ืงืฆืช ืฉืื ื:
1. ืืฉ ืืืืืืจ ื ืชืื ืฆื ืฉืจืช ืฉืืืฉืื ืืช ืื ืชืื ืื ืืืกืืก ืื ืชืื ืื.
2. ืืฉ ืืืคืขืื ืืช ืืคืื ืงืฆืื useAsyncData ืฉื nuxt ืืชืื ืืงืืืคืื ื ืื ืืืื ื ืืืฉืื ืืช ืืืืืข ืืื ืชืื ืฉืืฆืจื ื.
ืืฉืืื ืืกืขืืฃ ืืจืืฉืื ืื ื ืืืฆืจ ืงืืืฅ server/routes/api/people.get.ts ืขื ืืชืืื ืืื:
import { usersTable } from '@/db/schema';
import { db } from "@/db/drizzle";
export default eventHandler(async (event) => {
try {
const res = await requireUserSession(event)
const users = await db.select().from(usersTable);
return users;
} catch (err) {
return [];
}
})
ืื ืืืฉืชืืฉ ืืืืืจ ืืื ืืงืื ืืช ืจืฉืืืช ืืืฉืชืืฉืื ืืืกืืก ืื ืชืื ืื ืืืฉืืื ืืืฉืืง ืื ืืืฉืชืืฉ ืื ืืืืืจ ื ืืืืจ ืื ืจืฉืืื ืจืืงื.
ืืงืืืคืื ื ืื ืฉืืฉืชืืฉืช ืื ืชืื ืื ืฉืืืจื ืืงืืืฅ components/People.vue ืืื ืืงืื ืฉืื:
<script setup lang="ts">
const { data, status, error, refresh } = await useAsyncData(
'people',
() => $fetch('/api/people', {
credentials: 'include',
headers: useRequestHeaders(['cookie']),
})
)
</script>
<template>
<h1>People. Status = {{ status }}</h1>
<ul>
<li v-for="person in data">{{ person.email }}</li>
</ul>
</template>
<style lang="css" scoped>
</style>
ืืฉืืืืฉ ื fetch ืืชืื useAsyncData ื ืจืื ืืื ืืงืฉืช ืจืฉืช ืืื ืืืขืฉื ืื ืืงืฉื ืืงืืืืช ืื ืืงืื ืจืฅ ืืฆื ืืฉืจืช ื SSR. ืืฉืืงืื ืืืฉืื ืืืคืืคื ืืื ืืืืื ืืืจ ืืช ืืชืฉืืื (ืืืืืจ ืืช ืจืฉืืืช ืืืฉืชืืฉืื). ื ืฉืื ืื ืฉืื ื ืืืื ืืืขืืืจ ืืช ื cookie ืืืืคืืคื ืืฉืืื ืืฉืืืจ ืขื ื Session. ืฉืืจ ืืงืื ืื ืคืฉืื ืืื ืืืงื ืืช ืจืฉืืืช ืืืฉืชืืฉืื ืืื ืชืื ืฉืืืืจื ื ืืืฆืื ืืช ืืชืืืืช ืืืืื ืฉืืื ืขื ืืืกื.1 418
ืื ืขืืฉืื ืขื ืืงืื ืฉืื ืืืื ืื?
ืืืืื ืืืืชืืช. ืืืื ืชืืื ืืืชื.
ืืื ืืืงืืืืช ืืืคืืืืื ืืืืชืจ ืืชืื ืชืื ื ืงืจื Tutorial Hell. ืืืืืช ื Tutorial Hell ืืืืจ ืฉืืชื ืชืงืืข ืืจืืืช ืืืจืืืื ืฉืืกืืืจืื ืืื ืืืชืื ืืืจืื ืืื ืื ืืฉื ื ืืื ืืืจืืืื ืชืจืื ืื ืชืฆืืื ืืืชืื ืงืื ืืืฉ ืืขืฆืื. ืืืื ืืฉ ChatGPT ืืืื ืืืชืื ืื ืืืจืื ืฉืคืืชืจ ืืืืคื ืืืืื ืื ืืขืื ืืงืื ื Tutorial Hell ืื ื ืจืื ืื ืื ืจืข, ืื ืฉืืืืจ ืฉืื ืื ื ื ืฉืืจืื ืื ืืจืื ืืืชืจ ืืื.
ืืืืจื ื Tutorial Hell ืืื ืืืขืื ืืืืื ื ืฉื ืืฆืืื ืืืืืืื ืช. ืื ื ืืืื ืืืจืื ืืืขืจืืช ืืขืฉืืช ืื ืฉืื ื ืจืืฆื ืืืืฆืขืืช ืืืฆืืข ืืืจืืืช ืฉืงืจืืชื ืืืืจืื ืืืื ืืจื ื, ืืคืืื ืื ืื ื ืื ืืืื ืืช ืืืืจืืืช ืขืฆืื. ืืกืคืืง ืืืืช ืฆืขื ืฆืขื ืขื ืืืืจืื (ืื ืืขืืื ืฉื ืืืื ืืชืช ื AI ืืฉืืชื ืืืงืื ืืืืืจืื ืชืื ืืื ืชื ืืขื ืื ืืืจืื ืื ืขืืืืื) ืืืฉ ืื ืืขืจืืช. ืืืื ืืืช ืืขื ืืื ืืฉืืื, ืื ืขืืฉืื ืขื ืื ืืงืื ืืื ืฉืื ืื ื ืงืืจืืื, ืืขืชืืงืื ืืื ืืืื ืื?
ืืืื ื ืืืง ืืช ืืชืฉืืื ืืคื ืกืื ืืคืจืืืงื. ืืคืจืืืงื ืืืืืื ืืืืจื ืฉืื ื ืืจืืฉ ืืืชื ืืืืื ืืื ืืืจืื ืขืืืืื, ืืืื ื ืฉืืข ืืืืื ื ืืืฉืชืืฉ ืืื ืฉืคืืืช ื Tutorials. ืงืื ืฉืื ื ืื ืืืื ืืื ืืกืจ ืขืจื ืืงืื ืืงืกื ืืื, ืื ืืืืื ืื ื ืืื ื ืืช ืืืขืจืืช ืจืง ืืฉืืื ืืืืื ืืื ืืืจืื ืขืืืืื. ืืืืื ืืื ืืคืจืืืงื ืืืืืื ืืืื ืืื ืืงืจืื ืืืืืจืืืืก ืื ืชืฉืืืืช ืฉื Chat GPT ืจืง ืืืืื ืืื ื ืืชื ืืืืื ืืืืืจืื ืืืชืจ ืืขืืืงืื ืขื ืืืชื ื ืืฉื, ืืืจื ืื ืืืืช ืืงืจืื ืืช ืืชืืขืื ืืืืืืข ืืืืชืจ ืืขืืืง, ืืืกืืฃ ืืืชืื ืืช ืืงืื ืืขืฆืื ืืื ืืืกืชืื ืืืืืืจืืื ืืืื ืืืขืชืืง ืงืื. ืื ืืืจืื ืื ืขืืืืื ืืคืฉืจ ืืืืืจ ืืงืจืื ืืืืจืื ืืื ืืืืจื ืืกืืฃ ืชืืื ืืืืืช ืืกืืืืื ืืืชืื ืืช ืืื ืืืจืืฉ ืืืืืื ืืืกืืืจ ืืขืฆืื ืื ืืืฉืืขืืช ืืื ืขืืฉื ืื ืฉืืจื.
ืืคืจืืืงื ืคืจืืืงืฉื ืืชืฉืืื ื ืจืืืช ืืืชืจ ืืืจืืืช, ืื ืืืืืจื ืฉืืืืฉ ื Tutorial ืืืกื ืืื ืืืืื ืืืืคืฉืจ ืืกืืื ืืฉืืืืช ืืืจ ืืืชืจ. ืื ื ืืืืจ ืืคืืื ืืืจืืช ืฉืืชืืืืืช ืืคืชืืื ืืคื ืืื ืืฉืืืืช ืื ืืกืืืืื ืืืืืฉ ืืืื ืืชืื ืชืื ืฉืจืืฆืื ืืื ืืก ืจืง ืืจืืืืื ืืืขืชืงืช ืงืื ืฉืื ืื ืืืื ืื ืืคืจืืืงื ืคืจืืืงืฉื. ืืื ืื ืคื ืืฉืขืืฆืจืื ืืืฉืื ืขื ืื ืื ืื ื ืืืื ืื ืฉืืฉ ืื ื ืขืืืื ืืฉืืื ืืืชืจ ืืืขืชืงืช ืงืื. ืืคืจืืืงื ืคืจืืืงืฉื ืืฉ ืฉื ื ืืชืืจืื ืฉืขืืืื ืืืจืฉืื ืืชืขืจืืืช ืื ืืฉืืช:
1. ืจืืืฉืืช ืืืขืืืืช ืื ืืคืืืขื ืื ืชืื ื ืคืจืืืงืฉื.
2. ืืชืืื ืืฉืืืืช ืืขืืืื ืืงืืืืืช ืืคืจืืืงื, ืืืื ืขืืช ืืืคื ืงืื ืืืฆืืจืช ืืืกืืจืงืฆืืืช ืืืฉืืช ืืื ืฉืืงืืืื ืืืืฉื ืืืื ืืืืจ ืืืชืจ.
ืืื ืื ืืคืจืืืงื ืคืจืืืงืฉื ืืขืชืงืช ืงืื ืืื ืืืืื ื Tutorial ืื ื Chat GPT ืคืืืขืช ืืคืจืืืืงืืืืืืช ืืืืื ืืจืื.
ืืคืจืืืงื ืืืืื ืฉืื ื ืืจืืืฉ ืื ืื ืืืขืชืืง ืืืื ืงืื ืฉืื ื ืื ืืืื ืืื ืคืจืืืงื ืืืืืช ืืืืืช (Proof of Concept), ืืฉืื ื ืจืืฆื ืืื ืืช ืืฉืื ืืืจ ืืื ืืืจืืืช ืืืงืื ืื ืืืืจ, ืื ืืืืื ืืขืฆืื ืื ืืืืืืืช ืฉื ืกืคืจืื ืืกืืืืช. ืืืฆื ืืื ืื ื ืขืืื ืขื ืกืคืจืืืช ืืืืื ืฉืื ื ืื ืืื ืืืืจ ืืจืง ืจืืฆื ืืจืืืช ืื ืื ืืืืืื ืืคืชืืจ ืื ืืช ืืืขืื ืืื ืืืื ืื ืืืื ืืืืื ืืืชื, ืืืื ืื ื ืืจืืืฉ ืืืชืจ ื ืื ืืืขืชืืง ืงืื ืฉืืืืชื ืจืืข ืื ื ืื ืืืื, ืืชืื ืืื ื ืฉืื ืืืืื ืืืื ืืขืืื ืืืืื ืืฆืืจื ืืืืื ืืืืื ืืืชื ืืขืืืง ืืื ืืืจ ืืืจืืง ืืช ืงืื ื POC ืืื ืืื ืืช ืืช ืืื ืื ืื ืืืืฉ ืืืขืจืืช ืืืืืชืืช ืฉืื.
ื .ื. ืืคืืกื ืืื ืืืืจ ืกืคืฆืืคืืช ืขื ืงืื ืฉืื ื ืืขืชืืง ืืื ืืืืื. ืืจืื ืคืขืืื ืื ื ืืฉืชืืฉ ื Chat GPT ืืื ืืืชืื ืงืื ืฉืืืืชื ืืืื ืืืชืื ืืื ืืฉืื ื ืืืื ืืืืืง ืืื ืืื ืืืืจ ืืืืจืืืช, ืืืืืื ืืฉืื ื ืืืงืฉ ื Chat GPT ืืืชืื ืืช ืจืฉืืืช ืื ืืืืื ืืฉืืืข ืืชืืจ ืืขืจื ื JavaScript ืืจืืจ ืฉืืืืชื ืืืื ืืืชืื ืืช ืื ืืื ืืื ืืื ืืกื ืื ืืงืืื. ืืื ื AI ืื ืืืื ืืืืืืื ืืื ื ืฉืื ืืืฉืชืืฉ ืืื ืืื ืฉืืืชืจ, ืื ืขืื ืื ืืืืช ืชืืจื ืืืืืืช ืืงืื ืืืืืจืืช ืืคืืชืื.
1 418
ืืคืื ืืขืืืื ืื ืืืฉืืืช
ืืคืื ืืขืืืื ืื ืืืฉืืืช ืืื ืืืืชื. ืืคืขืืื ืืื ืืืจื ืื ื ืืืืชืจ ืขื ืคืจืืืงื ืืคื ื ืฉืื ืื ื ืืคืืื ืืชืืืืื (ืื ืืื ืื ืืื ืขืืฉืื ืืกืืื ืืช ืื ืื ืืืฉืงืืข ืืกืคืืง), ืืืืฆืข ืืขืืืื (ืืฉืืชื ืฉืื ืืืื ืจืขืืื ืืื ืืื ืืขืฆื ืื ืื ืฉืืื ืืช ืืืืืฅ, ืืฉ ืื ืจืขืืื ืืืฉ ืืื ืืืชืจ) ืืืคืืื ืืืจื ืฉืืฉ ืืฉืื ืืืื ืืฆืจืื ืจืง ืืืจืืืช ืืืชื (ืื ืื ืืกืคืืง ืืื).
ืืืืฉืืืช ืฉืืืจืืืช ืืคืื ื ืขืืช ืกืืื:
1. ืืฉ ืจืง ืืืืื ืืช ืืืช ืืืื ืื ืืคืกืคืก ืืืชื.
2. ืื ืืืจืืง ืืช ืื ืฉืื ืืชื ืชืืื ืื ืืืชืจ ืืืืืืฆืื ืื ืกืืช ืฉืื.
3. ืืื ืืืืื ืืื ืื ืืืืฅ ืขื ืคืจืืืงื ืฉืื ืืฆืืื, ืขืืืฃ ืืืชืืงื ืืืืจืื ืืืจืื ืฉืืืื ืื ืืืื ืืืฉืืืื.
4. ืื ืฉืื ืกืืืื ืฉืืจืื ืคืจืืืงื ืืื ืื ื ืืกืืงื ืืื ืขืืื ืืขื ืืจืื ืฉืื ืืืคืชื.
ืืฃ ืคืขื ืื ืงื ืืฉื ืืช ืกืืคืืจืื ืืจืืฉ ืืื ืื ื ืืื ืจืขืืื ืืช ืฉืฉืืื ืื ืกืืช ืืืืฅ ืืืงืื:
1. ืืืืื ืืืืื ืืืืื ืืืืช, ืืืืืืื ืืืืช ืืืืช ืืขืชืื ืืืชืจ ืงืจืืืืช ืืื ืฉืื ืฉืืืื ืื ืืืชืืืฅ ืืฉืืื ืื ืฆื ืืืชื.
2. ืืคืืจืืคืืืื ืฉืื ื ืืฆื ืชืืื ืืฆืืืื. ืื ืคืจืืืงื ืืื ืืืกืืก ืืคืจืืืงื ืืื.
3. ืืื ืืืืื ืขืื ืฉืขื ืื ืืคืืืงืก ืื ืืคืืืกืืืง, ืื ืืคืืื ืืงืืจืก. ืืืืืื ืืื ืืื ืืื ืืจื ืขืฉืืื.
4. ืืื ืืื ืืช ืคืจืืืงื ืืื ืขืืื ืืื ืืช ืงืืื ืคืจืืืงืืื ืืื ืื ืืื ืืืคืืื ืืจืืขืื.
ืืืืืฅ ืชืคืืกืช ืขืืื ืฉื ืฆืืืื ืืืื ืืคืชืื ืืช ืืืืช ืืืืชืจ ืขืฉืืื ืืืขืฉืืื ืืืื ืืืชืจ.
Endi mavjud! Telegram Tadqiqoti 2025 โ yilning asosiy insaytlari 
